Exception on player join io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:update_recipes'
FunixG opened this issue · comments
Antoine PRONNIER commented
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
Antoine PRONNIER commented
For instance, that code was working on folia 1.20.4
Warrior commented
Air is not a valid recipe ingredient anymore, see PaperMC/Paper#10748. Try using a space instead as a possible workaround
Antoine PRONNIER commented
Thanks a lot ❤️