Web Spieler Zähler

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

  1. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    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
     
    #1
  2. 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.
     
    #2
  3. MnkyArts
    Offline

    MnkyArts

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

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Wie bereits gesagt:
     
    #4
    jensIO gefällt das.
  5. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    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 :)
     
    #5
  6. 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 ;-)
     
    #6
    jensIO und MnkyArts gefällt das.
  7. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Danke :) Wird jetzt zwar etwas Schwer für mich aber muss ich wohl hinbekommen wenn ich es so haben will.
     
    #7
  8. 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 ;-)
     
    #8
  9. MnkyArts
    Offline

    MnkyArts

    Registriert seit:
    3. April 2016
    Beiträge:
    5
    Hab ich ja auch nie behauptet. Trotzdem danke
     
    #9