1. 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

Dieses Thema im Forum "Webentwicklung" wurde erstellt von MnkyArts, 3. April 2016.


  1. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Geschlecht:
    männlich
    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
     
  2. Werbung
    Online

    Werbung

  3. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Waren oder sind?
    Dann brauchst du ein Plugin mit MySQL bzw MariaDB.
    Aktuelle Anzahl könntest du über die Server Query dir holen.
     
  4. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Geschlecht:
    männlich
    Waren, heißt ,,8'450 Spieler waren schon auf dem Server"
     
  5. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Wie bereits gesagt:
     
    • Gefällt mir Gefällt mir x 1
  6. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Geschlecht:
    männlich
    Könntest du mir eventuell erklären wie ich das am Besten mache? Ich bin nicht der beste in Java und mein Kollege der für uns die Plugins Schreibt ist momentan im Urlaub. Wäre nett wenn du mir hilfst :)
     
  7. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Brauchst doch nur eine MySQL Tabelle anlegen wenn noch nicht vorhanden.

    Beim Joinen:
    Code (Text):
    1. 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 (Text):
    1. String quit = "UPDATE `onlineplayers` SET `status` = '0' WHERE `uuid` = '" + p.getUniqueId() + "'";

    Mögliche MySQL Class
    Code (Text):
    1.  
    2. public final class MySQL {
    3.     public static boolean hasMySQLDriver() {
    4.         try {
    5.             Class.forName("com.mysql.jdbc.Driver");
    6.             return true;
    7.         } catch (ClassNotFoundException ex) {
    8.             MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Can't find MySQL Driver!", ex.getLocalizedMessage());
    9.             return false;
    10.         }
    11.     }
    12.  
    13.     public static Connection getConnection(ConfigurationSection cs) {
    14.         if(!cs.isString("host") || !cs.isInt("port") || !cs.isString("user") || !cs.isString("pass") || !cs.isString("data"))
    15.             return null;
    16.    
    17.         try {
    18.             return DriverManager.getConnection("jdbc:mysql://" + cs.getString("host") + ":" + cs.getString("port") + "/" + cs.getString("data"), cs.getString("user"), cs.getString("pass"));
    19.         } catch (SQLException ex) {
    20.             MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Can't connect to MySQL Server!", ex.getLocalizedMessage());
    21.             return null;
    22.         }
    23.     }
    24.  
    25.     public static boolean executeInsUpDelQuery(ConfigurationSection cs, String[] search, String[] replace) {
    26.         if(!hasMySQLDriver())
    27.             return false;
    28.    
    29.         if(!cs.isConfigurationSection("connect")) {
    30.             MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Missing connect Configuration section in the config file.");
    31.             return false;
    32.         }
    33.    
    34.         Connection con = getConnection(cs.getConfigurationSection("connect"));
    35.         if(con == null)
    36.             return false;
    37.    
    38.         boolean bol = true;
    39.         if(cs.isString("query")) {
    40.             if(!executeInsUpDelQuery(con, Utils.replaceAll(cs.getString("query"), search, replace)))
    41.                 bol = false;
    42.         } else if(cs.isList("query")) {
    43.             for(String query: cs.getStringList("query")) {
    44.                 if(!executeInsUpDelQuery(con, Utils.replaceAll(query, search, replace)))
    45.                     bol = false;
    46.             }
    47.         }
    48.         close(con);
    49.         return bol;
    50.     }
    51.  
    52.     private static boolean executeInsUpDelQuery(Connection con, String query) {
    53.         try (PreparedStatement statement = con.prepareStatement(query)) {
    54.             statement.execute();
    55.             statement.close();
    56.         } catch (SQLException ex) {
    57.             MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Error on running insert/update/delete query " + query + ".", ex.getLocalizedMessage());
    58.             return false;
    59.         } finally {
    60.             return true;
    61.         }
    62.     }
    63.  
    64.     public static void close(Connection con) {
    65.         try {
    66.             con.close();
    67.         } catch (SQLException e) {
    68.             MyPlugin.getPlugin().getLogger().log(Level.WARNING, "Error on close MySQL connection.", e.getLocalizedMessage());
    69.         }
    70.     }
    71. }
    72.  
    Und in der Config schauts dann so aus:
    Code (Text):
    1.  
    2. player-join:
    3.   connect:
    4.     user: root
    5.     pass: root
    6.     data: minecraft
    7.     host: 127.0.0.1
    8.     port: 3306
    9.   query: 'INSERT INTO `onlineplayers` (`uuid`,`lastlogin`,`status`) VALUES (%uuid%, %time%, 1) ON DUPLICATE KEY UPDATE `lastaccess` = %time%,`status` = 1'
    10. player-leave:
    11.   connect:
    12.     user: root
    13.     pass: root
    14.     data: minecraft
    15.     host: 127.0.0.1
    16.     port: 3306
    17.   query: 'UPDATE `onlineplayers` SET `status` = 0 WHERE `uuid` = %uuid%'
    18.  
    So würde es dann in den Events aussehen z.B.
    Code (Text):
    1.  
    2.     @EventHandler(priority = EventPriority.LOWEST)
    3.     public void onPlayerJoin(PlayerJoinEvent e) {
    4.         Player p = e.getPlayer();
    5.         if(getConfig().istConfigurationSection("player-join"))
    6.             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)}));
    7.     }
    8.  
    9.     @EventHandler(priority = EventPriority.LOWEST)
    10.     public void onPlayerQuit(PlayerQuitEvent e) {
    11.         Player p = e.getPlayer();
    12.         if(getConfig().istConfigurationSection("player-leave"))
    13.             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)}));
    14.     }
    15.  
    16.     private class runPlayer implements Runnable {
    17.         private final ConfigurationSection _cs;
    18.         private final String[] _search;
    19.         private final Stirng[] _replace;
    20.         public runPlayer(ConfigurationSection cs, String[] search, String[] replace) {
    21.             _cs = cs;
    22.             _search = search;
    23.             _replace = replace;
    24.         }
    25.  
    26.         @Override
    27.         public void run() {
    28.             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)});
    29.         }
    30.     }
    31.  

    Viel spass beim zusamenfügen jetzt :-D Und beim vollenden ;-)
     
    Zuletzt bearbeitet: 3. April 2016
    • Gefällt mir Gefällt mir x 2
  8. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Geschlecht:
    männlich
    Danke :) Wird jetzt zwar etwas Schwer für mich aber muss ich wohl hinbekommen wenn ich es so haben will.
     
  9. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    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 ;-)
     
  10. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Geschlecht:
    männlich
    Hab ich ja auch nie behauptet. Trotzdem danke