Problem mit Kommunizieren zwischen Spigot und Buneecord

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

Problem mit Kommunizieren zwischen Spigot und Buneecord

Beitragvon Letsplaybar » Di 19. Jul 2016, 10:25

Hallo ich schreibe momentan ein Party and Friendsystem was eine Gui haben soll. nun soweit hab ich auch alles geschrieben und es klappt alles bis auf dem Punkt wo der BungeecordServer nun die nötigen daten zurückschicken soll. Ich lasse die Server über netty.io kommunizieren. Hier der Code der nicht zu Funktionieren scheint:
Code: Alles auswählen
  1. package de.letsplaybar.partyandfriends.friend.netty.io;
  2. import java.util.LinkedList;
  3. import java.util.UUID;
  4. import de.letsplaybar.partyandfriends.party.Party;
  5. import de.letsplaybar.partyandfriends.system.Main;
  6. import net.md_5.bungee.BungeeCord;
  7. import net.md_5.bungee.api.connection.ProxiedPlayer;
  8. import io.netty.channel.ChannelHandlerContext;
  9. import io.netty.channel.SimpleChannelInboundHandler;
  10. public class CloudServerChannelHandler extends SimpleChannelInboundHandler<String>{
  11.    @SuppressWarnings("deprecation")
  12.    @Override
  13.    protected void channelRead0(ChannelHandlerContext ctx, String str)throws Exception {   
  14.       System.out.println(str);
  15.       if(str.startsWith("Einstellungen")){
  16.          String[] p = str.split(",");
  17.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  18.          ctx.channel().writeAndFlush(str+","+Main.instance.pm.isActive(ps)+","+Main.instance.fm.isEnable(ps));
  19.       }else if(str.startsWith("Partyanfragen")){
  20.          String[] p = str.split(",");
  21.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  22.          LinkedList<Party> pss = Main.instance.pm.getInquirys().get(ps);
  23.          for(Party pa :pss){
  24.             str = str+","+pa.getOwner();
  25.          }
  26.          ctx.channel().writeAndFlush(str);
  27.       }else if(str.startsWith("PlayerInv")){
  28.          String[] p = str.split(",");
  29.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(p[2]);
  30.          ctx.channel().writeAndFlush(str+","+ps != null);
  31.       }else if(str.startsWith("FriendALLACCEPT")){
  32.          String[] p = str.split(",");
  33.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  34.          for(String s: Main.instance.fm.getRequments(ps)){
  35.             Main.instance.fm.addFriend(s, ps);
  36.          }
  37.          ctx.channel().writeAndFlush(str);
  38.       }else if(str.startsWith("FriendALLDENY")){
  39.          String[] p = str.split(",");
  40.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  41.          for(String s: Main.instance.fm.getRequments(ps)){
  42.             Main.instance.fm.deny(s, ps);
  43.          }
  44.          ctx.channel().writeAndFlush(str);
  45.       }else if(str.startsWith("PartyALLDENY")){
  46.          String[] p = str.split(",");
  47.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  48.          for(Party pp : Main.instance.pm.getInquirys().get(ps)){
  49.             pp.getOwner().sendMessage("§7[§dParty§7] §a§4Der Spieler "+ ps.getDisplayName()+ " §4hat deine Partyeinladung Abgelehnt");
  50.          }
  51.          Main.instance.pm.getInquirys().get(ps).clear();
  52.          ctx.channel().writeAndFlush(str);
  53.       }else if(str.startsWith("PACCEPT")){
  54.          String[] p = str.split(",");
  55.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  56.          ProxiedPlayer pp = BungeeCord.getInstance().getPlayer(p[2]);
  57.          if(pp == null){
  58.             ctx.channel().writeAndFlush("Error,"+p[1]);
  59.             ps.sendMessage("§7[§dParty§7] §a§cDer Spieler ist nicht online");
  60.             return;
  61.          }
  62.          Party pps =Main.instance.pm.getPartyPlayer().get(pp);
  63.          if(Main.instance.pm.getInquirys().get(ps).contains(pps)){
  64.             pps.addPlayer(ps);
  65.             ctx.channel().writeAndFlush(str);
  66.          }else{
  67.             ctx.channel().writeAndFlush("Error,"+p[1]);
  68.          }
  69.       }else if(str.startsWith("PDENY")){
  70.          String[] p = str.split(",");
  71.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  72.          ProxiedPlayer pp = BungeeCord.getInstance().getPlayer(p[2]);
  73.          if(pp == null){
  74.             ctx.channel().writeAndFlush("Error,"+p[1]);
  75.             ps.sendMessage("§7[§dParty§7] §a§cDer Spieler ist nicht online");
  76.             return;
  77.          }
  78.          Party pps =Main.instance.pm.getPartyPlayer().get(pp);
  79.          if(Main.instance.pm.getInquirys().get(ps).contains(pps)){
  80.             LinkedList<Party> partys = Main.instance.pm.getInquirys().get(ps);
  81.             Party party = null;
  82.             boolean is = false;
  83.             for(Party part : partys){
  84.                if(part.getOwner().equals(pp)){
  85.                   party = part;
  86.                   is = true;
  87.                }
  88.             }
  89.             if(is){
  90.                partys.remove(party);
  91.                Main.instance.pm.getInquirys().put(ps, partys);
  92.                ps.sendMessage("§7[§dParty§7] §a§aDie Anfrage wurde von dir Abgelehnt!");
  93.                pp.sendMessage("§7[§dParty§7] §a§4Der Spieler "+ ps.getDisplayName()+ " §4hat deine Partyeinladung Abgelehnt");
  94.             }
  95.             ctx.channel().writeAndFlush(str);
  96.          }else{
  97.             ctx.channel().writeAndFlush("Error,"+p[1]);
  98.          }
  99.       }else if(str.startsWith("FACCEPT")){
  100.          String[] p = str.split(",");
  101.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  102.          ProxiedPlayer pp = BungeeCord.getInstance().getPlayer(p[2]);
  103.          if(pp == null){
  104.             Main.instance.fm.addFriend(p[2], ps);
  105.             ctx.channel().writeAndFlush(str);
  106.             return;
  107.          }
  108.          Main.instance.fm.addFriend(pp, ps);
  109.          ctx.channel().writeAndFlush(str);
  110.       }else if(str.startsWith("FDENY")){
  111.          String[] p = str.split(",");
  112.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  113.          ProxiedPlayer pp = BungeeCord.getInstance().getPlayer(p[2]);
  114.          if(pp == null){
  115.             Main.instance.fm.deny(p[2], ps);
  116.             ctx.channel().writeAndFlush(str);
  117.             return;
  118.          }
  119.          Main.instance.fm.deny(pp, ps);
  120.          ctx.channel().writeAndFlush(str);
  121.       }else if(str.startsWith("PDEAK")){
  122.          String[] p = str.split(",");
  123.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  124.          Main.instance.pm.setisActive(ps, !Main.instance.pm.isActive(ps));
  125.          ctx.channel().writeAndFlush(str);
  126.       }else if(str.startsWith("PAK")){
  127.          String[] p = str.split(",");
  128.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  129.          Main.instance.pm.setisActive(ps, !Main.instance.pm.isActive(ps));
  130.          ctx.channel().writeAndFlush(str);
  131.       }else if(str.startsWith("FDEAK")){
  132.          String[] p = str.split(",");
  133.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  134.          Main.instance.fm.changeEnable(ps);
  135.          ctx.channel().writeAndFlush(str);         
  136.       }else if(str.startsWith("FAK")){
  137.          String[] p = str.split(",");
  138.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  139.          Main.instance.fm.changeEnable(ps);
  140.          ctx.channel().writeAndFlush(str);
  141.       }
  142.       
  143.    }
  144.    @Override
  145.    public void channelActive(ChannelHandlerContext ctx) throws Exception{
  146.       System.out.println(ctx.channel().remoteAddress()+" ist joined the friendsystem, When it is not our change the port of this service");
  147.    }
  148.    @Override
  149.    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception{
  150.       System.out.println(cause.getMessage());
  151.    }
  152.    
  153.    
  154.    
  155. }


und hier der log:
Code: Alles auswählen
  1. 11:13:37 [INFO] Einstellungen,293664b3-475f-394f-8947-24cc7d813656
  2. 11:13:37 [INFO] null
  3. 11:13:40 [INFO] Einstellungen,293664b3-475f-394f-8947-24cc7d813656
  4. 11:13:40 [INFO] null
  5. 11:13:40 [INFO] Partyanfragen,293664b3-475f-394f-8947-24cc7d813656
  6. 11:13:40 [INFO] null
  7. 11:13:40 [INFO] Partyanfragen,293664b3-475f-394f-8947-24cc7d813656
  8. 11:13:40 [INFO] null
  9. 11:13:41 [INFO] Partyanfragen,293664b3-475f-394f-8947-24cc7d813656
  10. 11:13:41 [INFO] null
  11. 11:13:44 [INFO] FriendALLACCEPT,293664b3-475f-394f-8947-24cc7d813656
  12. 11:13:44 [INFO] null
  13. 11:13:48 [INFO] FriendALLDENY,293664b3-475f-394f-8947-24cc7d813656
  14. 11:13:48 [INFO] null

das gibt er aus wenn ich raufklicke wie ihr sieht kein error...
woran liegt es bzw. wenn ihr auch nicht wisst wie kann ich die Strings sonst hin und her schicken um das gleiche Resultat zubekommen?
Bild
Helfe Wo ich kann.
Mein MinecraftServer: Letsplaybaro.de - Suchen Developer/Bilder

I hacked 127.0.0.1!!! :)
Benutzeravatar
Letsplaybar
 
Beiträge: 195
Registriert: Mo 1. Feb 2016, 17:21
Wohnort: Berlin

Re: Problem mit Kommunizieren zwischen Spigot und Buneecord

Beitragvon monst12 » Di 19. Jul 2016, 10:52

Hey,

zuerst einmal die Frage: Hast du sowohl einen StringEncoder, als auch einen StringDecoder in deiner Pipeline hinzugefügt?
Es wäre somit auch gut zu wissen, wie deine Pipeline aufgebaut ist.

Daraufhin:
Was möchtest du beispielsweise mit dem "Befehl" Einstellungen bezwecken?
Code: Alles auswählen
  1. if(str.startsWith("Einstellungen")){
  2.          String[] p = str.split(",");
  3.          ProxiedPlayer ps = BungeeCord.getInstance().getPlayer(UUID.fromString(p[1]));
  4.          ctx.channel().writeAndFlush(str+","+Main.instance.pm.isActive(ps)+","+Main.instance.fm.isEnable(ps));
  5. }

Aktuell bezweckst du, dass du den String ausliest, einen Spieler nach UUID suchst und dann die Daten in der Pipeline zurücksendest. Daher werden vermutlich die erfassten Daten null sein.

Also empfehle ich dir ein paar mehr Debug-Ausgaben, um den Fehler zu finden, und zur Übersicht eventuell auch der Umstieg auf ein Packet basiertes System.

Darüber hinaus kann ich dir auch noch drei Netty Tutorials vom Janhektor empfehlen. Er zeigt auch sehr schön, wie man mit der Fehlerbehebung in Netty vorgehen kann.
Soweit die Theorie.

MfG
monst12
Benutzeravatar
monst12
 
Beiträge: 239
Registriert: Sa 19. Apr 2014, 22:14

Re: Problem mit Kommunizieren zwischen Spigot und Buneecord

Beitragvon Letsplaybar » Di 19. Jul 2016, 11:54

das null ist der cause grund aufbau der serverpipline:
Code: Alles auswählen
  1. public void CloudServer() throws Exception{
  2.       
  3.       File file = new File(getDataFolder(),"config.yml");
  4.       if(!file.exists())
  5.       file.createNewFile();
  6.       Configuration cfg = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file);
  7.       
  8.       
  9.       if(!cfg.getKeys().contains("port")){
  10.       cfg.set("port", 8888);
  11.       ConfigurationProvider.getProvider(YamlConfiguration.class).save(cfg, file);
  12.       }
  13.       int port = cfg.getInt("port");
  14.       
  15.       NioEventLoopGroup parent = new NioEventLoopGroup();
  16.       NioEventLoopGroup child = new NioEventLoopGroup();
  17.       try {
  18.          ServerBootstrap bootstrap = new ServerBootstrap()
  19.             .group(parent, child)
  20.             .channel(NioServerSocketChannel.class)
  21.             .childHandler(new ChannelInitializer<Channel>() {
  22.                @Override protected void initChannel(Channel channel) throws Exception {
  23.                   channel.pipeline().addLast(new StringDecoder()).addLast(new StringEncoder()).addLast(new CloudServerChannelHandler());
  24.                   c.add(channel);
  25.                }
  26.             });
  27.          bootstrap.bind(port).sync().channel().closeFuture().sync();
  28.          BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  29.          for(;;){
  30.             String imput =reader.readLine();
  31.             
  32.             for(Channel c : c){
  33.                c.writeAndFlush("[Server] "+imput);
  34.             }
  35.          }
  36.       }finally {
  37.          parent.shutdownGracefully();
  38.          child.shutdownGracefully();
  39.       }
  40.    }
  41.    
  42. }

und die wird so aufgerufen in der onenable methode:
Code: Alles auswählen
  1. BungeeCord.getInstance().getScheduler().runAsync(instance, new Runnable() {
  2.          
  3.          @Override
  4.          public void run() {
  5.             try {
  6.                CloudServer();
  7.             } catch (Exception e) {
  8.                e.printStackTrace();
  9.             }
  10.             
  11.          }
  12.       });
Bild
Helfe Wo ich kann.
Mein MinecraftServer: Letsplaybaro.de - Suchen Developer/Bilder

I hacked 127.0.0.1!!! :)
Benutzeravatar
Letsplaybar
 
Beiträge: 195
Registriert: Mo 1. Feb 2016, 17:21
Wohnort: Berlin

Re: Problem mit Kommunizieren zwischen Spigot und Buneecord

Beitragvon Letsplaybar » Di 19. Jul 2016, 12:01

Code: Alles auswählen
  1. @Override
  2.    protected void channelRead0(ChannelHandlerContext ctx, String str) throws Exception {
  3.       System.out.println(str);
  4.       if(str.startsWith("Einstellungen")){
  5.          String[] p = str.split(",");
  6.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  7.          Main.instance.cm.createEinstellungsInv(pp, Boolean.getBoolean(p[2]), Boolean.getBoolean(p[3]));
  8.       }else if(str.startsWith("Partyanfragen")){
  9.          String[] p = str.split(",");
  10.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  11.          Main.instance.cm.createAnfragenPlayerinv(pp, p[2], "§7Partyanfragen");
  12.       }else if(str.startsWith("PlayerInv")){
  13.          String[] p = str.split(",");
  14.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  15.          Main.instance.cm.createPlayerinv(pp, p[2], Boolean.getBoolean(p[3]));
  16.       }else if(str.startsWith("FriendALLACCEPT")){
  17.          String[] p = str.split(",");
  18.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  19.          Main.instance.cm.createFreundAnfrageInv(pp, 0);
  20.       }else if(str.startsWith("FriendALLDENY")){
  21.          String[] p = str.split(",");
  22.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  23.          Main.instance.cm.createFreundAnfrageInv(pp, 0);
  24.       }else if(str.startsWith("PartyALLDENY")){
  25.          String[] p = str.split(",");
  26.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  27.          Main.instance.channel.writeAndFlush("Partyanfragen,"+pp.getUniqueId().toString());
  28.       }else if(str.startsWith("PACCEPT")){
  29.          String[] p = str.split(",");
  30.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  31.          Main.instance.cm.createAnfragenPlayerinv(pp, p[2], "§7Partyanfrage");
  32.       }else if(str.startsWith("PDENY")){
  33.          String[] p = str.split(",");
  34.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  35.          Main.instance.cm.createAnfragenPlayerinv(pp, p[2], "§7Partyanfrage");
  36.       }else if(str.startsWith("FACCEPT")){
  37.          String[] p = str.split(",");
  38.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  39.          Main.instance.cm.createAnfragenPlayerinv(pp, p[2], "§5Freundesanfrage");
  40.       }else if(str.startsWith("FDENY")){
  41.          String[] p = str.split(",");
  42.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  43.          Main.instance.cm.createAnfragenPlayerinv(pp, p[2], "§5Freundesanfrage");
  44.       }else if(str.startsWith("PDEAK")){
  45.          String[] p = str.split(",");
  46.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  47.          Main.instance.channel.writeAndFlush("Einstellungen,"+pp.getUniqueId().toString());
  48.       }else if(str.startsWith("PAK")){
  49.          String[] p = str.split(",");
  50.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  51.          Main.instance.channel.writeAndFlush("Einstellungen,"+pp.getUniqueId().toString());
  52.       }else if(str.startsWith("FDEAK")){
  53.          String[] p = str.split(",");
  54.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  55.          Main.instance.channel.writeAndFlush("Einstellungen,"+pp.getUniqueId().toString());
  56.       }else if(str.startsWith("FAK")){
  57.          String[] p = str.split(",");
  58.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  59.          Main.instance.channel.writeAndFlush("Einstellungen,"+pp.getUniqueId().toString());
  60.       }else if(str.startsWith("Error")){
  61.          String[] p = str.split(",");
  62.          Player pp = Bukkit.getPlayer(UUID.fromString(p[1]));
  63.          if(pp !=  null){
  64.             pp.closeInventory();
  65.          }
  66.       }
  67.    }
  68.    

das ist der Teil von der Spigot/Bukkit plugin nun übergiebt er auch den String wieder zurück dafür kommt aber ein
Code: Alles auswählen
  1. [12:02:58] [nioEventLoopGroup-2-1/INFO]: Einstellungen,7524632d-021e-4ef7-88c8-4588447b66bd,true,true
  2. [12:02:58] [nioEventLoopGroup-2-1/WARN]: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
  3. net.minecraft.server.v1_8_R3.CancelledPacketHandleException

wieder wenn ich auf das Item für Einstellung klicke.
hier noch mal die Methode wo die erste Ausgabe kommt.
Code: Alles auswählen
  1. /**
  2. *
  3. */
  4. package de.letsplaybar.partiesandfriends.listener;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.event.EventHandler;
  7. import org.bukkit.event.Listener;
  8. import org.bukkit.event.inventory.InventoryClickEvent;
  9. import org.bukkit.inventory.meta.ItemMeta;
  10. import org.bukkit.inventory.meta.SkullMeta;
  11. import de.letsplaybar.partiesandfriends.system.Main;
  12. /**
  13. * @author Letsplaybar
  14. *
  15. */
  16. public class InventoryClickEvent_Listener implements Listener {
  17.    private Main plugin;
  18.    public InventoryClickEvent_Listener(Main main) {
  19.       this.plugin = main;
  20.       plugin.getServer().getPluginManager().registerEvents(this, main);
  21.    }
  22.    @SuppressWarnings("deprecation")
  23.    @EventHandler
  24.    public void OnClick(InventoryClickEvent e) {
  25.       Player p = (Player) e.getWhoClicked();
  26.       if (e.getClickedInventory() != null) {
  27.          if (e.getClickedInventory().getName().equalsIgnoreCase("§5Freunde")) {
  28.             e.setCancelled(true);
  29.             if (e.getCurrentItem() != null) {
  30.                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§eEinstellungen")) {
  31.                   plugin.channel.writeAndFlush("Einstellungen,"+p.getUniqueId().toString());
  32.                }else if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§aPartyanfragen")){
  33.                   plugin.channel.writeAndFlush("Partyanfragen,"+p.getUniqueId().toString());
  34.                }else if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§dFreundschaftsanfragen")){
  35.                   plugin.cm.createFreundAnfrageInv(p, 0);
  36.                }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Nächste Seite")){
  37.                   int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  38.                   v++;
  39.                   ItemMeta im =e.getCurrentItem().getItemMeta();
  40.                   im.getLore().remove(1);
  41.                   im.getLore().set(1, String.valueOf(v));
  42.                   e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  43.                   plugin.cm.createFreundInv(p, v*35);
  44.                }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Vorherige Seite")){
  45.                   int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  46.                   if(v == 0)
  47.                      return;
  48.                   v--;
  49.                   ItemMeta im =e.getCurrentItem().getItemMeta();
  50.                   im.getLore().remove(1);
  51.                   im.getLore().set(1, String.valueOf(v));
  52.                   e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  53.                   plugin.cm.createFreundInv(p, v*35);
  54.                   
  55.                }else{
  56.                   SkullMeta s = (SkullMeta) e.getCurrentItem().getItemMeta();
  57.                   
  58.                   plugin.channel.writeAndFlush("PlayerInv,"+p.getUniqueId().toString()+","+s.getOwner());
  59.                }
  60.             }
  61.          }else if(e.getClickedInventory().getName().equalsIgnoreCase("§5Freundesanfragen")) {
  62.             e.setCancelled(true);
  63.             if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§2Alle Anfragen annehmen")) {
  64.                plugin.channel.writeAndFlush("FriendALLACCEPT,"+p.getUniqueId().toString());
  65.             }else if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Alle Anfragen ablehnen")){
  66.                plugin.channel.writeAndFlush("FriendALLDENY,"+p.getUniqueId().toString());
  67.             }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Nächste Seite")){
  68.                int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  69.                v++;
  70.                ItemMeta im =e.getCurrentItem().getItemMeta();
  71.                im.getLore().remove(1);
  72.                im.getLore().set(1, String.valueOf(v));
  73.                e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  74.                plugin.cm.createFreundInv(p, v*35);
  75.             }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Vorherige Seite")){
  76.                int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  77.                if(v == 0)
  78.                   return;
  79.                v--;
  80.                ItemMeta im =e.getCurrentItem().getItemMeta();
  81.                im.getLore().remove(1);
  82.                im.getLore().set(1, String.valueOf(v));
  83.                e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  84.                plugin.cm.createFreundInv(p, v*35);
  85.                
  86.             }else{
  87.                SkullMeta s = (SkullMeta) e.getCurrentItem().getItemMeta();
  88.                plugin.cm.createAnfragenPlayerinv(p, s.getOwner(), "§5Freundesanfrage");
  89.             }
  90.          }else if(e.getClickedInventory().getName().equalsIgnoreCase("§7Partyanfragen")) {
  91.             e.setCancelled(true);
  92.              if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Alle Anfragen ablehnen")){
  93.                plugin.channel.writeAndFlush("PartyALLDENY,"+p.getUniqueId().toString());
  94.             }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Nächste Seite")){
  95.                int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  96.                v++;
  97.                ItemMeta im =e.getCurrentItem().getItemMeta();
  98.                im.getLore().remove(1);
  99.                im.getLore().set(1, String.valueOf(v));
  100.                e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  101.                plugin.cm.createFreundInv(p, v*35);
  102.             }else if(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getDisplayName().equalsIgnoreCase("§4Vorherige Seite")){
  103.                int v = Integer.valueOf(e.getWhoClicked().getInventory().getItem(52).getItemMeta().getLore().get(1)).intValue();
  104.                if(v == 0)
  105.                   return;
  106.                v--;
  107.                ItemMeta im =e.getCurrentItem().getItemMeta();
  108.                im.getLore().remove(1);
  109.                im.getLore().set(1, String.valueOf(v));
  110.                e.getWhoClicked().getInventory().getItem(52).setItemMeta(im);
  111.                plugin.cm.createFreundInv(p, v*35);
  112.                
  113.             }else{
  114.                SkullMeta s = (SkullMeta) e.getCurrentItem().getItemMeta();
  115.                plugin.cm.createAnfragenPlayerinv(p, s.getOwner(), "§7Partyanfrage");
  116.             }
  117.          }else if(e.getClickedInventory().getName().equalsIgnoreCase("§7Partyanfrage")) {
  118.             e.setCancelled(true);
  119.             String anfrage = ((SkullMeta)p.getInventory().getItem(10).getItemMeta()).getOwner();
  120.             if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§2Annehmen")){
  121.                plugin.channel.writeAndFlush("PACCEPT,"+p.getUniqueId().toString()+","+anfrage);
  122.             }else if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Ablehmen")){
  123.                plugin.channel.writeAndFlush("PDENY,"+p.getUniqueId().toString()+","+anfrage);
  124.             }
  125.             
  126.          }else if(e.getClickedInventory().getName().equalsIgnoreCase("§5Freundesanfrage")) {
  127.             e.setCancelled(true);
  128.             String anfrage = ((SkullMeta)p.getInventory().getItem(10).getItemMeta()).getOwner();
  129.             if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§2Annehmen")){
  130.                plugin.channel.writeAndFlush("FACCEPT,"+p.getUniqueId().toString()+","+anfrage);
  131.             }else if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Ablehmen")){
  132.                plugin.channel.writeAndFlush("FDENY,"+p.getUniqueId().toString()+","+anfrage);
  133.             }
  134.          }else if(e.getClickedInventory().getName().equalsIgnoreCase("§bEinstellungen")) {
  135.             int i = e.getSlot();
  136.             if(i < 9)
  137.                return;
  138.             if(p.getInventory().getItem(i-9).getItemMeta().getDisplayName().equalsIgnoreCase("§aPartyanfragen")){
  139.                e.setCancelled(true);
  140.                if(e.getCurrentItem().getData().getData() == (byte)13){
  141.                   plugin.channel.writeAndFlush("PDEAK,"+p.getUniqueId().toString());
  142.                }else if (e.getCurrentItem().getData().getData() == (byte)14){
  143.                   plugin.channel.writeAndFlush("PAK,"+p.getUniqueId().toString());
  144.                }
  145.             }else if(p.getInventory().getItem(i-9).getItemMeta().getDisplayName().equalsIgnoreCase("§dFreundschaftsanfragen")){
  146.                e.setCancelled(true);
  147.                if(e.getCurrentItem().getData().getData() == (byte)13){
  148.                   plugin.channel.writeAndFlush("FDEAK,"+p.getUniqueId().toString());
  149.                }else if (e.getCurrentItem().getData().getData() == (byte)14){
  150.                   plugin.channel.writeAndFlush("FAK,"+p.getUniqueId().toString());
  151.                }
  152.             }
  153.          }
  154.       }
  155.    }
  156. }
Bild
Helfe Wo ich kann.
Mein MinecraftServer: Letsplaybaro.de - Suchen Developer/Bilder

I hacked 127.0.0.1!!! :)
Benutzeravatar
Letsplaybar
 
Beiträge: 195
Registriert: Mo 1. Feb 2016, 17:21
Wohnort: Berlin

Re: Problem mit Kommunizieren zwischen Spigot und Buneecord

Beitragvon monst12 » Di 19. Jul 2016, 14:37

Hey,

ich habe mir mal alles angesehen und habe ein paar Vorschläge:

1) Laut JavaDocs von Netty (4.0.3.9.Final), benötigt der StringDecoder vorher einen LineBasedFrameDecoder.
Das könnte auch die "Fehler"-Nachricht
Code: Alles auswählen
  1. [12:02:58] [nioEventLoopGroup-2-1/WARN]: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.

erklären, da bereits im StringDecoder ein Fehler enstand, der bis zum letzten handler weitergereicht wurde und nicht behandelt wurde.
Somit versuch doch mal, wie im folgenden Auszug der JavaDocs deine Pipeline aufzubauen (zum Schluss natürlich wieder deinen eigenen Handler hinzufügen).
Auch versuch etwas mit dem Parameter in der LineBasedFrameDecoder-Klasse maxLength zu experimentieren, da sie die Frame-Länge bestimmt (Aber 80 dürfte ein guter Anfang sein).
Code: Alles auswählen
  1. public class StringEncoder
  2. extends MessageToMessageEncoder<CharSequence>
  3. Encodes the requested String into a ByteBuf. A typical setup for a text-based line protocol in a TCP/IP socket would be:
  4. ChannelPipeline pipeline = ...;
  5. // Decoders
  6. pipeline.addLast("frameDecoder", new LineBasedFrameDecoder(80));
  7. pipeline.addLast("stringDecoder", new StringDecoder(CharsetUtil.UTF_8));
  8. // Encoder
  9. pipeline.addLast("stringEncoder", new StringEncoder(CharsetUtil.UTF_8));
  10. and then you can use a String instead of a ByteBuf as a message:
  11. void channelRead(ChannelHandlerContext ctx, String msg) {
  12.      ch.write("Did you say '" + msg + "'?\n");
  13. }


2) Füge mal in jeden deiner Handler eine Debug-Nachricht ein, um zu erkennen, wo es anfängt zu stocken.
Am besten in die exceptionCaught(), channelActive(), channelRegistered(), channelUnregistered() und channelRead() Methode, um den "Lebenszyklus" deiner Nachrichten genaustens verfolgen zu können.

3) Lass bei eingehender Nachricht in Spigot ein Event aufrufen oder füge einen eigenen "EventHandler" hinzu, der deine Anfragen und Nachrichten bearbeitet. Denn du arbeitest durch Netty in anderen Threads und somit kann sich eventuell der Spigot-Server daran stören , dass asynchron auf Methoden zugegriffen wird, die keinerlei "Multi-Threading" erlauben.

4) Netty ist erfahrungsgemäß einfach ein kleines Selbstexperiment. Auch wenn man alles schön durchplanen und berechnen kann, braucht es manchmal etwas Zeit bis alles an der richtigen Stelle ineinandergreift.

5) Mein letzter Tipp ist, dass du dir einfach mal das gesamte Tutorial von Janhektor ansiehst und gut Nerven bewahrst, wenn es mal nur Fehler regnet.
Soweit die Theorie.

MfG
monst12
Benutzeravatar
monst12
 
Beiträge: 239
Registriert: Sa 19. Apr 2014, 22:14


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 Gäste

cron