Problème de GUI / Commandes / Packets
-
Bonsoir,
Je ne comprend pas, j’ai un soucis que je n’arrive pas à règler, j’ai créer un gui avec un bouton, lorsque l’on clique dessus,
cela ferme le Gui et execute une commande dans la console avec un packet, alors cela marche avec le debugger (serveur + client)
mais sur mon serveur cela ne fonctionne pas et je ne comprend pas pourquoiVoici mes classe:
Classe GuiJobs :
package fr.askip.testing.gui.f4menu.jobs; import org.lwjgl.opengl.GL11; import com.mojang.realmsclient.gui.ChatFormatting; import fr.askip.testing.Main; import fr.askip.testing.gui.CustomButton; import fr.askip.testing.gui.f4menu.F4Menu; import fr.askip.testing.gui.f4menu.achat.GuiAchats; import fr.askip.testing.gui.f4menu.commands.GuiCommands; import fr.askip.testing.gui.f4menu.regles.GuiRegles; import fr.askip.testing.packets.PacketCmdServer; import fr.askip.testing.utils.Refs; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ResourceLocation; public class GuiJobs extends GuiScreen { int guiWidth = 250; int guiHeight = 250; private ResourceLocation ressource = new ResourceLocation(Refs.MODID + ":textures/gui/menuf4.png"); private int citoyen; @Override public void initGui() { this.citoyen = 1; this.buttonList.add(new CustomButton(this.citoyen, this.width / 2 - 19, this.height / 2 - 50, 40, 20, ChatFormatting.GREEN + "- Citoyen")); } @Override protected void actionPerformed(GuiButton button) { if(button.id == this.citoyen) { Minecraft.getMinecraft().displayGuiScreen(null); Main.network.sendToServer(new PacketCmdServer(0)); } super.actionPerformed(button); } @Override public void drawScreen(int x, int y, float ticks) { int guiX = (width - guiWidth) / 2; int guiY = (height - guiHeight) / 2; GL11.glColor4f(1, 1, 1, 1); drawDefaultBackground(); mc.renderEngine.bindTexture(ressource); drawTexturedModalRect(guiX, guiY, 0, 0, guiWidth, guiHeight); super.drawScreen(x, y, ticks); } }
Classe Main :
package fr.askip.testing; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; import fr.askip.testing.init.CombinedBlocks; import fr.askip.testing.listeners.Events; import fr.askip.testing.packets.PacketCmdServer; import fr.askip.testing.proxy.CommonProxy; import fr.askip.testing.utils.Refs; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraftforge.common.MinecraftForge; @Mod(modid = Refs.MODID, name = Refs.MOD_NAME, version = Refs.VERSION) public class Main { @SidedProxy(clientSide = Refs.CLIENT_PROXY, serverSide = Refs.SERVER_PROXY) public static CommonProxy proxy; public static SimpleNetworkWrapper network; public static CreativeTabs CombinedTabs = new CreativeTabs("Combined RP") { @Override public Item getTabIconItem() { return Items.apple; } }; @Mod.EventHandler public void onServerStarting(FMLServerStartingEvent e) { } @Mod.EventHandler public void preInit(FMLPreInitializationEvent e) { proxy.preInit(e.getSuggestedConfigurationFile()); CombinedBlocks.init(); CombinedBlocks.register(); network = NetworkRegistry.INSTANCE.newSimpleChannel("combinedrp:"); network.registerMessage(PacketCmdServer.Handler.class, PacketCmdServer.class, 0, Side.SERVER); } @Mod.EventHandler public void init(FMLInitializationEvent e) { proxy.init(); MinecraftForge.EVENT_BUS.register(new Events()); } @Mod.EventHandler public void postInit(FMLPostInitializationEvent e) { } }
Classe PacketCmdServer:
package fr.askip.testing.packets; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; import net.minecraft.server.MinecraftServer; public class PacketCmdServer implements IMessage { private Integer integer; public PacketCmdServer() { } public PacketCmdServer(Integer i) { this.integer = i; } @Override public void fromBytes(ByteBuf buf) { this.integer = Integer.valueOf(buf.readInt()); } @Override public void toBytes(ByteBuf buf) { buf.writeInt(this.integer.intValue()); } public static class Handler implements IMessageHandler <packetcmdserver, imessage="">{ @Override public IMessage onMessage(PacketCmdServer message, MessageContext ctx) { switch (message.integer.intValue()) { //GUI JOBS 1 case 0: ctx.getServerHandler().playerEntity.mcServer.getCommandManager().executeCommand(ctx.getServerHandler().playerEntity.mcServer, "citoyen_job " + ctx.getServerHandler().playerEntity.getDisplayName()); ctx.getServerHandler().playerEntity.mcServer.getCommandManager().executeCommand(ctx.getServerHandler().playerEntity.mcServer, "say Salut " + ctx.getServerHandler().playerEntity.getDisplayName()); break; } return null; } } }
Cordialement AzTick_</packetcmdserver,>
-
Salut,
J’imagine que ton serveur en prod est sous Thermos ou Caudron ?Si oui, le système d’exécution de commande n’est pas le même et il n’y a rien qui gère la compatibilité entre le système de base de mc et celui de bukkit.
Plutôt qu’utiliser un paquet et tenter d’exécuter la commande, envoies un simple message de chat directement depuis le client (avec la même fonction que celle utilisé dans GuiChat).