Bug Title 1.7.10
-
en gros
quand je change le entityplayer par
EntityPlayerMP p = getPlayer(sender, command[0]);sa me souligne le get player
sa me mais The method getPlayer(ICommandSender, String) is undefined for the type CommandSendMessage -
Normale. La méthode getPlayer provient de la classe CommandBase et non de l’interface ICommand.
-
dans le la class icommand appart le isUsernameIndex et addTabCompletionOptions
-
@‘impuuu’:
dans le la class icommand appart le isUsernameIndex et addTabCompletionOptions
Ta commande doit être extends CommandBase
-
oui mais quand je fait la command sa fait sa alor que le pseudo est bon
sa me met cette erreur
Couldn’t process command: ‘title player player 5 Player894’
java.lang.NullPointerException
at fr.impuuu.havenrp.packets.PacketHelper.sendTo(PacketHelper.java:140) ~[PacketHelper.class:?]
at fr.impuuu.havenrp.commands.CommandSendMessage.processCommand(CommandSendMessage.java:70) ~[CommandSendMessage.class:?]
at net.minecraft.command.CommandHandler.executeCommand(CommandHandler.java:96) [CommandHandler.class:?]
at net.minecraft.network.NetHandlerPlayServer.handleSlashCommand(NetHandlerPlayServer.java:788) [NetHandlerPlayServer.class:?]
at net.minecraft.network.NetHandlerPlayServer.processChatMessage(NetHandlerPlayServer.java:764) [NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C01PacketChatMessage.processPacket(C01PacketChatMessage.java:47) [C01PacketChatMessage.class:?]
at net.minecraft.network.play.client.C01PacketChatMessage.processPacket(C01PacketChatMessage.java:68) [C01PacketChatMessage.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
[14:28:24] [Client thread/INFO]: [CHAT] An unknown error occurred while attempting to perform this command -
Envoi la classe du PacketHelper
-
package fr.impuuu.havenrp.packets; import cpw.mods.fml.common.network.FMLEmbeddedChannel; import cpw.mods.fml.common.network.FMLOutboundHandler; import cpw.mods.fml.common.network.FMLOutboundHandler.OutboundTarget; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.internal.FMLProxyPacket; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler.Sharable; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageCodec; import io.netty.util.Attribute; import java.util.Collections; import java.util.Comparator; import java.util.EnumMap; import java.util.LinkedList; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.INetHandler; import net.minecraft.network.NetHandlerPlayServer; @ChannelHandler.Sharable public class PacketHelper extends MessageToMessageCodec <fmlproxypacket, abstractpackethelper="">{ private EnumMap <side, fmlembeddedchannel="">channels; private LinkedList<class<? extends="" abstractpackethelper="">> packets = new LinkedList(); private boolean isPostInitialised = false; public boolean registerPacket(Class clazz) { if (this.packets.size() > 256) { return false; } if (this.packets.contains(clazz)) { return false; } if (this.isPostInitialised) { return false; } this.packets.add(clazz); return true; } protected void encode(ChannelHandlerContext ctx, AbstractPacketHelper msg, List <object>out) throws Exception { ByteBuf buffer = Unpooled.buffer(); Class clazz = msg.getClass(); if (!this.packets.contains(msg.getClass())) { throw new NullPointerException("No Packet Registered for: " + msg.getClass().getCanonicalName()); } byte discriminator = (byte)this.packets.indexOf(clazz); buffer.writeByte(discriminator); msg.encodeInto(ctx, buffer); FMLProxyPacket proxyPacket = new FMLProxyPacket(buffer.copy(), (String)ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get()); out.add(proxyPacket); } protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List <object>out) throws Exception { ByteBuf payload = msg.payload(); byte discriminator = payload.readByte(); Class clazz = (Class)this.packets.get(discriminator); if (clazz == null) { throw new NullPointerException("No packet registered for discriminator: " + discriminator); } AbstractPacketHelper pkt = (AbstractPacketHelper)clazz.newInstance(); pkt.decodeInto(ctx, payload.slice()); switch (cpw.mods.fml.common.FMLCommonHandler.instance().getEffectiveSide()) { case CLIENT: EntityPlayer player = getClientPlayer(); pkt.handleClientSide(player); break; case SERVER: INetHandler netHandler = (INetHandler)ctx.channel().attr(NetworkRegistry.NET_HANDLER).get(); EntityPlayer player1 = ((NetHandlerPlayServer)netHandler).playerEntity; pkt.handleServerSide(player1); } } public void initalise() { this.channels = NetworkRegistry.INSTANCE.newChannel("HavenRP", new ChannelHandler[] { this }); registerPackets(); } public void registerPackets() { registerPacket(PacketMessage.class); } public void postInitialise() { if (this.isPostInitialised) { return; } this.isPostInitialised = true; Collections.sort(this.packets, new Comparator() { public int compare(Class clazz1, Class clazz2) { int com = String.CASE_INSENSITIVE_ORDER.compare(clazz1.getCanonicalName(), clazz2.getCanonicalName()); if (com == 0) { com = clazz1.getCanonicalName().compareTo(clazz2.getCanonicalName()); } return com; } public int compare(Object o1, Object o2) { return 0; } }); } @SideOnly(Side.CLIENT) private EntityPlayer getClientPlayer() { return Minecraft.getMinecraft().thePlayer; } public void sendToAll(AbstractPacketHelper message) { ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL); ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message); } public void sendTo(AbstractPacketHelper message, EntityPlayerMP player) { ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER); ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player); ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message); } public void sendToServer(AbstractPacketHelper message) { ((FMLEmbeddedChannel)this.channels.get(Side.CLIENT)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER); ((FMLEmbeddedChannel)this.channels.get(Side.CLIENT)).writeAndFlush(message); } } ```</object></object></class<?></side,></fmlproxypacket,> -
J’ai déjà dit que cette façon de faire des paquets ne doit plus être utilisé …
-
ok je remplace par quoi il a tuto sur le forum ?
-
@‘robin4002’:
Couldn’t process command: ‘title test test 5 Player33’
Regardes le chat, ton pseudo c’est Player481. Donc normal que Player33 est null.
Si tu avais fait un peu mieux la commande tu aura renvoyé un message “le joueur n’existe pas” si player est null.Tu pourrai aussi compléter la fonction addTabCompletionOptions et la fonction isUsernameIndex.
Et en passant, tu utilises une vieille implémentation de paquet qui est mauvaise car elle cause des fuites de mémoire.
Le tutoriel de blackout sur le forum explique comme bien faire.