PaperMC / Folia

Fork of Paper which adds regionised multithreading to the dedicated server.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Exception on player join io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:update_recipes'

FunixG opened this issue · comments

Expected behavior

When I try to log in my Minecraft folia server, I have an exception thrown about some crafts I think. I am not using NMS, only using folia-api

Observed/Actual behavior

The exception from the console

pacifista-survie            | io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:update_recipes'
pacifista-survie            | 	at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:53) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:26) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-hub               | [09:08:16 INFO]: UUID of player FunixGaming is 24732545-e33a-40b2-8db6-4129ba9bd49e
pacifista-survie            | 	at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:12) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[netty-codec-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:863) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:113) ~[netty-codec-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:863) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.ChannelOutboundHandlerAdapter.write(ChannelOutboundHandlerAdapter.java:113) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at net.minecraft.network.Connection$2.write(Connection.java:806) ~[?:?]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:984) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1025) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:306) ~[netty-transport-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at net.minecraft.network.Connection.doSendPacket(Connection.java:531) ~[?:?]
pacifista-survie            | 	at net.minecraft.network.Connection.lambda$sendPacket$13(Connection.java:516) ~[?:?]
pacifista-survie            | 	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413) ~[netty-transport-classes-epoll-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.97.Final.jar:4.1.97.Final]
pacifista-survie            | 	at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
pacifista-survie            | Caused by: io.netty.handler.codec.EncoderException: Empty ItemStack not allowed
pacifista-survie            | 	at net.minecraft.world.item.ItemStack$2.encode(ItemStack.java:214) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.world.item.ItemStack$2.encode(ItemStack.java:201) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.ByteBufCodecs$19.encode(ByteBufCodecs.java:413) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.ByteBufCodecs$19.encode(ByteBufCodecs.java:395) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$4.encode(StreamCodec.java:72) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.world.item.crafting.ShapedRecipePattern.toNetwork(ShapedRecipePattern.java:167) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$2.encode(StreamCodec.java:38) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.world.item.crafting.ShapedRecipe$Serializer.toNetwork(ShapedRecipe.java:208) ~[?:?]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$1.encode(StreamCodec.java:24) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$6.encode(StreamCodec.java:107) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$8.encode(StreamCodec.java:141) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.ByteBufCodecs$19.encode(ByteBufCodecs.java:413) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.ByteBufCodecs$19.encode(ByteBufCodecs.java:395) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$7.encode(StreamCodec.java:122) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$5.encode(StreamCodec.java:88) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	at net.minecraft.network.codec.StreamCodec$5.encode(StreamCodec.java:78) ~[folia-1.20.6.jar:1.20.6-DEV-36e5e83]
pacifista-survie            | 	... 32 more

Steps/models to reproduce

Here is for example a custom craft from my plugin

package fr.pacifista.plugins.jars.survie.minecraft.items;

import fr.pacifista.plugins.modules.core.PacifistaException;
import fr.pacifista.plugins.modules.core.spigot.MinecraftPlugin;
import fr.pacifista.plugins.modules.core.spigot.items.CustomItemBuilder;
import fr.pacifista.plugins.modules.core.spigot.items.custom.CustomItem;
import lombok.NonNull;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ShapedRecipe;

import java.util.UUID;

public class Elementium extends CustomItem {

    private static final UUID itemId = UUID.fromString("dea7808b-2ec1-4082-815f-effc9bcd29f6");
    private static final NamespacedKey key = new NamespacedKey(CustomItems.NAMESPACED_KEY_PACIFISTA_ITEMS, "elementium");

    protected Elementium(@NonNull final MinecraftPlugin minecraftPlugin) throws PacifistaException {
        super(generateItem(), minecraftPlugin, itemId);
    }

    private static CustomItemBuilder generateItem() throws PacifistaException {
        final CustomItemBuilder builder = new CustomItemBuilder(Material.ENDER_EYE, 1);

        builder.setName(Component.text("Elementuim", NamedTextColor.GOLD, TextDecoration.BOLD));
        builder.addToLore(
                Component.text("Cet item est utilisé dans les crafts de Pacifista", NamedTextColor.GRAY)
        );
        return builder;
    }

    @Override
    protected ShapedRecipe getRecipe(final MinecraftPlugin minecraftPlugin) {
        ShapedRecipe recipe = new ShapedRecipe(key, this.getItemStack());
        recipe.shape(
                "ADA",
                "BEB",
                "AGA");
        recipe.setIngredient('B', Material.BLAZE_POWDER);
        recipe.setIngredient('E', Material.ENDER_EYE);
        recipe.setIngredient('D', Material.DIAMOND_BLOCK);
        recipe.setIngredient('A', Material.AIR);
        recipe.setIngredient('G', Material.GOLD_INGOT);
        return recipe;
    }
}

Plugin and Datapack List

Only custom plugins

Folia version

This server is running Folia version 1.20.6-DEV-master@36e5e83 (2024-06-08T06:01:56Z) (Implementing API version 1.20.6-R0.1-SNAPSHOT)
You are running the latest version

Other

No response

For instance, that code was working on folia 1.20.4

Air is not a valid recipe ingredient anymore, see PaperMC/Paper#10748. Try using a space instead as a possible workaround

Thanks a lot ❤️