Ir para conteúdo
  • 0

[Resolvido] Erro com a classe SignGUI


Guest VitorEmanoel

Pergunta

Guest VitorEmanoel

Estou tentando usar a classe SignGUI porem estou tendo problema com ela, esta dando um erro e nao sei resolver, se alguem puder ajudar agradeço.

 

Erro:

[17:24:08 WARN]: [ProtocolLib] [PacketFilterManager] [ProjectAPI] Unsupported client packet ID in current Minecraft version: UNREGISTERED[LEGACY, CLIENT, -1, legacy: 130, classNames: []]
[17:24:08 ERROR]: Could not pass event InventoryClickEvent to ProjectEconomy v1.0
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1850) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:33) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:10) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_101]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_101]
        at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:733) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:672) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:571) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
Caused by: com.comphenix.protocol.reflect.FieldAccessException: Field index out of bounds. (Index: 1, Size: 1)
        at com.comphenix.protocol.reflect.StructureModifier.writeInternal(StructureModifier.java:352) ~[?:?]
        at com.comphenix.protocol.reflect.StructureModifier.write(StructureModifier.java:328) ~[?:?]
        at ProjectAPI.SignGUI.open(SignGUI.java:73) ~[?:?]
        at ProjectEconomyListener.BankMenuMananger.withdrawGUI(BankMenuMananger.java:44) ~[?:?]
        at ProjectEconomyListener.BankMenuMananger.e(BankMenuMananger.java:27) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        ... 15 more

O meu codigo: 

public static void withdrawGUI(Player p){
		SignGUI sg = new SignGUI(Main.getMain());
		sg.open(p, new String[] {"","---------------", "===============", "Digite ali /\\"}, new SignGUI.SignGUIListener() {
			
			public void onSignDone(Player p, String[] lines) {
				if(lines[0] != null){
					try{
						double withdraw = Double.valueOf(lines[0]);
						ProjectEconomyAPI.withdrawBank(p, withdraw);
					}catch(NumberFormatException e){
						p.sendMessage("§cVoce so pode usar numeros na primeira linha");
					}
				}else{
					p.sendMessage("§cA primeira linha estava vazia");
				}
			}
		});
		
	}

O codigo do SignGUI:

package ProjectAPI;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.Vector;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.ConnectionSide;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;

public class SignGUI {

    protected ProtocolManager protocolManager;
    protected PacketAdapter packetListener;
    protected Map<String, SignGUIListener> listeners;
    protected Map<String, Vector> signLocations;
    
    public SignGUI(Plugin plugin) {
        protocolManager = ProtocolLibrary.getProtocolManager();        
        packetListener = new PacketListener(plugin);
        protocolManager.addPacketListener(packetListener);
        listeners = new ConcurrentHashMap<String, SignGUIListener>();
        signLocations = new ConcurrentHashMap<String, Vector>();
    }
    
    public void open(Player player, SignGUIListener response) {
        open(player, (Location)null, response);
    }
    
    @SuppressWarnings("deprecation")
	public void open(Player player, Location signLocation, SignGUIListener response) {
        int x = 0, y = 0, z = 0;
        if (signLocation != null) {
            x = signLocation.getBlockX();
            y = signLocation.getBlockY();
            z = signLocation.getBlockZ();
        }
        
        PacketContainer packet = protocolManager.createPacket(133);
        packet.getIntegers().write(0, 0).write(1, x).write(2, y).write(3, z);
        
        try {
            protocolManager.sendServerPacket(player, packet);
            signLocations.put(player.getName(), new Vector(x, y, z));
            listeners.put(player.getName(), response);
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    
    @SuppressWarnings("deprecation")
	public void open(Player player, String[] defaultText, SignGUIListener response) {
        List<PacketContainer> packets = new ArrayList<PacketContainer>();
        
        int x = 0, y = 0, z = 0;
        if (defaultText != null) {
            x = player.getLocation().getBlockX();
            z = player.getLocation().getBlockZ();
            
            PacketContainer packet53 = protocolManager.createPacket(53);
            packet53.getIntegers().write(0, x).write(1, y).write(2, z).write(3, 63).write(4, 0); //Linha 73
            packets.add(packet53);
            
            PacketContainer packet130 = protocolManager.createPacket(130);
            packet130.getIntegers().write(0, x).write(1, y).write(2, z);
            packet130.getStringArrays().write(0, defaultText);
            packets.add(packet130);
        }
        
        PacketContainer packet133 = protocolManager.createPacket(133);
        packet133.getIntegers().write(0, 0).write(1, x).write(2, y).write(3, z);
        packets.add(packet133);
        
        if (defaultText != null) {
            PacketContainer packet53 = protocolManager.createPacket(53);
            packet53.getIntegers().write(0, x).write(1, y).write(2, z).write(3, 7).write(4, 0);
            packets.add(packet53);
        }
        
        try {
            for (PacketContainer packet : packets) {
                protocolManager.sendServerPacket(player, packet);
            }
            signLocations.put(player.getName(), new Vector(x, y, z));
            listeners.put(player.getName(), response);
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    
    public void destroy() {
        protocolManager.removePacketListener(packetListener);
        listeners.clear();
        signLocations.clear();
    }
    
    public interface SignGUIListener {
        public void onSignDone(Player player, String[] lines);
    }
    
    class PacketListener extends PacketAdapter {
        
        Plugin plugin;
        
        @SuppressWarnings("deprecation")
		public PacketListener(Plugin plugin) {
            super(plugin, ConnectionSide.CLIENT_SIDE, ListenerPriority.NORMAL, 0x82);
            this.plugin = plugin;
        }
        
        @Override
        public void onPacketReceiving(PacketEvent event) {
            final Player player = event.getPlayer();
            Vector v = signLocations.remove(player.getName());
            if (v == null) return;
            List<Integer> list = event.getPacket().getIntegers().getValues();
            if (list.get(0) != v.getBlockX()) return;
            if (list.get(1) != v.getBlockY()) return;
            if (list.get(2) != v.getBlockZ()) return;
            
            final String[] lines = event.getPacket().getStringArrays().getValues().get(0);
            final SignGUIListener response = listeners.remove(event.getPlayer().getName());
            if (response != null) {
                event.setCancelled(true);
                Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                    public void run() {
                        response.onSignDone(player, lines);
                    }
                });
            }
        }
        
    }
    
}

 

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

Posta essas 3 linhas

at ProjectAPI.SignGUI.open(SignGUI.java:73) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.withdrawGUI(BankMenuMananger.java:44) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.e(BankMenuMananger.java:27) ~[?:?]

...

 

 

 

 

Muito provavelmente esse código é pra outra versão, pode ser que o protocolo tenha mudado.

Link para o comentário
Compartilhar em outros sites

Posta essas 3 linhas

at ProjectAPI.SignGUI.open(SignGUI.java:73) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.withdrawGUI(BankMenuMananger.java:44) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.e(BankMenuMananger.java:27) ~[?:?]

...

 

 

 

 

Muito provavelmente esse código é pra outra versão, pode ser que o protocolo tenha mudado.

Pelo erro de packet, talvez o plugin não suporte a versão do cliente ou o protocol support não suporta o packet.

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Posta essas 3 linhas

at ProjectAPI.SignGUI.open(SignGUI.java:73) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.withdrawGUI(BankMenuMananger.java:44) ~[?:?]
at ProjectEconomyListener.BankMenuMananger.e(BankMenuMananger.java:27) ~[?:?]

...

 

 

 

 

Muito provavelmente esse código é pra outra versão, pode ser que o protocolo tenha mudado.

 packet53.getIntegers().write(0, x).write(1, y).write(2, z).write(3, 63).write(4, 0); //Linha 73
sg.open(p, new String[] {"","---------------", "===============", "Digite ali /\\"}, new SignGUI.SignGUIListener() {//Linha 44

Aqui eo onde eu chamo o metodo withdrawGUI

withdrawGUI(p);

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Coloque um espaço na primeira linha da placa no sg.open:

 

sg.open(p, new String[] {" ","---------------", "===============", "Digite ali /\\"}, new SignGUI.SignGUIListener() {//Linha 44

Continua com o mesmo erro

Link para o comentário
Compartilhar em outros sites

Continua com o mesmo erro

Cara ainda não sei o que é. Se tu manjar um pouco de inglês pede ajuda no Spigot Forums, eu não sei mexer com packet direito ainda. Mas é como o leonardo disse é pq mudou o protocolo e pode ser de outra versão. Qual a versão dos plugins que tu ta usando e pra qual versão e a versão do teu servidor?

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Cara ainda não sei o que é. Se tu manjar um pouco de inglês pede ajuda no Spigot Forums, eu não sei mexer com packet direito ainda. Mas é como o leonardo disse é pq mudou o protocolo e pode ser de outra versão. Qual a versão dos plugins que tu ta usando e pra qual versão e a versão do teu servidor?

Provavelmente e isso mesmo, por que o tópico do SignGUI e de 2013. O Protocol Lib da ta versão na ultima versão, e meu servidor ta na 1.10.2

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Então com certeza é isso. O que essa lib faz? Talvez tu possa achar alternativas.

Ela cria um menu gui se que usando a interface da placa, procurei em todo lugar so achei essa. Estava querendo muito essa lib para deixar meu plugin mais prático.

Link para o comentário
Compartilhar em outros sites

Ela cria um menu gui se que usando a interface da placa, procurei em todo lugar so achei essa. Estava querendo muito essa lib para deixar meu plugin mais prático.

Veja estas alternativas: https://www.spigotmc.org/threads/sign-gui-for-user-input.104394/https://www.spigotmc.org/resources/signgui.17781/

 

Ou tente pegar a source do SignGUI e adaptar ele pra 1.10

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Veja estas alternativas: https://www.spigotmc.org/threads/sign-gui-for-user-input.104394/https://www.spigotmc.org/resources/signgui.17781/

 

Ou tente pegar a source do SignGUI e adaptar ele pra 1.10

Tentei usar essa segunda API que você mandou.

Porem deu erro.

[21:38:32 ERROR]: Could not pass event InventoryClickEvent to ProjectEconomy v1.0
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1850) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:33) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:10) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_101]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_101]
        at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:733) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:672) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:571) [spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
Caused by: java.lang.NoSuchFieldError: OPEN_SIGN_ENTITY
        at com.antarescraft.kloudy.signguilib.protocol.WrapperPlayServerOpenSignEntity.<clinit>(WrapperPlayServerOpenSignEntity.java:27) ~[?:?]
        at com.antarescraft.kloudy.signguilib.SignGUI.openSignEditor(SignGUI.java:68) ~[?:?]
        at ProjectEconomyListener.BankMenuMananger.withdrawGUI(BankMenuMananger.java:46) ~[?:?]
        at ProjectEconomyListener.BankMenuMananger.e(BankMenuMananger.java:29) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot_server.jar:git-Spigot-3ccadba-fb568fd]
        ... 15 more
>

Codigo:

public static void withdrawGUI(Player p){
		String[] text = new String[] {"Coloque o valor","para sacar", "===============", ""};
		SignGUI.openSignEditor(p, text);
		
	}
	
	public static void depositGUI(Player p){
		String[] text = new String[] {"Coloque o valor","para depositar", "===============", ""};
		SignGUI.openSignEditor(p, text);

	}

	@EventHandler
	public void e(SignGUIUpdateEvent e){
		Player p = e.getPlayer();
		String[] lines = e.getSignText();
		if(lines[0] == "Coloque o valor" && lines[1] == "para sacar" && lines[2] == "==============="){
			if(lines[3] != null){
				try{
					double withdraw = Double.valueOf(lines[0]);
					ProjectEconomyAPI.withdrawBank(p, withdraw);
				}catch(NumberFormatException e2){
					p.sendMessage("§cVoce so pode usar numeros na ultima linha");
				}
			}else{
				p.sendMessage("§cA ultima linha estava vazia");
			}
		}else if(lines[0] == "Coloque o valor" && lines[1] == "para depositar" && lines[2] == "==============="){
			if(lines[3] != null){
				try{
					double withdraw = Double.valueOf(lines[0]);
					ProjectEconomyAPI.depositBank(p, withdraw);
				}catch(NumberFormatException e2){
					p.sendMessage("§cVoce so pode usar numeros na ultima linha");
				}
			}else{
				p.sendMessage("§cA ultima linha estava vazia");
			}
		}else{
			p.sendMessage("§cValores invalidos, tente novamente sem apagar as linhas iniciais");
			ProjectEconomyAPI.openBankMenu(p);
		}
	}
Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Olha, eu posso te ajudar.. Me fala a versão que você ta usando que eu edito o código corrigindo os fields pra você assim que eu conseguir.

To na 1.10.2

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

UP

Alguem poderia me ajudar em, fiz uma boa parte da api do zero. Estou tentando agora pega o texto que o player digita. So falta isto me ajudem por favor.

Link para o comentário
Compartilhar em outros sites

UP

Alguem poderia me ajudar em, fiz uma boa parte da api do zero. Estou tentando agora pega o texto que o player digita. So falta isto me ajudem por favor.

Me manda o que você fez por MP que eu dou uma editada mais tarde, acabei ficando sem tempo pra testar isso...

Link para o comentário
Compartilhar em outros sites

Guest VitorEmanoel

Me manda o que você fez por MP que eu dou uma editada mais tarde, acabei ficando sem tempo pra testar isso...

Eu conseguir já, depois de tanto encher o saco do jetta ele mandou para min, em-breve irei postar uma API aqui para o pessoal usar.

 

//Não postei ainda por to em semanas de prova, talvez semana que vem eu posto aqui no forum.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...