Résolu [SANS SUITE] Crash Serveur
-
Refresh le poste et regarde mon message précédent. Tu n’as pas besoin de le mettre uniquement côté serveur le setHealth. Peu importe en fait, de toute manière il sera automatiquement synchronisé entre les DataWatchers et les NBTTag’s.
EDIT = Ta classe PacketGui ne sert à rien du tout car tu envoies ce packet au serveur avec comme instruction d’ouvrir ton gui mort. A partir de là 2 choses sont illogiques. La première est qu’on n’envoie pas un packet au serveur pour effectuer une action au client, sa n’a aucun sens. Mais pire, la seconde remarque est que tu dis dans la fonction onGuiClosed d’envoyer ce packet dans le but de….rouvrir une seconde fois le gui Mort ?! Là je ne te suis plus u_U
-
Au dessus de la fonction onMessage du paquet ajoutes un @SideOnly.
Et tu ne devrais pas l’utiliser depuis le gui comme c’est un paquet qui va du client au serveur.
@Plaigon, oui en effet, on pourrait s’en passer.
-
@‘Plaigon’:
Refresh le poste et regarde mon message précédent. Tu n’as pas besoin de le mettre uniquement côté serveur le setHealth. Peu importe en fait, de toute manière il sera automatiquement synchronisé entre les DataWatchers et les NBTTag’s.
EDIT = Ta classe PacketGui ne sert à rien du tout car tu envoies ce packet au serveur avec comme instruction d’ouvrir ton gui mort. A partir de là 2 choses sont illogiques. La première est qu’on n’envoie pas un packet au serveur pour effectuer une action au client, sa n’a aucun sens. Mais pire, la seconde remarque est que tu dis dans la fonction onGuiClosed d’envoyer ce packet dans le but de….rouvrir une seconde fois le gui Mort ?! Là je ne te suis plus u_U
Pour la fonction onGuiClosed je cherche a faire en sorte de ne pas quitter le gui même avec la touche échap .
Edit:@Robin je n’utilise plus le packet x)
Euhhh je viens d’essayer, le event.entityLiving.worldObj.isRemote cause problème, mon gui ne s’ouvre plus
-
Donc l’event n’est pas appelé côté client.
Donc tu as bien besoin du paquet.Pour le onGuiClosed, il serait mieux de contourner l’action de la touche échap (suffit d’override la méthode keyPressed et ne pas mettre un super.keyPressed dedans).
-
Euhh la vous m’avez perdu un dis que j’ai pas besoin du packet un autre dis que si …
@Plaigon j’ai essayer sans le packet le soucis est que avec world.isRemote mon gui ne s’ouvre pas .
@Robin je comprends pas trop je dois enregistrer mon packet quel side ? l’envoyer au joueur / serveur ?? dans mon event est-ce que je dois mettre un world.isremote avant l’appel du packet ?Pour l’instant j’ai ça comme code:
ça marche pas sauf quand j’enlève le if(event.entityliving.worldObj…)
@SubscribeEvent public void onDeath(LivingDeathEvent event) { if(event.entityLiving instanceof EntityPlayer) { event.entityLiving.setHealth(1); if(event.entityLiving.worldObj.isRemote){ Main.network.sendToServer(new PacketGui()); Mort.settimer(10000); System.out.println("Mort"); } } }
network = NetworkRegistry.INSTANCE.newSimpleChannel("dd:"); network.registerMessage(PacketGui.Handler.class, PacketGui.class, 0, Side.CLIENT);
-
Actuellement est-ce que “Mort” s’affiche dans la console ?
Car si oui alors l’event est bien appelé côté client, donc non pas besoin de paquet.Et ton paquet tel que tu l’as fait doit aller du serveur vers le client.
-
@‘robin4002’:
Actuellement est-ce que “Mort” s’affiche dans la console ?
Car si oui alors l’event est bien appelé côté client, donc non pas besoin de paquet.Et ton paquet tel que tu l’as fait doit aller du serveur vers le client.
Non, “Mort” s’affiche pas dans la console.
Du coup j’ai ça:
Event:
@SubscribeEvent public void onDeath(LivingDeathEvent event) { if(event.entityLiving instanceof EntityPlayer) { event.entityLiving.setHealth(1); if(event.entityLiving.worldObj.isRemote){ Main.network.sendToServer(new PacketGui()); Mort.settimer(10000); System.out.println("Mort"); } } }
Packet:
public class PacketGui implements IMessage { public int i; public PacketGui(){ } public PacketGui(int i){ this.i = i; } @Override public void fromBytes(ByteBuf buf) { i = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { buf.writeInt(i); } public static class Handler implements IMessageHandler <packetgui, imessage="">{ @SideOnly(Side.CLIENT) public IMessage onMessage(PacketGui message, MessageContext ctx) { Minecraft.getMinecraft().displayGuiScreen(new Mort()); return message; } } }
Gui:
public class Mort extends GuiScreen { @SideOnly(Side.CLIENT) private ResourceLocation ressource = new ResourceLocation("dd:textures/gui/death.png"); private int medecin; private int spawn; public static int timer = 10000; int guiWidth = 256; int guiHeight = 256; public Mort() { } @Override public void initGui() { int guiX = (this.width - guiWidth) / 2; int guiY = (this.height - guiHeight) / 2; medecin = 0; spawn = 1; buttonList.clear(); buttonList.add(new GuiButton(medecin, guiX + 170, guiY + 226 + 5, 58, 20, "§aAppeller un médecin")); buttonList.add(new GuiButton(spawn, guiX + 80, guiY, 120, 20, "§5Respawn possible dans")); super.initGui(); } @Override protected void keyTyped(char typedChar, int keyCode) { } @Override protected void actionPerformed(GuiButton button) { switch(button.id) { case 0: Main.network.sendToServer(new PacketMedecin()); break; case 1: if(timer > 0) { EntityPlayer player1 = Minecraft.getMinecraft().thePlayer; ChatComponentText text1 = new ChatComponentText("§7Vous ne pouvez pas respawn ! il vous reste: " + timer / 100 + " §7secondes"); player1.addChatComponentMessage(text1); timer –; break; } else { EntityPlayer player1 = Minecraft.getMinecraft().thePlayer; player1.setDead(); Minecraft.getMinecraft().thePlayer.closeScreen(); break; } default: break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { String tilename = "§5 : " + timer-- / 100; mc.getTextureManager().bindTexture(ressource); this.drawTexturedModalRect(this.width / 2 - 135, this.height / 2 - 127, 0, 0, 256, 255); if(timer > 0) { this.fontRendererObj.drawString(tilename, this.width / 2 + 95 - this.fontRendererObj.getStringWidth(tilename) / 2, 1, 0); } super.drawScreen(mouseX, mouseY, partialTick); } public static void settimer(int newtimer) { timer = newtimer; } @Override public void onGuiClosed() { } }
Register packet:
network = NetworkRegistry.INSTANCE.newSimpleChannel("dd:"); network.registerMessage(PacketGui.Handler.class, PacketGui.class, 0, Side.SERVER);
Mon gui ne s’ouvre toujours pas.</packetgui,>
-
Normal tu as pas changé le code de ton évent, il faut que tu retires le if(…worldObj.isRemote), que tu envoies le packet au client qui vient de mourir, et que tu déplaces le Mort.setTimer dans la fonction onMessage de packet.
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
@‘AymericRed’:
Normal tu as pas changé le code de ton évent, il faut que tu retires le if(…worldObj.isRemote), que tu envoies le packet au client qui vient de mourir, et que tu déplaces le Mort.setTimer dans la fonction onMessage de packet.
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
Ok , Merci ça marche du coup mais la j’ai un autre crash report …
–-- Minecraft Crash Report ---- // There are four lights! Time: 22/07/16 12:17 Description: Exception in server tick loop cpw.mods.fml.common.LoaderException: java.lang.NoClassDefFoundError: net/minecraft/client/entity/EntityClientPlayerMP at cpw.mods.fml.common.LoadController.transition(LoadController.java:163) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:739) at cpw.mods.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:97) at cpw.mods.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:324) at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:287) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:631) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoClassDefFoundError: net/minecraft/client/entity/EntityClientPlayerMP at com.DeathDelay.net.Main.init(Main.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737) ... 5 more Caused by: java.lang.ClassNotFoundException: net.minecraft.client.entity.EntityClientPlayerMP at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 33 more Caused by: java.lang.NullPointerException A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.7.0_79, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 780690480 bytes (744 MB) / 1029701632 bytes (982 MB) up to 1029701632 bytes (982 MB) JVM Flags: 4 total; -XX:PermSize=128m -XX:MaxPermSize=256m -Xmx1G -Xms1G AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1448 5 mods loaded, 5 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored UCHI mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) UCHI FML{7.10.99.99} [Forge Mod Loader] (KCauldron-1.7.10-1448.121-server.jar) UCHI Forge{10.13.4.1448} [Minecraft Forge] (KCauldron-1.7.10-1448.121-server.jar) UCHI kimagine{0.1} [KImagine] (minecraft.jar) UCHE dd{1.0} [dd] (DeathDelay.jar) Profiler Position: N/A (disabled) Player Count: 0 / 20; [] Is Modded: Definitely; Server brand changed to 'kcauldron,cauldron,craftbukkit,mcpc,fml,forge' Type: Dedicated Server (map_server.txt)
-
Tu as un problème (de side) dans ta classe Main fonction init à la ligne 64, montres la.
Envoyé via mobile
-
@‘AymericRed’:
Tu as un problème (de side) dans ta classe Main fonction init à la ligne 64, montres la.
Envoyé via mobile
@EventHandler public void init(FMLInitializationEvent event) { proxy.init(event); MinecraftForge.EVENT_BUS.register(new Events()); // ligne 64 FMLCommonHandler.instance().bus().register(new Events()); }
-
Envoies ta classe Events entière.
-
@‘robin4002’:
Envoies ta classe Events entière.
Tien : (J’ai fais quelques modif au niveau de l’event ondeath mais je pense pas que se soit ça:
public class Events { public static boolean coma; @SubscribeEvent public void onDeath(LivingDeathEvent event) { booleantrue(); System.out.println(coma); if(event.entityLiving instanceof EntityPlayer && coma == true) { event.entityLiving.setHealth(1); Main.network.sendToServer(new PacketGui()); System.out.println("Mort"); System.out.println(coma); } } @SubscribeEvent public void onInventoryOpen(GuiOpenEvent event) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; if(event.gui instanceof GuiInventory && !player.capabilities.isCreativeMode) { event.setCanceled(true); } } public static void booleantrue() { coma = true; } public static void booleanfalse() { coma = false; } @SubscribeEvent public void pickupfalse(EntityItemPickupEvent event) { if(coma == true && event.entity instanceof EntityPlayer) { event.setCanceled(true); } } @SubscribeEvent public void onRespawn(PlayerEvent.PlayerRespawnEvent event) { if(coma == true) { booleanfalse(); System.out.println(coma); } } @SubscribeEvent public void onDecocoma(PlayerEvent.PlayerLoggedOutEvent event) { if(coma == true) { event.player.setDead(); } } }
-
Mets un @SideOnly(Side.CLIENT) au dessus de cette fonction : public void onInventoryOpen(GuiOpenEvent event)
Et dans onDeath Main.network.sendToServer(new PacketGui()); devrait être Main.network.sendTo(new PacketGui(), (EntityPlayer)event.entityLiving);
Comment veux-tu envoyer un paquet au serveur si tu es déjà sur le serveur ? -
@‘robin4002’:
Mets un @SideOnly(Side.CLIENT) au dessus de cette fonction : public void onInventoryOpen(GuiOpenEvent event)
Et dans onDeath Main.network.sendToServer(new PacketGui()); devrait être Main.network.sendTo(new PacketGui(), (EntityPlayer)event.entityLiving);
Comment veux-tu envoyer un paquet au serveur si tu es déjà sur le serveur ?Mon gui s’ouvre plus du coup:
@SubscribeEvent public void onDeath(LivingDeathEvent event) { booleantrue(); System.out.println(coma); if(event.entityLiving instanceof EntityPlayer && coma == true) { event.entityLiving.setHealth(1); Main.network.sendTo(new PacketGui(), (EntityPlayerMP)event.entityLiving); System.out.println("Mort"); System.out.println(coma); } }
-
1. ```java
EntityPlayer player = Minecraft.getMinecraft().thePlayer;2\. Pourquoi avoir des fonction booleantrue() et booleanfalse() alors que tu peux directement changer la valeur de coma sans ces fonctions ? 3\. ```java if(event.entityLiving instanceof EntityPlayer && coma == true) ``` pourquoi tester si come == true alors que tu as appelé booleantrue() juste avant ? 4\. ```java Main.network.sendToServer(new PacketGui()); ```, j'ai déjà dit qu'il faut > que tu envoies le packet au client qui vient de mourir , alors pourquoi tu l'envoies depuis le serveur vers le serveur ? EDIT : Robin a répondu avant, et tu as ensuite répondu, est-ce que "Mort" apparaît dans la console ?
-
@‘AymericRed’:
1. ```java
EntityPlayer player = Minecraft.getMinecraft().thePlayer;2\. Pourquoi avoir des fonction booleantrue() et booleanfalse() alors que tu peux directement changer la valeur de coma sans ces fonctions ? 3\. ```java if(event.entityLiving instanceof EntityPlayer && coma == true) ``` pourquoi tester si come == true alors que tu as appelé booleantrue() juste avant ? 4\. ```java Main.network.sendToServer(new PacketGui()); ```, j'ai déjà dit qu'il faut > que tu envoies le packet au client qui vient de mourir , alors pourquoi tu l'envoies depuis le serveur vers le serveur ? EDIT : Robin a répondu avant, et tu as ensuite répondu, est-ce que "Mort" apparaît dans la console ?
2 : Je préfères faire des fonctions je sais que je peux directement avec coma = true / false;
3 : bonne question.
4 : J’avais pas remarqué.
et pour le edit le “Mort” marcher avec un world.isremote maintenant sans le isremote oui il s’affiche dans la console. -
Donc le packet devrait être envoyé, tu l’as bien register comme devant arriver sur le client ? Mets un print dans la fonction onMessage.
-
@‘AymericRed’:
Donc le packet devrait être envoyé, tu l’as bien register comme devant arriver sur le client ? Mets un print dans la fonction onMessage.
J’ai mis un print dans la fonction onMessage en solo le print est bien envoyer et le gui s’ouvre bien mais en multi il s’ouvre pas.
-
Pas normal du tout.
Renvoies ton code. (gui, paquet, event)