From e9a526c0ae6b49758b3d0324bd722d019816f520 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Mon, 13 Oct 2025 03:30:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=B0=E7=89=88=E9=85=8D?= =?UTF-8?q?=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 66 +++++++++++++------ .../modern/RecipeBookDisplayEntry.java | 18 ++--- .../network/modern/RecipeBookEntry.java | 19 +++--- .../modern/display/FurnaceRecipeDisplay.java | 45 +++++++------ .../network/modern/display/RecipeDisplay.java | 20 +++--- .../modern/display/RecipeDisplayTypes.java | 25 +++++-- .../display/ShapedCraftingRecipeDisplay.java | 41 ++++++------ .../ShapelessCraftingRecipeDisplay.java | 41 ++++++------ .../modern/display/SmithingRecipeDisplay.java | 50 +++++++------- .../display/StonecutterRecipeDisplay.java | 38 ++++++----- .../modern/display/slot/AnyFuelDisplay.java | 12 ++-- .../display/slot/CompositeSlotDisplay.java | 27 ++++---- .../modern/display/slot/EmptySlotDisplay.java | 12 ++-- .../modern/display/slot/ItemSlotDisplay.java | 9 +-- .../display/slot/ItemStackSlotDisplay.java | 32 ++++----- .../modern/display/slot/SlotDisplay.java | 20 +++--- .../modern/display/slot/SlotDisplayTypes.java | 30 ++++++--- .../slot/SmithingTrimDemoSlotDisplay.java | 33 +++++----- .../modern/display/slot/TagSlotDisplay.java | 9 +-- .../slot/WithRemainderSlotDisplay.java | 23 +++---- .../core/registry/BuiltInRegistries.java | 4 +- .../craftengine/core/registry/Registries.java | 4 +- 22 files changed, 325 insertions(+), 253 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index cf59c65de..198a07975 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -3007,18 +3007,32 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes @Override public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) { if (Config.disableItemOperations()) return; + MutableBoolean changed = new MutableBoolean(false); FriendlyByteBuf buf = event.getBuffer(); - List entries = buf.readCollection(ArrayList::new, byteBuf -> { - RecipeBookEntry entry = RecipeBookEntry.read(byteBuf); - entry.applyClientboundData((BukkitServerPlayer) user); + BukkitItemManager itemManager = BukkitItemManager.instance(); + BukkitServerPlayer player = (BukkitServerPlayer) user; + Object friendlyBuf = FastNMS.INSTANCE.constructor$FriendlyByteBuf(buf.source()); + List> entries = buf.readCollection(ArrayList::new, byteBuf -> { + RecipeBookEntry entry = RecipeBookEntry.read(byteBuf, __ -> itemManager.wrap(FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf))); + entry.applyClientboundData(item -> { + Optional> remapped = itemManager.s2cNew(item, player); + if (remapped.isEmpty()) { + return item; + } + changed.set(true); + return remapped.get(); + }); return entry; }); boolean replace = buf.readBoolean(); - event.setChanged(true); - buf.clear(); - buf.writeVarInt(event.packetID()); - buf.writeCollection(entries, ((byteBuf, recipeBookEntry) -> recipeBookEntry.write(byteBuf))); - buf.writeBoolean(replace); + if (changed.booleanValue()) { + event.setChanged(true); + buf.clear(); + buf.writeVarInt(event.packetID()); + buf.writeCollection(entries, ((byteBuf, recipeBookEntry) -> recipeBookEntry.write(byteBuf, + (__, item) -> FastNMS.INSTANCE.method$FriendlyByteBuf$writeItem(friendlyBuf, item.getItem())))); + buf.writeBoolean(replace); + } } } @@ -3028,19 +3042,33 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) { if (Config.disableItemOperations()) return; if (!VersionHelper.isOrAbove1_21_2()) return; + MutableBoolean changed = new MutableBoolean(false); FriendlyByteBuf buf = event.getBuffer(); + Object friendlyBuf = FastNMS.INSTANCE.constructor$FriendlyByteBuf(buf.source()); + BukkitServerPlayer player = (BukkitServerPlayer) user; + BukkitItemManager itemManager = BukkitItemManager.instance(); int containerId = buf.readContainerId(); - RecipeDisplay display = RecipeDisplay.read(buf); - display.applyClientboundData((BukkitServerPlayer) user); - event.setChanged(true); - buf.clear(); - buf.writeVarInt(event.packetID()); - buf.writeContainerId(containerId); - display.write(buf); + RecipeDisplay display = RecipeDisplay.read(buf, __ -> itemManager.wrap(FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf))); + display.applyClientboundData(item -> { + Optional> remapped = itemManager.s2cNew(item, player); + if (remapped.isEmpty()) { + return item; + } + changed.set(true); + return remapped.get(); + }); + + if (changed.booleanValue()) { + event.setChanged(true); + buf.clear(); + buf.writeVarInt(event.packetID()); + buf.writeContainerId(containerId); + display.write(buf, (__, item) -> FastNMS.INSTANCE.method$FriendlyByteBuf$writeItem(friendlyBuf, item.getItem())); + } } } - public class UpdateRecipesListener implements ByteBufferPacketListener { + public static class UpdateRecipesListener implements ByteBufferPacketListener { @Override public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) { @@ -3054,7 +3082,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes List> holders = buf.readCollection(ArrayList::new, byteBuf -> { LegacyRecipeHolder holder = LegacyRecipeHolder.read(byteBuf, __ -> itemManager.wrap(FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf))); holder.recipe().applyClientboundData(item -> { - Optional> remapped = plugin.itemManager().s2cNew(item, player); + Optional> remapped = itemManager.s2cNew(item, player); if (remapped.isEmpty()) { return item; } @@ -3068,8 +3096,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes buf.clear(); buf.writeVarInt(event.packetID()); buf.writeCollection(holders, ((byteBuf, recipeHolder) - -> recipeHolder.write(byteBuf, (__, item) - -> FastNMS.INSTANCE.method$FriendlyByteBuf$writeItem(friendlyBuf, item.getItem())))); + -> recipeHolder.write(byteBuf, + (__, item) -> FastNMS.INSTANCE.method$FriendlyByteBuf$writeItem(friendlyBuf, item.getItem())))); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookDisplayEntry.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookDisplayEntry.java index aab9394ec..5f28a0aa7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookDisplayEntry.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookDisplayEntry.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.core.item.recipe.network.modern; import com.mojang.datafixers.util.Either; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; @@ -11,25 +11,27 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.OptionalInt; +import java.util.function.Function; -public record RecipeBookDisplayEntry(RecipeDisplayId displayId, RecipeDisplay display, OptionalInt group, int category, Optional> ingredients) { +public record RecipeBookDisplayEntry(RecipeDisplayId displayId, RecipeDisplay display, OptionalInt group, int category, Optional> ingredients) { - public static RecipeBookDisplayEntry read(FriendlyByteBuf buffer) { + @SuppressWarnings({"unchecked", "rawtypes"}) + public static RecipeBookDisplayEntry read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { RecipeDisplayId displayId = RecipeDisplayId.read(buffer); - RecipeDisplay display = RecipeDisplay.read(buffer); + RecipeDisplay display = RecipeDisplay.read(buffer, reader); OptionalInt group = buffer.readOptionalVarInt(); int category = buffer.readVarInt(); // simplify the registry lookup since we don't care about the category Optional> requirements = buffer.readOptional(buf -> buf.readCollection(ArrayList::new, byteBuf -> new Ingredient(byteBuf.readHolderSet()))); // simplify the registry lookup since we don't care about the ingredient ids return new RecipeBookDisplayEntry(displayId, display, group, category, requirements); } - public void applyClientboundData(Player player) { - this.display.applyClientboundData(player); + public void applyClientboundData(Function, Item> function) { + this.display.applyClientboundData(function); } - public void write(FriendlyByteBuf buffer) { + public void write(FriendlyByteBuf buffer, FriendlyByteBuf.Writer> writer) { this.displayId.write(buffer); - this.display.write(buffer); + this.display.write(buffer, writer); buffer.writeOptionalVarInt(this.group); buffer.writeVarInt(this.category); buffer.writeOptional(this.ingredients, (buf, recipeIngredients) -> buf.writeCollection(recipeIngredients, (byteBuf, ingredient) -> byteBuf.writeHolderSet(ingredient.holderSet))); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookEntry.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookEntry.java index ed7706a52..5e48b6103 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookEntry.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/RecipeBookEntry.java @@ -1,22 +1,25 @@ package net.momirealms.craftengine.core.item.recipe.network.modern; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public record RecipeBookEntry(RecipeBookDisplayEntry entry, byte flags) { +import java.util.function.Function; - public void applyClientboundData(Player player) { - this.entry.applyClientboundData(player); +public record RecipeBookEntry(RecipeBookDisplayEntry entry, byte flags) { + + public void applyClientboundData(Function, Item> function) { + this.entry.applyClientboundData(function); } - public static RecipeBookEntry read(FriendlyByteBuf buffer) { - RecipeBookDisplayEntry displayEntry = RecipeBookDisplayEntry.read(buffer); + @SuppressWarnings({"unchecked", "rawtypes"}) + public static RecipeBookEntry read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { + RecipeBookDisplayEntry displayEntry = RecipeBookDisplayEntry.read(buffer, reader); byte flags = buffer.readByte(); return new RecipeBookEntry(displayEntry, flags); } - public void write(FriendlyByteBuf buffer) { - this.entry.write(buffer); + public void write(FriendlyByteBuf buffer, FriendlyByteBuf.Writer> writer) { + this.entry.write(buffer, writer); buffer.writeByte(this.flags); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/FurnaceRecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/FurnaceRecipeDisplay.java index dd3e2f67a..4ef729f77 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/FurnaceRecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/FurnaceRecipeDisplay.java @@ -1,41 +1,44 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import org.jetbrains.annotations.NotNull; -public record FurnaceRecipeDisplay(SlotDisplay ingredient, SlotDisplay fuel, SlotDisplay result, SlotDisplay craftingStation, int duration, float experience) implements RecipeDisplay { +import java.util.function.Function; - public static FurnaceRecipeDisplay read(FriendlyByteBuf buffer) { - SlotDisplay ingredient = SlotDisplay.read(buffer); - SlotDisplay fuel = SlotDisplay.read(buffer); - SlotDisplay result = SlotDisplay.read(buffer); - SlotDisplay craftingStation = SlotDisplay.read(buffer); +public record FurnaceRecipeDisplay(SlotDisplay ingredient, SlotDisplay fuel, SlotDisplay result, SlotDisplay craftingStation, int duration, float experience) + implements RecipeDisplay { + + public static FurnaceRecipeDisplay read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { + SlotDisplay ingredient = SlotDisplay.read(buffer, reader); + SlotDisplay fuel = SlotDisplay.read(buffer, reader); + SlotDisplay result = SlotDisplay.read(buffer, reader); + SlotDisplay craftingStation = SlotDisplay.read(buffer, reader); int duration = buffer.readVarInt(); float experience = buffer.readFloat(); - return new FurnaceRecipeDisplay(ingredient, fuel, result, craftingStation, duration, experience); + return new FurnaceRecipeDisplay<>(ingredient, fuel, result, craftingStation, duration, experience); } @Override - public void applyClientboundData(Player player) { - this.ingredient.applyClientboundData(player); - this.fuel.applyClientboundData(player); - this.result.applyClientboundData(player); - this.craftingStation.applyClientboundData(player); - } - - @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(2); - this.ingredient.write(buf); - this.fuel.write(buf); - this.result.write(buf); - this.craftingStation.write(buf); + this.ingredient.write(buf, writer); + this.fuel.write(buf, writer); + this.result.write(buf, writer); + this.craftingStation.write(buf, writer); buf.writeVarInt(this.duration); buf.writeFloat(this.experience); } + @Override + public void applyClientboundData(Function, Item> function) { + this.ingredient.applyClientboundData(function); + this.fuel.applyClientboundData(function); + this.result.applyClientboundData(function); + this.craftingStation.applyClientboundData(function); + } + @Override public @NotNull String toString() { return "FurnaceRecipeDisplay{" + diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplay.java index 0a0713b80..6a050fb0a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplay.java @@ -1,25 +1,27 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.util.FriendlyByteBuf; +import java.util.function.BiFunction; import java.util.function.Function; -public interface RecipeDisplay { +public interface RecipeDisplay { - void write(FriendlyByteBuf buf); + void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer); - void applyClientboundData(Player player); + void applyClientboundData(Function, Item> function); - static RecipeDisplay read(final FriendlyByteBuf buf) { - return buf.readById(BuiltInRegistries.RECIPE_DISPLAY_TYPE).read(buf); + @SuppressWarnings({"unchecked", "rawtypes"}) + static RecipeDisplay read(final FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return buf.readById(BuiltInRegistries.RECIPE_DISPLAY_TYPE).read(buf, (FriendlyByteBuf.Reader) reader); } - record Type(Function reader) { + record Type(BiFunction>, RecipeDisplay> reader) { - public RecipeDisplay read(final FriendlyByteBuf buf) { - return this.reader.apply(buf); + public RecipeDisplay read(final FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return this.reader.apply(buf, reader); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplayTypes.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplayTypes.java index 81d781991..af91ab1f5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplayTypes.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/RecipeDisplayTypes.java @@ -1,11 +1,16 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.Registries; import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceKey; +import java.util.function.BiFunction; + +@SuppressWarnings({"unchecked", "rawtypes"}) public final class RecipeDisplayTypes { private RecipeDisplayTypes() {} @@ -19,14 +24,20 @@ public final class RecipeDisplayTypes { } static { - register(CRAFTING_SHAPELESS, new RecipeDisplay.Type(ShapelessCraftingRecipeDisplay::read)); - register(CRAFTING_SHAPED, new RecipeDisplay.Type(ShapedCraftingRecipeDisplay::read)); - register(FURNACE, new RecipeDisplay.Type(FurnaceRecipeDisplay::read)); - register(STONECUTTER, new RecipeDisplay.Type(StonecutterRecipeDisplay::read)); - register(SMITHING, new RecipeDisplay.Type(SmithingRecipeDisplay::read)); + register(CRAFTING_SHAPELESS, new RecipeDisplay.Type(createReaderFunction(ShapelessCraftingRecipeDisplay::read))); + register(CRAFTING_SHAPED, new RecipeDisplay.Type(createReaderFunction(ShapedCraftingRecipeDisplay::read))); + register(FURNACE, new RecipeDisplay.Type(createReaderFunction(FurnaceRecipeDisplay::read))); + register(STONECUTTER, new RecipeDisplay.Type(createReaderFunction(StonecutterRecipeDisplay::read))); + register(SMITHING, new RecipeDisplay.Type(createReaderFunction(SmithingRecipeDisplay::read))); } - public static void register(Key key, RecipeDisplay.Type type) { - ((WritableRegistry) BuiltInRegistries.RECIPE_DISPLAY_TYPE).register(ResourceKey.create(Registries.RECIPE_DISPLAY_TYPE.location(), key), type); + private static BiFunction>, RecipeDisplay> createReaderFunction( + BiFunction function) { + return (BiFunction) function; + } + + public static void register(Key key, RecipeDisplay.Type type) { + ((WritableRegistry>) BuiltInRegistries.RECIPE_DISPLAY_TYPE) + .register(ResourceKey.create(Registries.RECIPE_DISPLAY_TYPE.location(), key), type); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapedCraftingRecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapedCraftingRecipeDisplay.java index 90a7f2a76..f048c727f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapedCraftingRecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapedCraftingRecipeDisplay.java @@ -1,41 +1,42 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; -public record ShapedCraftingRecipeDisplay(int width, int height, List ingredients, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { +public record ShapedCraftingRecipeDisplay(int width, int height, List> ingredients, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { - public static ShapedCraftingRecipeDisplay read(FriendlyByteBuf buffer) { + public static ShapedCraftingRecipeDisplay read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { int width = buffer.readVarInt(); int height = buffer.readVarInt(); - List ingredients = buffer.readCollection(ArrayList::new, SlotDisplay::read); - SlotDisplay result = SlotDisplay.read(buffer); - SlotDisplay craftingStation = SlotDisplay.read(buffer); - return new ShapedCraftingRecipeDisplay(width, height, ingredients, result, craftingStation); + List> ingredients = buffer.readCollection(ArrayList::new, buf -> SlotDisplay.read(buf, reader)); + SlotDisplay result = SlotDisplay.read(buffer, reader); + SlotDisplay craftingStation = SlotDisplay.read(buffer, reader); + return new ShapedCraftingRecipeDisplay<>(width, height, ingredients, result, craftingStation); } @Override - public void applyClientboundData(Player player) { - for (SlotDisplay ingredient : this.ingredients) { - ingredient.applyClientboundData(player); - } - this.result.applyClientboundData(player); - this.craftingStation.applyClientboundData(player); - } - - @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(1); buf.writeVarInt(this.width); buf.writeVarInt(this.height); - buf.writeCollection(this.ingredients, (byteBuf, slotDisplay) -> slotDisplay.write(buf)); - this.result.write(buf); - this.craftingStation.write(buf); + buf.writeCollection(this.ingredients, (byteBuf, slotDisplay) -> slotDisplay.write(buf, writer)); + this.result.write(buf, writer); + this.craftingStation.write(buf, writer); + } + + @Override + public void applyClientboundData(Function, Item> function) { + for (SlotDisplay ingredient : this.ingredients) { + ingredient.applyClientboundData(function); + } + this.result.applyClientboundData(function); + this.craftingStation.applyClientboundData(function); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapelessCraftingRecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapelessCraftingRecipeDisplay.java index 5f776b43b..b1ca6afb3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapelessCraftingRecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/ShapelessCraftingRecipeDisplay.java @@ -1,37 +1,38 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; -public record ShapelessCraftingRecipeDisplay(List ingredients, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { +public record ShapelessCraftingRecipeDisplay(List> ingredients, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { - public static ShapelessCraftingRecipeDisplay read(FriendlyByteBuf buffer) { - List ingredients = buffer.readCollection(ArrayList::new, SlotDisplay::read); - SlotDisplay result = SlotDisplay.read(buffer); - SlotDisplay craftingStation = SlotDisplay.read(buffer); - return new ShapelessCraftingRecipeDisplay(ingredients, result, craftingStation); + public static ShapelessCraftingRecipeDisplay read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { + List> ingredients = buffer.readCollection(ArrayList::new, buf -> SlotDisplay.read(buf, reader)); + SlotDisplay result = SlotDisplay.read(buffer, reader); + SlotDisplay craftingStation = SlotDisplay.read(buffer, reader); + return new ShapelessCraftingRecipeDisplay<>(ingredients, result, craftingStation); } @Override - public void applyClientboundData(Player player) { - for (SlotDisplay ingredient : ingredients) { - ingredient.applyClientboundData(player); - } - this.result.applyClientboundData(player); - this.craftingStation.applyClientboundData(player); - } - - @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(0); - buf.writeCollection(this.ingredients, (byteBuf, slotDisplay) -> slotDisplay.write(buf)); - this.result.write(buf); - this.craftingStation.write(buf); + buf.writeCollection(this.ingredients, (byteBuf, slotDisplay) -> slotDisplay.write(buf, writer)); + this.result.write(buf, writer); + this.craftingStation.write(buf, writer); + } + + @Override + public void applyClientboundData(Function, Item> function) { + for (SlotDisplay ingredient : ingredients) { + ingredient.applyClientboundData(function); + } + this.result.applyClientboundData(function); + this.craftingStation.applyClientboundData(function); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/SmithingRecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/SmithingRecipeDisplay.java index e276f06bd..1f8cdf56b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/SmithingRecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/SmithingRecipeDisplay.java @@ -1,38 +1,40 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import org.jetbrains.annotations.NotNull; -public record SmithingRecipeDisplay(SlotDisplay template, SlotDisplay base, SlotDisplay addition, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { +import java.util.function.Function; - public static SmithingRecipeDisplay read(FriendlyByteBuf buffer) { - SlotDisplay template = SlotDisplay.read(buffer); - SlotDisplay base = SlotDisplay.read(buffer); - SlotDisplay addition = SlotDisplay.read(buffer); - SlotDisplay result = SlotDisplay.read(buffer); - SlotDisplay craftingStation = SlotDisplay.read(buffer); - return new SmithingRecipeDisplay(template, base, addition, result, craftingStation); +public record SmithingRecipeDisplay(SlotDisplay template, SlotDisplay base, SlotDisplay addition, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { + + public static SmithingRecipeDisplay read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { + SlotDisplay template = SlotDisplay.read(buffer, reader); + SlotDisplay base = SlotDisplay.read(buffer, reader); + SlotDisplay addition = SlotDisplay.read(buffer, reader); + SlotDisplay result = SlotDisplay.read(buffer, reader); + SlotDisplay craftingStation = SlotDisplay.read(buffer, reader); + return new SmithingRecipeDisplay<>(template, base, addition, result, craftingStation); } @Override - public void applyClientboundData(Player player) { - this.template.applyClientboundData(player); - this.base.applyClientboundData(player); - this.addition.applyClientboundData(player); - this.result.applyClientboundData(player); - this.craftingStation.applyClientboundData(player); - } - - @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(4); - this.template.write(buf); - this.base.write(buf); - this.addition.write(buf); - this.result.write(buf); - this.craftingStation.write(buf); + this.template.write(buf, writer); + this.base.write(buf, writer); + this.addition.write(buf, writer); + this.result.write(buf, writer); + this.craftingStation.write(buf, writer); + } + + @Override + public void applyClientboundData(Function, Item> function) { + this.template.applyClientboundData(function); + this.base.applyClientboundData(function); + this.addition.applyClientboundData(function); + this.result.applyClientboundData(function); + this.craftingStation.applyClientboundData(function); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/StonecutterRecipeDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/StonecutterRecipeDisplay.java index e0281e642..719ea24ec 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/StonecutterRecipeDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/StonecutterRecipeDisplay.java @@ -1,32 +1,34 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import org.jetbrains.annotations.NotNull; -public record StonecutterRecipeDisplay(SlotDisplay input, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { +import java.util.function.Function; - public static StonecutterRecipeDisplay read(FriendlyByteBuf buffer) { - SlotDisplay input = SlotDisplay.read(buffer); - SlotDisplay result = SlotDisplay.read(buffer); - SlotDisplay craftingStation = SlotDisplay.read(buffer); - return new StonecutterRecipeDisplay(input, result, craftingStation); +public record StonecutterRecipeDisplay(SlotDisplay input, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { + + public static StonecutterRecipeDisplay read(FriendlyByteBuf buffer, FriendlyByteBuf.Reader> reader) { + SlotDisplay input = SlotDisplay.read(buffer, reader); + SlotDisplay result = SlotDisplay.read(buffer, reader); + SlotDisplay craftingStation = SlotDisplay.read(buffer, reader); + return new StonecutterRecipeDisplay<>(input, result, craftingStation); } @Override - public void applyClientboundData(Player player) { - this.input.applyClientboundData(player); - this.result.applyClientboundData(player); - this.craftingStation.applyClientboundData(player); - } - - @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(3); - this.input.write(buf); - this.result.write(buf); - this.craftingStation.write(buf); + this.input.write(buf, writer); + this.result.write(buf, writer); + this.craftingStation.write(buf, writer); + } + + @Override + public void applyClientboundData(Function, Item> function) { + this.input.applyClientboundData(function); + this.result.applyClientboundData(function); + this.craftingStation.applyClientboundData(function); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/AnyFuelDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/AnyFuelDisplay.java index 35ae7cae8..dbdf6b89f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/AnyFuelDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/AnyFuelDisplay.java @@ -1,16 +1,18 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public class AnyFuelDisplay implements SlotDisplay { - public static final AnyFuelDisplay INSTANCE = new AnyFuelDisplay(); +public class AnyFuelDisplay implements SlotDisplay { + public static final AnyFuelDisplay INSTANCE = new AnyFuelDisplay<>(); - public static AnyFuelDisplay read(FriendlyByteBuf buf) { - return INSTANCE; + @SuppressWarnings("unchecked") + public static AnyFuelDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return (AnyFuelDisplay) INSTANCE; } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(1); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/CompositeSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/CompositeSlotDisplay.java index 2ce54a3af..d5359a293 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/CompositeSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/CompositeSlotDisplay.java @@ -1,37 +1,38 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; -public class CompositeSlotDisplay implements SlotDisplay { - private final List slots; +public class CompositeSlotDisplay implements SlotDisplay { + private final List> slots; - public CompositeSlotDisplay(List slots) { + public CompositeSlotDisplay(List> slots) { this.slots = slots; } - public static CompositeSlotDisplay read(FriendlyByteBuf buf) { - List slots = buf.readCollection(ArrayList::new, SlotDisplay::read); - return new CompositeSlotDisplay(slots); + public static CompositeSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + List> slots = buf.readCollection(ArrayList::new, buffer -> SlotDisplay.read(buf, reader)); + return new CompositeSlotDisplay<>(slots); } @Override - public void applyClientboundData(Player player) { - for (SlotDisplay slotDisplay : this.slots) { - slotDisplay.applyClientboundData(player); + public void applyClientboundData(Function, Item> function) { + for (SlotDisplay slotDisplay : this.slots) { + slotDisplay.applyClientboundData(function); } } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(7); - buf.writeCollection(this.slots, (byteBuf, slotDisplay) -> slotDisplay.write(buf)); + buf.writeCollection(this.slots, (byteBuf, slotDisplay) -> slotDisplay.write(buf, writer)); } - public List slots() { + public List> slots() { return this.slots; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/EmptySlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/EmptySlotDisplay.java index 90ecf7403..07febedad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/EmptySlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/EmptySlotDisplay.java @@ -1,16 +1,18 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public class EmptySlotDisplay implements SlotDisplay { - public static final EmptySlotDisplay INSTANCE = new EmptySlotDisplay(); +public class EmptySlotDisplay implements SlotDisplay { + public static final EmptySlotDisplay INSTANCE = new EmptySlotDisplay<>(); - public static EmptySlotDisplay read(FriendlyByteBuf buf) { - return INSTANCE; + @SuppressWarnings("unchecked") + public static EmptySlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return (EmptySlotDisplay) INSTANCE; } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(0); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemSlotDisplay.java index 1b5c187ad..e63fb02b5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemSlotDisplay.java @@ -1,21 +1,22 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public class ItemSlotDisplay implements SlotDisplay { +public class ItemSlotDisplay implements SlotDisplay { private final int item; public ItemSlotDisplay(int item) { this.item = item; } - public static ItemSlotDisplay read(FriendlyByteBuf buf) { + public static ItemSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { int item = buf.readVarInt(); - return new ItemSlotDisplay(item); + return new ItemSlotDisplay<>(item); } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(2); buf.writeVarInt(this.item); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemStackSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemStackSlotDisplay.java index 2e449d33d..fee6acca7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemStackSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/ItemStackSlotDisplay.java @@ -1,39 +1,35 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; -import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; -import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public class ItemStackSlotDisplay implements SlotDisplay { - private Item item; +import java.util.function.Function; - public ItemStackSlotDisplay(Item item) { +public class ItemStackSlotDisplay implements SlotDisplay { + private Item item; + + public ItemStackSlotDisplay(Item item) { this.item = item; } - public static ItemStackSlotDisplay read(FriendlyByteBuf buf) { - Item itemStack = CraftEngine.instance().itemManager().decode(buf); - return new ItemStackSlotDisplay(itemStack); + public static ItemStackSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + Item itemStack = reader.apply(buf); + return new ItemStackSlotDisplay<>(itemStack); } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(3); - CraftEngine.instance().itemManager().encode(buf, this.item); + writer.accept(buf, item); } @Override - public void applyClientboundData(Player player) { - this.item = CraftEngine.instance().itemManager().s2c(this.item, player); + public void applyClientboundData(Function, Item> function) { + this.item = function.apply(this.item); } - public Item item() { - return this.item; - } - - public void setItem(Item item) { - this.item = item; + public Item item() { + return item; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplay.java index 6a61b1b99..1ef87793b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplay.java @@ -1,26 +1,28 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; -import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.util.FriendlyByteBuf; +import java.util.function.BiFunction; import java.util.function.Function; -public interface SlotDisplay { +public interface SlotDisplay { - void write(FriendlyByteBuf buf); + void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer); - default void applyClientboundData(Player player) { + default void applyClientboundData(Function, Item> function) { } - static SlotDisplay read(FriendlyByteBuf buf) { - return buf.readById(BuiltInRegistries.SLOT_DISPLAY_TYPE).read(buf); + @SuppressWarnings({"unchecked", "rawtypes"}) + static SlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return buf.readById(BuiltInRegistries.SLOT_DISPLAY_TYPE).read(buf, (FriendlyByteBuf.Reader) reader); } - record Type(Function reader) { + record Type(BiFunction>, SlotDisplay> reader) { - public SlotDisplay read(final FriendlyByteBuf buf) { - return this.reader.apply(buf); + public SlotDisplay read(final FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return this.reader.apply(buf, reader); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplayTypes.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplayTypes.java index 123f8dc0c..eeab2c7b7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplayTypes.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SlotDisplayTypes.java @@ -1,11 +1,16 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.Registries; import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceKey; +import java.util.function.BiFunction; + +@SuppressWarnings({"unchecked", "rawtypes"}) public final class SlotDisplayTypes { private SlotDisplayTypes() {} @@ -22,18 +27,23 @@ public final class SlotDisplayTypes { } static { - register(EMPTY, new SlotDisplay.Type(EmptySlotDisplay::read)); - register(ANY_FUEL, new SlotDisplay.Type(AnyFuelDisplay::read)); - register(ITEM, new SlotDisplay.Type(ItemSlotDisplay::read)); - register(ITEM_STACK, new SlotDisplay.Type(ItemStackSlotDisplay::read)); - register(TAG, new SlotDisplay.Type(TagSlotDisplay::read)); - register(SMITHING_TRIM, new SlotDisplay.Type(SmithingTrimDemoSlotDisplay::read)); - register(WITH_REMAINDER, new SlotDisplay.Type(WithRemainderSlotDisplay::read)); - register(COMPOSITE, new SlotDisplay.Type(CompositeSlotDisplay::read)); + register(EMPTY, new SlotDisplay.Type(createReaderFunction(EmptySlotDisplay::read))); + register(ANY_FUEL, new SlotDisplay.Type(createReaderFunction(AnyFuelDisplay::read))); + register(ITEM, new SlotDisplay.Type(createReaderFunction(ItemSlotDisplay::read))); + register(ITEM_STACK, new SlotDisplay.Type(createReaderFunction(ItemStackSlotDisplay::read))); + register(TAG, new SlotDisplay.Type(createReaderFunction(TagSlotDisplay::read))); + register(SMITHING_TRIM, new SlotDisplay.Type(createReaderFunction(SmithingTrimDemoSlotDisplay::read))); + register(WITH_REMAINDER, new SlotDisplay.Type(createReaderFunction(WithRemainderSlotDisplay::read))); + register(COMPOSITE, new SlotDisplay.Type(createReaderFunction(CompositeSlotDisplay::read))); } - public static void register(Key key, SlotDisplay.Type type) { - ((WritableRegistry) BuiltInRegistries.SLOT_DISPLAY_TYPE) + private static BiFunction>, SlotDisplay> createReaderFunction( + BiFunction function) { + return (BiFunction) function; + } + + public static void register(Key key, SlotDisplay.Type type) { + ((WritableRegistry>) BuiltInRegistries.SLOT_DISPLAY_TYPE) .register(ResourceKey.create(Registries.SLOT_DISPLAY_TYPE.location(), key), type); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SmithingTrimDemoSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SmithingTrimDemoSlotDisplay.java index 587adf86d..30f663398 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SmithingTrimDemoSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/SmithingTrimDemoSlotDisplay.java @@ -2,35 +2,36 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; import com.mojang.datafixers.util.Either; import net.kyori.adventure.text.Component; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.AdventureHelper; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.VersionHelper; import org.jetbrains.annotations.NotNull; -public class SmithingTrimDemoSlotDisplay implements SlotDisplay { - private final SlotDisplay base; - private final SlotDisplay material; +public class SmithingTrimDemoSlotDisplay implements SlotDisplay { + private final SlotDisplay base; + private final SlotDisplay material; // 1.21.2-1.21.4 - private SlotDisplay trimPattern; + private SlotDisplay trimPattern; // 1.21.5 private Either either; - public SmithingTrimDemoSlotDisplay(SlotDisplay base, SlotDisplay material, SlotDisplay trimPattern) { + public SmithingTrimDemoSlotDisplay(SlotDisplay base, SlotDisplay material, SlotDisplay trimPattern) { this.base = base; this.material = material; this.trimPattern = trimPattern; } - public SmithingTrimDemoSlotDisplay(SlotDisplay base, SlotDisplay material, Either either) { + public SmithingTrimDemoSlotDisplay(SlotDisplay base, SlotDisplay material, Either either) { this.base = base; this.either = either; this.material = material; } - public static SmithingTrimDemoSlotDisplay read(FriendlyByteBuf buf) { - SlotDisplay base = SlotDisplay.read(buf); - SlotDisplay material = SlotDisplay.read(buf); + public static SmithingTrimDemoSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + SlotDisplay base = SlotDisplay.read(buf, reader); + SlotDisplay material = SlotDisplay.read(buf, reader); if (VersionHelper.isOrAbove1_21_5()) { Either either = buf.readHolder(byteBuf -> { Key assetId = buf.readKey(); @@ -38,18 +39,18 @@ public class SmithingTrimDemoSlotDisplay implements SlotDisplay { boolean decal = buf.readBoolean(); return new TrimPattern(assetId, component, decal); }); - return new SmithingTrimDemoSlotDisplay(base, material, either); + return new SmithingTrimDemoSlotDisplay<>(base, material, either); } else { - SlotDisplay trimPattern = SlotDisplay.read(buf); - return new SmithingTrimDemoSlotDisplay(base, material, trimPattern); + SlotDisplay trimPattern = SlotDisplay.read(buf, reader); + return new SmithingTrimDemoSlotDisplay<>(base, material, trimPattern); } } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(5); - this.base.write(buf); - this.material.write(buf); + this.base.write(buf, writer); + this.material.write(buf, writer); if (VersionHelper.isOrAbove1_21_5()) { buf.writeHolder(this.either, (byteBuf, pattern) -> { byteBuf.writeKey(pattern.assetId); @@ -57,7 +58,7 @@ public class SmithingTrimDemoSlotDisplay implements SlotDisplay { byteBuf.writeBoolean(pattern.decal); }); } else { - this.trimPattern.write(buf); + this.trimPattern.write(buf, writer); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/TagSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/TagSlotDisplay.java index a6db7c345..486822358 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/TagSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/TagSlotDisplay.java @@ -1,21 +1,22 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; -public class TagSlotDisplay implements SlotDisplay { +public class TagSlotDisplay implements SlotDisplay { private final Key tag; public TagSlotDisplay(Key tag) { this.tag = tag; } - public static TagSlotDisplay read(FriendlyByteBuf buf) { - return new TagSlotDisplay(buf.readKey()); + public static TagSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + return new TagSlotDisplay<>(buf.readKey()); } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(4); buf.writeKey(this.tag); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/WithRemainderSlotDisplay.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/WithRemainderSlotDisplay.java index e25583224..876bfdae7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/WithRemainderSlotDisplay.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/network/modern/display/slot/WithRemainderSlotDisplay.java @@ -1,27 +1,28 @@ package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot; +import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.FriendlyByteBuf; -public class WithRemainderSlotDisplay implements SlotDisplay { - private final SlotDisplay input; - private final SlotDisplay remainder; +public class WithRemainderSlotDisplay implements SlotDisplay { + private final SlotDisplay input; + private final SlotDisplay remainder; - public WithRemainderSlotDisplay(SlotDisplay input, SlotDisplay remainder) { + public WithRemainderSlotDisplay(SlotDisplay input, SlotDisplay remainder) { this.input = input; this.remainder = remainder; } - public static WithRemainderSlotDisplay read(FriendlyByteBuf buf) { - SlotDisplay input = SlotDisplay.read(buf); - SlotDisplay remainder = SlotDisplay.read(buf); - return new WithRemainderSlotDisplay(input, remainder); + public static WithRemainderSlotDisplay read(FriendlyByteBuf buf, FriendlyByteBuf.Reader> reader) { + SlotDisplay input = SlotDisplay.read(buf, reader); + SlotDisplay remainder = SlotDisplay.read(buf, reader); + return new WithRemainderSlotDisplay<>(input, remainder); } @Override - public void write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf, FriendlyByteBuf.Writer> writer) { buf.writeVarInt(6); - this.input.write(buf); - this.remainder.write(buf); + this.input.write(buf, writer); + this.remainder.write(buf, writer); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index f5e9965a6..e82477950 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -81,8 +81,8 @@ public class BuiltInRegistries { public static final Registry> EVENT_CONDITION_FACTORY = createConstantBoundRegistry(Registries.EVENT_CONDITION_FACTORY, 128); public static final Registry> PLAYER_SELECTOR_FACTORY = createConstantBoundRegistry(Registries.PLAYER_SELECTOR_FACTORY, 16); public static final Registry EQUIPMENT_FACTORY = createConstantBoundRegistry(Registries.EQUIPMENT_FACTORY, 8); - public static final Registry SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE, 16); - public static final Registry RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE, 16); + public static final Registry> SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE, 16); + public static final Registry> RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE, 16); public static final Registry> LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE, 16); public static final Registry> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE, 16); public static final Registry> ITEM_UPDATER_TYPE = createConstantBoundRegistry(Registries.ITEM_UPDATER_TYPE, 16); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index c2cc74526..d35d1a172 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -83,8 +83,8 @@ public class Registries { public static final ResourceKey>> EVENT_CONDITION_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("event_condition_factory")); public static final ResourceKey>> PLAYER_SELECTOR_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("player_selector_factory")); public static final ResourceKey> EQUIPMENT_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("equipment_factory")); - public static final ResourceKey> SLOT_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type")); - public static final ResourceKey> RECIPE_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type")); + public static final ResourceKey>> SLOT_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type")); + public static final ResourceKey>> RECIPE_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type")); public static final ResourceKey>> LEGACY_RECIPE_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("legacy_recipe_type")); public static final ResourceKey>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type")); public static final ResourceKey>> ITEM_UPDATER_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_updater_type"));