• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spieler Zähler

MnkyArts

Minecrafter
Registriert
3 April 2016
Beiträge
5
Alter
27
Diamanten
300
Moin, ich bin momentan dabei meine Website zu programmieren, nun bin ich an dem Punkt angelangt an dem ich auf meiner Website anzeigen möchte, wie viele Personen schon auf meinem Server waren. Leider habe ich jetzt gar keine Ahnung, wie ich das machen soll. Ich würde mich über jede hilfreiche Antwort freuen.

Mit freundlichen Grüßen,
MnkyArts
 

DarkPrincess

Kuhfänger
Registriert
31 August 2013
Beiträge
52
Diamanten
0
Brauchst doch nur eine MySQL Tabelle anlegen wenn noch nicht vorhanden.

Beim Joinen:
Code:
String query = "INSERT INTO `onlineplayers` (`uuid`,`lastlogin`,`status`) VALUES ('" + p.getUniqueId() + "', '" + System.currentTimeMillis() + "', '1') ON DUPLICATE KEY UPDATE `lastaccess` = '" + System.currentTimeMillis() + "',`status` = '1'";

Beim Quiten:
Code:
String quit = "UPDATE `onlineplayers` SET `status` = '0' WHERE `uuid` = '" + p.getUniqueId() + "'";


Mögliche MySQL Class
Code:
public final class MySQL {
    public static boolean hasMySQLDriver() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            return true;
        } catch (ClassNotFoundException ex) {
            MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Can't find MySQL Driver!", ex.getLocalizedMessage());
            return false;
        }
    }

    public static Connection getConnection(ConfigurationSection cs) {
        if(!cs.isString("host") || !cs.isInt("port") || !cs.isString("user") || !cs.isString("pass") || !cs.isString("data"))
            return null;
   
        try {
            return DriverManager.getConnection("jdbc:mysql://" + cs.getString("host") + ":" + cs.getString("port") + "/" + cs.getString("data"), cs.getString("user"), cs.getString("pass"));
        } catch (SQLException ex) {
            MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Can't connect to MySQL Server!", ex.getLocalizedMessage());
            return null;
        }
    }

    public static boolean executeInsUpDelQuery(ConfigurationSection cs, String[] search, String[] replace) {
        if(!hasMySQLDriver())
            return false;
   
        if(!cs.isConfigurationSection("connect")) {
            MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Missing connect Configuration section in the config file.");
            return false;
        }
   
        Connection con = getConnection(cs.getConfigurationSection("connect"));
        if(con == null)
            return false;
   
        boolean bol = true;
        if(cs.isString("query")) {
            if(!executeInsUpDelQuery(con, Utils.replaceAll(cs.getString("query"), search, replace)))
                bol = false;
        } else if(cs.isList("query")) {
            for(String query: cs.getStringList("query")) {
                if(!executeInsUpDelQuery(con, Utils.replaceAll(query, search, replace)))
                    bol = false;
            }
        }
        close(con);
        return bol;
    }

    private static boolean executeInsUpDelQuery(Connection con, String query) {
        try (PreparedStatement statement = con.prepareStatement(query)) {
            statement.execute();
            statement.close();
        } catch (SQLException ex) {
            MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Error on running insert/update/delete query " + query + ".", ex.getLocalizedMessage());
            return false;
        } finally {
            return true;
        }
    }

    public static void close(Connection con) {
        try {
            con.close();
        } catch (SQLException e) {
            MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Error on close MySQL connection.", e.getLocalizedMessage());
        }
    }
}

Und in der Config schauts dann so aus:
Code:
player-join:
  connect:
    user: root
    pass: root
    data: minecraft
    host: 127.0.0.1
    port: 3306
  query: 'INSERT INTO `onlineplayers` (`uuid`,`lastlogin`,`status`) VALUES (%uuid%, %time%, 1) ON DUPLICATE KEY UPDATE `lastaccess` = %time%,`status` = 1'
player-leave:
  connect:
    user: root
    pass: root
    data: minecraft
    host: 127.0.0.1
    port: 3306
  query: 'UPDATE `onlineplayers` SET `status` = 0 WHERE `uuid` = %uuid%'

So würde es dann in den Events aussehen z.B.
Code:
    @EventHandler(priority = EventPriority.LOWEST)
    public void onPlayerJoin(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        if(getConfig().istConfigurationSection("player-join"))
            Bukkit.getScheduler().runTaskAsynchronously(this, new runPlayer(getConfig().getConfigurationSection("player-join"), new String[] {"%name%", "%displayname%", "%uuid%", "%time%"}, new String[] {p.getName(), p.getDisplayName(), p.getUniqueId().toString(), String.valueOf(System.currentTimeMillis()/1000)}));
    }

    @EventHandler(priority = EventPriority.LOWEST)
    public void onPlayerQuit(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        if(getConfig().istConfigurationSection("player-leave"))
            Bukkit.getScheduler().runTaskAsynchronously(this, new runPlayer(getConfig().getConfigurationSection("player-leave"), new String[] {"%name%", "%displayname%", "%uuid%", "%time%"}, new String[] {p.getName(), p.getDisplayName(), p.getUniqueId().toString(), String.valueOf(System.currentTimeMillis()/1000)}));
    }

    private class runPlayer implements Runnable {
        private final ConfigurationSection _cs;
        private final String[] _search;
        private final Stirng[] _replace;
        public runPlayer(ConfigurationSection cs, String[] search, String[] replace) {
            _cs = cs;
            _search = search;
            _replace = replace;
        }

        @Override
        public void run() {
            MySQL.executeInsUpDelQuery(getConfig().getConfigurationSection("player-join"), new String[] {"%name%", "%displayname%", "%uuid%", "%time%"}, new String[] {_p.getName(), _p.getDisplayName(), _p.getUniqueId().toString(), String.valueOf(System.currentTimeMillis()/1000)});
        }
    }


Viel spass beim zusamenfügen jetzt :-D Und beim vollenden ;-)
 
Zuletzt bearbeitet:

DarkPrincess

Kuhfänger
Registriert
31 August 2013
Beiträge
52
Diamanten
0
Hab nochmal die Events Optimiert und die MySQL class erweitert mit dem close() da es beim Kopieren gefehlt hatte.

Jetzt musst du nur noch ein neues Plugin erstellen im NetBeans oder welchem Programm auch immer und die ganzen Sachen einfügen wo die hin müssen :p Dann biste eigentlich schon sogut wie fertig.

Dir das fertige Plugin hier zu machen ist ja nicht sinn und Zweck dieses Foren Bereiches ;-)
 
Oben