Не переключаются режимы на стороне сервера

Версия Minecraft
1.7.10
У меня есть механизм, у которого есть три режима и в зависимости от выбранного режима должен выполняться свой рецепт(Чем-то похоже на Metal Former из IC2).
Всё хорошо, но режимы изменяются только на стороне клиента, на сервер изменения не идут.Отрисовка GUI идёт нормально.
В класс где проверяю возможность крафта режим подаётся из TileEntity.
Я предполагаю, что это можно решить только пакетами, если да - то что мне примерно надо сделать в коде пакета для отправки на сервер.Пример пакетов брал от сюда:
[1.7-1.13.2] Пакетная система. Даже не знаю, надо ли исходники прикреплять...
Java:
package ru.mrtenfan.metalfevermachinery.tileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import ru.mrtenfan.metalfevermachinery.ConfigFile;
import ru.mrtenfan.metalfevermachinery.blocks.MetalProcessor;
import ru.mrtenfan.metalfevermachinery.crafting.MetalProcessorRecipe;
import ru.mrtenfan.metalfevermachinery.crafting.MetalProcessorRecipe.MetalProcessing;

public class TileEntityMetalProcessor extends TileEntityBasicMachine implements ISidedInventory {
    
    private String localyzedName;
    private ItemStack[] slots;
    
    public static int rollingSpeed = ConfigFile.rollingSpeed;
    public int cookTime;
    private int mode;
    
    private static final int[] slots_in = new int[] {0};
    private static final int[] slots_out = new int[] {2};
    
    public TileEntityMetalProcessor() {
        slots = new ItemStack[3];
        mode = 0;
    }
    
    public void updateEntity() {
            boolean flag = this.cookTime > 0;
            boolean flag1 = false;
            MetalProcessing recipe = MetalProcessorRecipe.getRecipe(slots[0], getMode());
            int RFPerTick = 0;
            if(recipe != null)
                RFPerTick = (int)(recipe.getRFPerTick());

            if(this.hasEnergy() && this.canRoll(recipe)) {
                this.cookTime++;
                energyStorage.modifyEnergyStored(-RFPerTick);

                if(cookTime == rollingSpeed) {
                    cookTime = 0;
                    this.rollItem(recipe);
                    flag1 = true;
                }
            }else {
                cookTime = 0;
            }

            if (flag != this.hasEnergy()) {
                flag1 = true;
                MetalProcessor.updateBlockState(this.cookTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
            }

            if (flag1) {
                this.markDirty();
            }
    }
    
    public void setMode(int i) {
        if(i > 0 && i != mode)
            this.mode = i;
        if(this.mode > 2)
            this.mode = 0;
    }
    
    public int getMode() {
        return mode;
    }
    
    public String getModeName() {
        String name = null;
        switch(mode) {
        case 0:
            name = "Rolling";
            break;
        case 1:
            name = "Cutting";
            break;
        case 2:
            name = "Shaping";
            break;
        }
        return name;
    }
}
Java:
package ru.mrtenfan.metalfevermachinery.crafting;

import java.util.ArrayList;

import net.minecraft.item.ItemStack;
import ru.mrtenfan.MTFCore.utils.ItemUtils;
import ru.mrtenfan.MTFCore.utils.OreDictUtils;
import ru.mrtenfan.metalfeverbasis.ConfigFile;
import ru.mrtenfan.metalfeverbasis.init.MFItems;
import ru.mrtenfan.metalfevermachinery.init.MFMItems;
import ru.mrtenfan.metalfevermachinery.tileentity.TileEntityMetalProcessor;

public class MetalProcessorRecipe {
    private static final int standartRFPerTick = 12000;
    public static ArrayList<MetalProcessing> recipes = new ArrayList<MetalProcessing>();
    
    public static void addRollingRecipe(ItemStack input, boolean isod, ItemStack output, int RFForRecipe) {
        addMetalProcessing(0, input, isod, output, RFForRecipe);
    }
    
    public static void addCuttingRecipe(ItemStack input, boolean isod, ItemStack output, int RFForRecipe) {
        addMetalProcessing(1, input, isod, output, RFForRecipe);
    }
    
    public static void addShapingRecipe(ItemStack input, boolean isod, ItemStack output, int RFForRecipe) {
        addMetalProcessing(2, input, isod, output, RFForRecipe);
    }
    
    public static void addMetalProcessing(int mode, ItemStack input, boolean isod, ItemStack output, int RFForRecipe) {
        recipes.add(new MetalProcessing(mode, input, isod, output, RFForRecipe));
    }

    public static void addRecipe(MetalProcessing recipe) {
        recipes.add(recipe);
    }

    public static MetalProcessing getRecipe(ItemStack input, int i) {
        if(i < 0 && i > 2) return null;
        for(MetalProcessing r : recipes) {
            if(r.equals(input, i))
                return r;
        }
        return null;
    }
    
    public static class MetalProcessing {
        private final int mode;
        private final ItemStack input;
        private final ItemStack result;
        private final int RFPerTick;
        private final int RFUsed;
        private final boolean isoredict;
        
        public MetalProcessing(int mode, ItemStack input, boolean isod, ItemStack output, int RFForRecipe) {
            this.mode = mode;
            this.input = input;
            this.result = output;
            this.RFPerTick = (int) RFForRecipe / TileEntityMetalProcessor.rollingSpeed;
            this.RFUsed = RFForRecipe;
            this.isoredict = isod;
        }
        
        @Override
        public boolean equals(Object o) {
            if(!(o instanceof MetalProcessing)) return false;
            MetalProcessing r = (MetalProcessing)o;
            
            return r.mode == this.mode ? (ItemUtils.isItemEqual(r.input, this.input, r.isoredict && this.isoredict) ? (ItemUtils.isItemEqual(r.result, this.result, false) ? (r.RFPerTick == this.RFPerTick) : false) : false) : false;
        }
        
        public boolean equals(ItemStack is, int i) {
            return this.mode == i && ItemUtils.isItemEqual(this.input, is, this.isoredict);
        }
        
        public int getMode() {
            return mode;
        }

        public ItemStack getInput() {
            return input;
        }

        public ItemStack getResult() {
            return result;
        }
        
        public int getRFPerTick() {
            return RFPerTick;
        }
        
        public int getRFUsed() {
            return RFUsed;
        }
        
        public boolean isOreDict() {
            return isoredict;
        }
    }
}
Java:
    public static boolean isItemEqual(Object item1, Object item2, boolean isOreDict) {
        if(item1 == null || item2 == null) return false;
        
        ItemStack item1is = null, item2is = null;
        if(item1 instanceof Item)
            item1is = new ItemStack((Item)item1);
        else if(item1 instanceof Block)
            item1is = new ItemStack((Block)item1);
        else if(item1 instanceof ItemStack)
            item1is = (ItemStack)item1;
        else
            Debuging.warnOutput("obj is not an Item, Block or ItemStack.This is an error, please let the author know.");

        if(item2 instanceof Item)
            item2is = new ItemStack((Item)item2);
        else if(item2 instanceof Block)
            item2is = new ItemStack((Block)item2);
        else if(item2 instanceof ItemStack)
            item2is = (ItemStack)item2;
        else
            Debuging.warnOutput("obj is not an Item, Block or ItemStack.This is an error, please let the author know.");
        
        if(item1is.getItem() == item2is.getItem() && item1is.getItemDamage() == item2is.getItemDamage())
            return true;
        if(isOreDict)
            for(int intItem1 : OreDictionary.getOreIDs(item1is))
                for(int intItem2 : OreDictionary.getOreIDs(item2is))
                    if(intItem1 == intItem2)
                        return true;
        return false;
    }
P.S. Часть кода была убрана, чтобы было меньше кода.
Заранее спасибо!
 
Решение
При нажатии на кнопку(или что там у тебя) для смены режима работы отсылаешь пакет на сервер.
В пакете берешь player.openContainer, проверяешь что это контейнер твоей машинки, кастишь и достаешь оттуда тайл машинки. Ну и меняешь режим.

tox1cozZ

aka Agravaine
8,455
598
2,892
При нажатии на кнопку(или что там у тебя) для смены режима работы отсылаешь пакет на сервер.
В пакете берешь player.openContainer, проверяешь что это контейнер твоей машинки, кастишь и достаешь оттуда тайл машинки. Ну и меняешь режим.
 
Написал пакет, не уверен правильно-ли, т.к. в клиенте число так и не изменилось.
Выдало:
[17:27:18] [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:?]
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
at ru.mrtenfan.metalfevermachinery.gui.GUIMetalProcessor.actionPerformed(GUIMetalProcessor.java:100) [GUIMetalProcessor.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:252) [GuiScreen.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.mouseClicked(GuiContainer.java:350) [GuiContainer.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) [GuiScreen.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.handleMouseInput(GuiContainer.java) [GuiContainer.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_222]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_222]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_222]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
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 net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
at ru.mrtenfan.metalfevermachinery.packages.SimplePacket.toBytes(SimplePacket.java:41) ~[SimplePacket.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
... 26 more

Вот часть кода:
Java:
package ru.mrtenfan.metalfevermachinery.packages;

import net.minecraft.entity.player.EntityPlayer;
import ru.mrtenfan.metalfevermachinery.container.ContainerMetalProcessor;
import ru.mrtenfan.metalfevermachinery.tileentity.TileEntityMetalProcessor;

public class CPacketMetalHandler extends SimplePacket {

    @Override
    public void client(EntityPlayer player) {
        if(player.openContainer instanceof ContainerMetalProcessor) {
            ContainerMetalProcessor cmp = (ContainerMetalProcessor)player.openContainer;
            TileEntityMetalProcessor temp = cmp.getEntity();
            temp.setMode(temp.getMode() + 1);
        }
        super.client(player);
    }
}
Java:
    @Override
    protected void actionPerformed(GuiButton button) {
        if(button.id == 0) {
            entity.setMode(entity.getMode() + 1);
            NetworkHandler.NETWORK.sendToServer(new CPacketMetalHandler());
        }
        super.actionPerformed(button);
    }
 
Я очень туплю, конечно, но всё ошибка...
[18:07:19] [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:?]
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
at ru.mrtenfan.metalfevermachinery.gui.GUIMetalProcessor.actionPerformed(GUIMetalProcessor.java:100) [GUIMetalProcessor.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:252) [GuiScreen.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.mouseClicked(GuiContainer.java:350) [GuiContainer.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) [GuiScreen.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.handleMouseInput(GuiContainer.java) [GuiContainer.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_222]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_222]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_222]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
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 net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
at ru.mrtenfan.metalfevermachinery.packages.SimplePacket.toBytes(SimplePacket.java:41) ~[SimplePacket.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
... 26 more
Java:
package ru.mrtenfan.metalfevermachinery.packages;

import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.world.World;

public class NetworkHandler {
    private short id;

    /**
     *  ChannelName - название канала. Канал должен быть один на весь мод, создавать дополнительные каналы не нужно!
     */
    public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("MetalFeverMachinery");

    public NetworkHandler() {
        register(new CPacketMetalHandler().getClass(), Side.SERVER);
    }

    /**
     * Получение дистанции от определённой точки в мире.
     * @param world - мир
     * @param updateDistance - радиус в котором будет действовать пакет
     * @return позиция
     */
    public static void sendToAllAround(SimplePacket packet, World world, double x, double y, double z, double distance) {
        NETWORK.sendToAllAround(packet, new NetworkRegistry.TargetPoint(world.provider.dimensionId, x, y, z, distance));
    }

    /**
     * Регистрация пакета через один метод.
     * @param packet - класс пакета
     * @param side - сторона (клиент/сервер)
     */
    private void register(Class<? extends SimplePacket> packet, Side side) {
        try {
            NETWORK.registerMessage(packet.newInstance(), packet, id++, side);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }
}
Java:
package ru.mrtenfan.metalfevermachinery.packages;

import net.minecraft.entity.player.EntityPlayerMP;
import ru.mrtenfan.metalfevermachinery.container.ContainerMetalProcessor;
import ru.mrtenfan.metalfevermachinery.tileentity.TileEntityMetalProcessor;

public class CPacketMetalHandler extends SimplePacket {

    @Override
    public void server(EntityPlayerMP player) {
        if(player.openContainer instanceof ContainerMetalProcessor) {
            ContainerMetalProcessor cmp = (ContainerMetalProcessor)player.openContainer;
            TileEntityMetalProcessor temp = cmp.getEntity();
            temp.setMode(temp.getMode() + 1);
        }
        super.server(player);
    }
}
Простите за мои затупы D:
 
7,099
324
1,510
Если гуи с контейнером, то можно юзать Container#enchantItem с ванильным пакетом нажатия на кнопку вместо своих велосипедов
 
Подсмотрел у меканизма и что-то сделал, но выдаёт ошибку:
[21:21:48] [Server thread/ERROR] [FML]: FMLIndexedMessageCodec exception caught
io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator 0 in channel MFM
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.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:?]
Caused by: java.lang.NullPointerException: Undefined message for discriminator 0 in channel MFM
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
... 13 more
[21:21:48] [Server thread/ERROR] [FML]: There was a critical exception handling a packet on channel MFM
io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator 0 in channel MFM
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.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:?]
Caused by: java.lang.NullPointerException: Undefined message for discriminator 0 in channel MFM
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
... 13 more
 
Сверху