öncelikle bi class ı listener olarak belirle, sonra onenable dan listener ı register et biliyorsundur sanırım bu aşamayı, artdından 2 tane event var socket4mc nin
PHP:
@EventHandler
public void onHandshake(BukkitSocketHandshakeEvent e) {
this.client = e.getClient();
}
bu kod bungeecord spigot sunucuna bağlanınca aktif olan şey client i e.getclient() ile yaptım ileride kullanıcan onu,
bu yazdığım kod bukkit e koyucan zaten belli oluyor BukkitSocket ten ardından veri isteyelim bungeeden;
PHP:
client.writeJSON("BungeeCord", "Get Oyuncu: " + p.getUniqueId().toString());
işte o client burda devreye giriyor, ben mesela burda "BungeeCord" channel ından göndermişim bu bungeecord channel illa bungeecord olmak zorunda değil yani onu istediğin gibi bir özel isim koyabilirsin ama bungeecord eklentindede ona göre düzenliycek, mesela ben get oyuncu: oyuncunun uuid demişim yani ben bi veri çekmek için oyuncunun uuid sini yazmışım fakat senin ihtiyacın olan şey direk şu;
PHP:
client.writeJSON("BungeeCord", "onlineplayercount");
b
bu şekilde bi veri iste bungee den nerede istediğin önemli değil istedikten sonra bi bungeecord eklentimiz vardır sanırım, yoksa buyur burdan ufak bilgiler al;
yardımcı olur bende pek bungee kullanmam ama bu link baya yardımcı oluyor ardından bungeecord class larımıza geçelim;
bukkit teki gibi listener ı register et bukkit ile aynı şekilde yapılıyor;
PHP:
getProxy().getPluginManager().registerListener(this,this);
ben bu şekilde yaptım hemen main class a koydum listener ı nereye koyduğunun bi önemi yok ardından;
PHP:
@EventHandler
public void onHandShake(BungeeSocketHandshakeEvent e){
messenger = e.getMessenger();
}
bi Messenger belirleyelim sunucular bağlanınca messager ve üstteki client ın classları sırasıyla,"SocketClient", "SocketMessenger" bu şekilde ardından niye bungeecord umuza spigot tan gelen veriyi kullanmak için yani onunla işlem yapmak için bi event açalım;
PHP:
@EventHandler
public void onJSON(BungeeSocketJSONEvent e) {
String channel = e.getChannel();
String data = e.getData();
if (channel.equals("BungeeCord") && data.startsWith("onlineplayercount")) {
e.write("");
}
}
gördüğün gibi "BungeeCord" channel ı burda devreye giriyor veri karmaşası olmasın diye böyle i sistem yapmışlar şimdi açıklıyım tek tek sana,
data.startsWith("onlineplayercount"))
bu kısım dikkatini çekmiştir burası bukkit te veri isteği yolladığımızda ne istediğimizi yazdık fakat onlineplayercount diyince sana online player ları vermez bu bi string yani eğer onlineplayercount verisini istiyorsan ifin altına bişiler daha yazmalıyız
e.write("");
bu kısım dan bahsediyorum yani şimdi biz veri alma isteği yolladık bukkit ten sonra bungee bunu listener ile algıladı filtreledi ki veri karmaşası olmasın diye şimdi bi geri bildirim yapmalıyız buda işte;
e.write(""); bunun ile olucak peki nasıl oluca;
zaten hali hazırda bungeecord un içinde olan(Apisinin) bi online count alma methodu var;
getProxy().getOnlineCount()
bu method ee bunu nasıl yollıycam şu şekilde;
e.write("onlineplayercount: " + getProxy().getOnlineCount());
dediğinde bukkit e geri bildirim atmış olursun şimdi ne olucak peki? bukkit class larımıza dönüyoruz(bukkit projemize yani)
bi event lazım bize bungee den gelenleri almak için oda bu;
PHP:
@EventHandler
public void onJSON(BukkitSocketJSONEvent e) {
String data = e.getData();
if(data.startsWith("onlineplayercount: ")){
//eğer bungee den gelen daha onlineplayercount: ile başlıyorsa dedik ve artık verimiz geldi
// artık bu kısım sana kalmış mesela split ile onlineplayercount: ı ayırırsın ve sadece online oyuncuların sayısı kalır elinde
// sonra işte veriyi bi yere atarsın sign ile orda kullanırsın ya da arraylist-hashmap vs. atıp scoreboard da gösterirsin burası sana kalmış
}
}
socket4mc bu kadar
