Salut
J’ai remplacé le GuiSleep par un gui qui y est extends, et Override deux fonctions : actionPerformed et keyTyped. J’ai ensuite créé un packet qui est censé être envoyé au serveur quand le joueur fais échap et appuie sur le bouton leave Bed. Le packet ajoute au joueur la potion avec un temps total de 0 tick. Comme vous pouvez le voir, j’ai dit que le packet est censé être envoyé. Hélas, il ne s’envoie pas, ça met plutôt des erreurs dans les logss
Déjà, voilà mes classes :
Le gui
package ThisisChristmas.Client;
import java.io.IOException;
import ThisisChristmas.ChristmasEffectMessage;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiSleepMP;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.network.play.client.CPacketEntityAction;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class GuiSleepMPExt extends GuiSleepMP{
@Override
protected void actionPerformed(GuiButton button) throws IOException
{
if (button.id == 1)
{
ThisisChristmas.ThisisChristmas.network.sendToServer(new ChristmasEffectMessage("effect"));
System.out.println("send");
this.wakeFromSleep();
}
else
{
super.actionPerformed(button);
}
}
@Override
protected void keyTyped(char typedChar, int keyCode) throws IOException
{
if (keyCode == 1)
{
ThisisChristmas.ThisisChristmas.network.sendToServer(new ChristmasEffectMessage("effect"));
System.out.println("send");
this.wakeFromSleep();
}
else if (keyCode != 28 && keyCode != 156)
{
super.keyTyped(typedChar, keyCode);
}
else
{
String s = this.inputField.getText().trim();
if (!s.isEmpty())
{
this.sendChatMessage(s); // Forge: fix vanilla not adding messages to the sent list while sleeping
}
this.inputField.setText("");
this.mc.ingameGUI.getChatGUI().resetScroll();
}
}
private void wakeFromSleep()
{
NetHandlerPlayClient nethandlerplayclient = this.mc.thePlayer.connection;
nethandlerplayclient.sendPacket(new CPacketEntityAction(this.mc.thePlayer, CPacketEntityAction.Action.STOP_SLEEPING));
}
}
Dans la classe principale :
//Avant le pré init
public static SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
// dans le init
network.registerMessage(ChristmasEffectMessageHandler.class, ChristmasEffectMessage.class, 0, Side.SERVER);
ChristmasEffectMessage
package ThisisChristmas;
import io.netty.buffer.ByteBuf;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class ChristmasEffectMessage implements IMessage{
protected String msg;
public ChristmasEffectMessage()
{
}
public ChristmasEffectMessage(String message)
{
message = msg;
}
@Override
public void fromBytes(ByteBuf buf)
{
msg = ByteBufUtils.readUTF8String(buf);
}
@Override
public void toBytes(ByteBuf buf)
{
ByteBufUtils.writeUTF8String(buf, msg);
}
}
ChristmasEffectMessageHander
package ThisisChristmas;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.Packet;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
public class ChristmasEffectMessageHandler implements IMessageHandler<christmaseffectmessage, imessage="">{
@Override
public IMessage onMessage(ChristmasEffectMessage message, MessageContext ctx)
{
if(message.msg.equals("effect"))
{
EntityPlayerMP playerName = ctx.getServerHandler().playerEntity;
ThisisChristmas.proxy.MagicOfChristmasEffect(playerName, 0);
}
return null;
}
}
Et voilà l’erreurs : Partie 1
[17:22:02] [Client thread/ERROR] [FML]: FMLIndexedMessageCodec exception caught
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:658) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:716) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:706) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:741) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:895) ~[DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:240) ~[AbstractChannel.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:270) [SimpleNetworkWrapper.class:?]
at ThisisChristmas.Client.GuiSleepMPExt.actionPerformed(GuiSleepMPExt.java:19) [GuiSleepMPExt.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:494) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiChat.mouseClicked(GuiChat.java:181) [GuiChat.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:609) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiChat.handleMouseInput(GuiChat.java:141) [GuiChat.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:575) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1796) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1119) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:404) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
at GradleStart.main(GradleStart.java:26) [start/:?]
Caused by: java.lang.NullPointerException
at net.minecraftforge.fml.common.network.ByteBufUtils.writeUTF8String(ByteBufUtils.java:132) ~[ByteBufUtils.class:?]
at ThisisChristmas.ChristmasEffectMessage.toBytes(ChristmasEffectMessage.java:30) ~[ChristmasEffectMessage.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:54) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:4.0.23.Final]
… 30 more
Partie 2```
nov. 30, 2016 5:22:02 PM io.netty.channel.embedded.EmbeddedChannel recordException
AVERTISSEMENT: More than one exception was raised. Will report only the first one and log others.
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107)
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:658)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:716)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:706)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:741)
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:895)
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:240)
at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:270)
at ThisisChristmas.Client.GuiSleepMPExt.actionPerformed(GuiSleepMPExt.java:19)
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:494)
at net.minecraft.client.gui.GuiChat.mouseClicked(GuiChat.java:181)
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:609)
at net.minecraft.client.gui.GuiChat.handleMouseInput(GuiChat.java:141)
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:575)
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1796)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1119)
at net.minecraft.client.Minecraft.run(Minecraft.java:404)
at net.minecraft.client.main.Main.main(Main.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
at GradleStart.main(GradleStart.java:26)
Caused by: java.lang.NullPointerException
at net.minecraftforge.fml.common.network.ByteBufUtils.writeUTF8String(ByteBufUtils.java:132)
at ThisisChristmas.ChristmasEffectMessage.toBytes(ChristmasEffectMessage.java:30)
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11)
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7)
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:54)
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67)
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89)
… 30 more
[17:22:02] [Client thread/INFO] [STDOUT]: [ThisisChristmas.Client.GuiSleepMPExt:actionPerformed:20]: send
J'ai découpé l'erreur en deux parties. Elle s'affichent en même temps, mais la première partie s'affiche normalement (en blanc) mais la deuxième partie s'affiche en rouge (ça me l'a encore jamais fait, c'est que ça doit être très grave comme erreur :[ )
L'erreur me referre à l'envoie du packet au serveur (donc à ThisisChristmas.ThisisChristmas.network.sendToServer(new ChristmasEffectMessage("effect"));)
Pourquoi ça me fait cet erreur ? Est-ce que la méthode que j'ai fait est bonne ? (Autrement dit, est-ce que ça marchera une fois l'erreur résolu ?)
PS : j'ai aussi découvert un nouveau problème : quand je suis dans le lit et que je le quitte manuellement (échap ou bouton), ça me lève bien mais il fait toujours nuit, le temps ne change pas. Et là, je comprend pas pourquoi</christmaseffectmessage,>