From 2b8c5082ed01ebedfb8f325826c45a26bf59e3a7 Mon Sep 17 00:00:00 2001 From: KennyTV Date: Fri, 4 Jun 2021 12:15:14 +0200 Subject: [PATCH] Make Item an interface, more OOP for the ItemRewriter --- .../api/minecraft/item/DataItem.java | 124 ++++++++++++++++++ .../viaversion/api/minecraft/item/Item.java | 92 ++----------- .../viaversion/api/protocol/Protocol.java | 10 ++ .../viaversion/api/rewriter/ItemRewriter.java | 46 +++++++ .../viaversion/api/rewriter/RewriterBase.java | 2 +- .../type/types/minecraft/FlatItemType.java | 9 +- .../types/minecraft/FlatVarIntItemType.java | 9 +- .../api/type/types/minecraft/ItemType.java | 11 +- .../protocol1_9to1_8/HandItemCache.java | 5 +- .../Protocol1_10To1_9_3_4.java | 10 +- .../packets/InventoryPackets.java | 22 ++-- .../Protocol1_11_1To1_11.java | 9 +- .../packets/InventoryPackets.java | 22 ++-- .../protocol1_11to1_10/EntityIdRewriter.java | 10 +- .../Protocol1_11To1_10.java | 10 +- .../metadata/MetadataRewriter1_11To1_10.java | 3 +- .../packets/InventoryPackets.java | 36 +++-- .../protocol1_12to1_11_1/BedRewriter.java | 4 +- .../Protocol1_12To1_11_1.java | 10 +- .../MetadataRewriter1_12To1_11_1.java | 3 +- .../packets/InventoryPackets.java | 28 ++-- .../Protocol1_13_1To1_13.java | 18 ++- .../MetadataRewriter1_13_1To1_13.java | 3 +- .../packets/InventoryPackets.java | 45 +++---- .../Protocol1_13To1_12_2.java | 27 ++-- .../data/ComponentRewriter1_13.java | 15 +-- .../data/ParticleRewriter.java | 9 +- .../protocol1_13to1_12_2/data/RecipeData.java | 20 +-- .../data/RecipeRewriter1_13_2.java | 16 +-- .../MetadataRewriter1_13To1_12_2.java | 3 +- .../packets/InventoryPackets.java | 77 ++++++----- .../Protocol1_14To1_13_2.java | 9 +- .../data/ComponentRewriter1_14.java | 7 - .../data/RecipeRewriter1_14.java | 8 +- .../MetadataRewriter1_14To1_13_2.java | 10 +- .../packets/InventoryPackets.java | 61 +++++---- .../packets/PlayerPackets.java | 4 +- .../Protocol1_15To1_14_4.java | 11 +- .../MetadataRewriter1_15To1_14_4.java | 3 +- .../packets/InventoryPackets.java | 38 +++--- .../packets/WorldPackets.java | 2 +- .../Protocol1_16_2To1_16_1.java | 9 +- .../MetadataRewriter1_16_2To1_16_1.java | 3 +- .../packets/InventoryPackets.java | 42 +++--- .../Protocol1_16To1_15_2.java | 9 +- .../data/RecipeRewriter1_16.java | 11 +- .../MetadataRewriter1_16To1_15_2.java | 3 +- .../packets/InventoryPackets.java | 63 +++++---- .../Protocol1_17To1_16_4.java | 9 +- .../MetadataRewriter1_17To1_16_4.java | 3 +- .../packets/InventoryPackets.java | 43 +++--- .../protocol1_9to1_8/ItemRewriter.java | 42 +++--- .../packets/EntityPackets.java | 2 +- .../packets/InventoryPackets.java | 6 +- .../packets/SpawnPackets.java | 5 +- .../packets/WorldPackets.java | 5 +- .../providers/HandItemProvider.java | 3 +- .../storage/EntityTracker1_9.java | 5 +- .../viaversion/rewriter/EntityRewriter.java | 5 +- .../viaversion/rewriter/ItemRewriter.java | 62 +++++---- .../viaversion/rewriter/RecipeRewriter.java | 12 +- .../viaversion/common/type/ItemTypeTest.java | 14 +- .../protocol1_9to1_8/HandItemCache.java | 5 +- 63 files changed, 715 insertions(+), 507 deletions(-) create mode 100644 api/src/main/java/com/viaversion/viaversion/api/minecraft/item/DataItem.java create mode 100644 api/src/main/java/com/viaversion/viaversion/api/rewriter/ItemRewriter.java diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/DataItem.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/DataItem.java new file mode 100644 index 000000000..a0dcea55a --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/DataItem.java @@ -0,0 +1,124 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2021 ViaVersion and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.viaversion.viaversion.api.minecraft.item; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.google.gson.annotations.SerializedName; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.Objects; + +public class DataItem implements Item { + @SerializedName(value = "identifier", alternate = "id") + private int identifier; + private byte amount; + private short data; + private CompoundTag tag; + + public DataItem() { + } + + public DataItem(int identifier, byte amount, short data, @Nullable CompoundTag tag) { + this.identifier = identifier; + this.amount = amount; + this.data = data; + this.tag = tag; + } + + public DataItem(Item toCopy) { + this(toCopy.identifier(), (byte) toCopy.amount(), toCopy.data(), toCopy.tag()); + } + + @Override + public int identifier() { + return identifier; + } + + @Override + public void setIdentifier(int identifier) { + this.identifier = identifier; + } + + @Override + public int amount() { + return amount; + } + + @Override + public void setAmount(int amount) { + if (amount > Byte.MAX_VALUE && amount < Byte.MIN_VALUE) { + throw new IllegalArgumentException("Invalid item amount: " + amount); + } + this.amount = (byte) amount; + } + + @Override + public short data() { + return data; + } + + @Override + public void setData(short data) { + this.data = data; + } + + @Override + public @Nullable CompoundTag tag() { + return tag; + } + + @Override + public void setTag(@Nullable CompoundTag tag) { + this.tag = tag; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DataItem item = (DataItem) o; + if (identifier != item.identifier) return false; + if (amount != item.amount) return false; + if (data != item.data) return false; + return Objects.equals(tag, item.tag); + } + + @Override + public int hashCode() { + int result = identifier; + result = 31 * result + (int) amount; + result = 31 * result + (int) data; + result = 31 * result + (tag != null ? tag.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "Item{" + + "identifier=" + identifier + + ", amount=" + amount + + ", data=" + data + + ", tag=" + tag + + '}'; + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/Item.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/Item.java index 492845666..bb92fcf3c 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/Item.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/item/Item.java @@ -23,91 +23,27 @@ package com.viaversion.viaversion.api.minecraft.item; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.google.gson.annotations.SerializedName; import org.checkerframework.checker.nullness.qual.Nullable; -import java.util.Objects; +public interface Item { -public class Item { - @SerializedName(value = "identifier", alternate = "id") - private int identifier; - private byte amount; - private short data; - private CompoundTag tag; + int identifier(); - public Item() { + void setIdentifier(int identifier); + + int amount(); + + void setAmount(int amount); + + default short data() { + return 0; } - public Item(int identifier, byte amount, short data, @Nullable CompoundTag tag) { - this.identifier = identifier; - this.amount = amount; - this.data = data; - this.tag = tag; + default void setData(short data) { + throw new UnsupportedOperationException(); } - public Item(Item toCopy) { - this(toCopy.getIdentifier(), toCopy.getAmount(), toCopy.getData(), toCopy.getTag()); - } + @Nullable CompoundTag tag(); - public int getIdentifier() { - return identifier; - } - - public void setIdentifier(int identifier) { - this.identifier = identifier; - } - - public byte getAmount() { - return amount; - } - - public void setAmount(byte amount) { - this.amount = amount; - } - - public short getData() { - return data; - } - - public void setData(short data) { - this.data = data; - } - - public @Nullable CompoundTag getTag() { - return tag; - } - - public void setTag(@Nullable CompoundTag tag) { - this.tag = tag; - } - - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Item item = (Item) o; - if (identifier != item.identifier) return false; - if (amount != item.amount) return false; - if (data != item.data) return false; - return Objects.equals(tag, item.tag); - } - - @Override - public int hashCode() { - int result = identifier; - result = 31 * result + (int) amount; - result = 31 * result + (int) data; - result = 31 * result + (tag != null ? tag.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Item{" + - "identifier=" + identifier + - ", amount=" + amount + - ", data=" + data + - ", tag=" + tag + - '}'; - } + void setTag(@Nullable CompoundTag tag); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java index 949733169..dbafdd749 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java @@ -32,6 +32,7 @@ import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType; import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -274,6 +275,15 @@ public interface Protocol extends Rewriter { + + /** + * Returns the rewritten item, which may or may not be the same given Item instance. + * + * @param item item + * @return rewritten item + */ + @Nullable Item handleItemToClient(@Nullable Item item); + + /** + * Returns the rewritten item, which may or may not be the same given Item instance. + * + * @param item item + * @return rewritten item + */ + @Nullable Item handleItemToServer(@Nullable Item item); +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/rewriter/RewriterBase.java b/api/src/main/java/com/viaversion/viaversion/api/rewriter/RewriterBase.java index e42402b47..e4fdb85bd 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/rewriter/RewriterBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/rewriter/RewriterBase.java @@ -32,7 +32,7 @@ public abstract class RewriterBase implements Rewriter { } @Override - public void register() { + public final void register() { registerPackets(); registerRewrites(); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatItemType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatItemType.java index fb105c709..72444bc57 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatItemType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatItemType.java @@ -22,6 +22,7 @@ */ package com.viaversion.viaversion.api.type.types.minecraft; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.type.Type; import io.netty.buffer.ByteBuf; @@ -37,7 +38,7 @@ public class FlatItemType extends BaseItemType { if (id < 0) { return null; } else { - Item item = new Item(); + Item item = new DataItem(); item.setIdentifier(id); item.setAmount(buffer.readByte()); item.setTag(Type.NBT.read(buffer)); @@ -50,9 +51,9 @@ public class FlatItemType extends BaseItemType { if (object == null) { buffer.writeShort(-1); } else { - buffer.writeShort(object.getIdentifier()); - buffer.writeByte(object.getAmount()); - Type.NBT.write(buffer, object.getTag()); + buffer.writeShort(object.identifier()); + buffer.writeByte(object.amount()); + Type.NBT.write(buffer, object.tag()); } } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatVarIntItemType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatVarIntItemType.java index 3d58733d4..6058561cc 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatVarIntItemType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/FlatVarIntItemType.java @@ -22,6 +22,7 @@ */ package com.viaversion.viaversion.api.type.types.minecraft; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import io.netty.buffer.ByteBuf; @@ -36,7 +37,7 @@ public class FlatVarIntItemType extends BaseItemType { if (!present) { return null; } else { - Item item = new Item(); + Item item = new DataItem(); item.setIdentifier(VAR_INT.readPrimitive(buffer)); item.setAmount(buffer.readByte()); item.setTag(NBT.read(buffer)); @@ -50,9 +51,9 @@ public class FlatVarIntItemType extends BaseItemType { buffer.writeBoolean(false); } else { buffer.writeBoolean(true); - VAR_INT.writePrimitive(buffer, object.getIdentifier()); - buffer.writeByte(object.getAmount()); - NBT.write(buffer, object.getTag()); + VAR_INT.writePrimitive(buffer, object.identifier()); + buffer.writeByte(object.amount()); + NBT.write(buffer, object.tag()); } } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ItemType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ItemType.java index 1e02b3347..c84f6b548 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ItemType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ItemType.java @@ -22,6 +22,7 @@ */ package com.viaversion.viaversion.api.type.types.minecraft; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import io.netty.buffer.ByteBuf; @@ -36,7 +37,7 @@ public class ItemType extends BaseItemType { if (id < 0) { return null; } else { - Item item = new Item(); + Item item = new DataItem(); item.setIdentifier(id); item.setAmount(buffer.readByte()); item.setData(buffer.readShort()); @@ -50,10 +51,10 @@ public class ItemType extends BaseItemType { if (object == null) { buffer.writeShort(-1); } else { - buffer.writeShort(object.getIdentifier()); - buffer.writeByte(object.getAmount()); - buffer.writeShort(object.getData()); - NBT.write(buffer, object.getTag()); + buffer.writeShort(object.identifier()); + buffer.writeByte(object.amount()); + buffer.writeShort(object.data()); + NBT.write(buffer, object.tag()); } } } diff --git a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java index 493dd2e31..2bcd01f0b 100644 --- a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java +++ b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java @@ -17,6 +17,7 @@ */ package com.viaversion.viaversion.bukkit.listeners.protocol1_9to1_8; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -52,7 +53,7 @@ public class HandItemCache extends BukkitRunnable { } public static Item convert(ItemStack itemInHand) { - if (itemInHand == null) return new Item(0, (byte) 0, (short) 0, null); - return new Item(itemInHand.getTypeId(), (byte) itemInHand.getAmount(), itemInHand.getDurability(), null); + if (itemInHand == null) return new DataItem(0, (byte) 0, (short) 0, null); + return new DataItem(itemInHand.getTypeId(), (byte) itemInHand.getAmount(), itemInHand.getDurability(), null); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java index 443986fa1..2bb9aaea9 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java @@ -25,6 +25,7 @@ import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.protocols.protocol1_10to1_9_3.packets.InventoryPackets; @@ -54,6 +55,7 @@ public class Protocol1_10To1_9_3_4 extends AbstractProtocol { - public static void register(Protocol1_10To1_9_3_4 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, item -> { - }, InventoryPackets::toServerItem); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); + public InventoryPackets(Protocol1_10To1_9_3_4 protocol) { + super(protocol); } - public static void toServerItem(Item item) { - if (item == null) return; - boolean newItem = item.getIdentifier() >= 213 && item.getIdentifier() <= 217; + @Override + public void registerPackets() { + registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); + } + + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; + boolean newItem = item.identifier() >= 213 && item.identifier() <= 217; if (newItem) { // Replace server-side unknown items item.setIdentifier((short) 1); item.setData((short) 0); } + return item; } - } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/Protocol1_11_1To1_11.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/Protocol1_11_1To1_11.java index 01fcbeb86..1eafbcc2f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/Protocol1_11_1To1_11.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/Protocol1_11_1To1_11.java @@ -18,19 +18,26 @@ package com.viaversion.viaversion.protocols.protocol1_11_1to1_11; import com.viaversion.viaversion.api.protocol.AbstractProtocol; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.protocols.protocol1_11_1to1_11.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; public class Protocol1_11_1To1_11 extends AbstractProtocol { + private final ItemRewriter itemRewriter = new InventoryPackets(this); + public Protocol1_11_1To1_11() { super(ClientboundPackets1_9_3.class, ClientboundPackets1_9_3.class, ServerboundPackets1_9_3.class, ServerboundPackets1_9_3.class); } @Override protected void registerPackets() { - InventoryPackets.register(this); + itemRewriter.register(); } + @Override + public ItemRewriter getItemRewriter() { + return itemRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/packets/InventoryPackets.java index 28c344f9c..a634548f0 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11_1to1_11/packets/InventoryPackets.java @@ -23,21 +23,25 @@ import com.viaversion.viaversion.protocols.protocol1_11_1to1_11.Protocol1_11_1To import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; import com.viaversion.viaversion.rewriter.ItemRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_11_1To1_11 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, item -> { - }, InventoryPackets::toServerItem); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); + public InventoryPackets(Protocol1_11_1To1_11 protocol) { + super(protocol); } - public static void toServerItem(Item item) { - if (item == null) return; - boolean newItem = item.getIdentifier() == 452; + @Override + public void registerPackets() { + registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); + } + + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; + boolean newItem = item.identifier() == 452; if (newItem) { // Replace server-side unknown items item.setIdentifier((short) 1); item.setData((short) 0); } + return null; } - } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/EntityIdRewriter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/EntityIdRewriter.java index a1c94b4ae..2511f06a7 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/EntityIdRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/EntityIdRewriter.java @@ -139,9 +139,9 @@ public class EntityIdRewriter { public static void toClientItem(Item item, boolean backwards) { if (hasEntityTag(item)) { - toClient(item.getTag().get("EntityTag"), backwards); + toClient(item.tag().get("EntityTag"), backwards); } - if (item != null && item.getAmount() <= 0) item.setAmount((byte) 1); + if (item != null && item.amount() <= 0) item.setAmount(1); } public static void toServerItem(Item item) { @@ -151,7 +151,7 @@ public class EntityIdRewriter { public static void toServerItem(Item item, boolean backwards) { if (!hasEntityTag(item)) return; - CompoundTag entityTag = item.getTag().get("EntityTag"); + CompoundTag entityTag = item.tag().get("EntityTag"); Tag idTag = entityTag.get("id"); if (idTag instanceof StringTag) { StringTag id = (StringTag) idTag; @@ -163,9 +163,9 @@ public class EntityIdRewriter { } private static boolean hasEntityTag(Item item) { - if (item == null || item.getIdentifier() != 383) return false; // Monster Egg + if (item == null || item.identifier() != 383) return false; // Monster Egg - CompoundTag tag = item.getTag(); + CompoundTag tag = item.tag(); if (tag == null) return false; Tag entityTag = tag.get("EntityTag"); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java index 6e1f5a25d..e7eeb6807 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java @@ -28,6 +28,7 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.protocols.protocol1_11to1_10.data.PotionColorMapping; @@ -51,6 +52,7 @@ public class Protocol1_11To1_10 extends AbstractProtocol metadatas, UserConnection connection) { - if (metadata.getValue() instanceof Item) { + if (metadata.getValue() instanceof DataItem) { // Apply rewrite EntityIdRewriter.toClientItem((Item) metadata.getValue()); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/packets/InventoryPackets.java index f4702c4b8..7c56e989c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/packets/InventoryPackets.java @@ -28,14 +28,17 @@ import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPac import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; import com.viaversion.viaversion.rewriter.ItemRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_11To1_10 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, EntityIdRewriter::toClientItem, InventoryPackets::toServerItem); + public InventoryPackets(Protocol1_11To1_10 protocol) { + super(protocol); + } - itemRewriter.registerSetSlot(ClientboundPackets1_9_3.SET_SLOT, Type.ITEM); - itemRewriter.registerWindowItems(ClientboundPackets1_9_3.WINDOW_ITEMS, Type.ITEM_ARRAY); - itemRewriter.registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM); + @Override + public void registerPackets() { + registerSetSlot(ClientboundPackets1_9_3.SET_SLOT, Type.ITEM); + registerWindowItems(ClientboundPackets1_9_3.WINDOW_ITEMS, Type.ITEM_ARRAY); + registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM); // Plugin message Packet -> Trading protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketRemapper() { @@ -68,19 +71,26 @@ public class InventoryPackets { } }); - itemRewriter.registerClickWindow(ServerboundPackets1_9_3.CLICK_WINDOW, Type.ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); + registerClickWindow(ServerboundPackets1_9_3.CLICK_WINDOW, Type.ITEM); + registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); } - public static void toServerItem(Item item) { + @Override + public Item handleItemToClient(Item item) { + EntityIdRewriter.toClientItem(item); + return item; + } + + @Override + public Item handleItemToServer(Item item) { EntityIdRewriter.toServerItem(item); - if (item == null) return; - boolean newItem = item.getIdentifier() >= 218 && item.getIdentifier() <= 234; - newItem |= item.getIdentifier() == 449 || item.getIdentifier() == 450; + if (item == null) return null; + boolean newItem = item.identifier() >= 218 && item.identifier() <= 234; + newItem |= item.identifier() == 449 || item.identifier() == 450; if (newItem) { // Replace server-side unknown items item.setIdentifier((short) 1); item.setData((short) 0); } + return item; } - } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/BedRewriter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/BedRewriter.java index 1c46ee158..0689b05b4 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/BedRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/BedRewriter.java @@ -23,14 +23,14 @@ public class BedRewriter { public static void toClientItem(Item item) { if (item == null) return; - if (item.getIdentifier() == 355 && item.getData() == 0) { + if (item.identifier() == 355 && item.data() == 0) { item.setData((short) 14); } } public static void toServerItem(Item item) { if (item == null) return; - if (item.getIdentifier() == 355 && item.getData() == 14) { + if (item.identifier() == 355 && item.data() == 14) { item.setData((short) 0); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java index 1c31672eb..c29e0eb32 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java @@ -31,6 +31,7 @@ import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.version.Types1_12; import com.viaversion.viaversion.data.entity.EntityTrackerBase; @@ -48,6 +49,7 @@ import com.viaversion.viaversion.rewriter.SoundRewriter; public class Protocol1_12To1_11_1 extends AbstractProtocol { private final EntityRewriter metadataRewriter = new MetadataRewriter1_12To1_11_1(this); + private final ItemRewriter itemRewriter = new InventoryPackets(this); public Protocol1_12To1_11_1() { super(ClientboundPackets1_9_3.class, ClientboundPackets1_12.class, ServerboundPackets1_9_3.class, ServerboundPackets1_12.class); @@ -56,8 +58,7 @@ public class Protocol1_12To1_11_1 extends AbstractProtocol metadatas, UserConnection connection) { - if (metadata.getValue() instanceof Item) { + if (metadata.getValue() instanceof DataItem) { // Apply rewrite BedRewriter.toClientItem((Item) metadata.getValue()); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/packets/InventoryPackets.java index a47840aa6..1d7510d41 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/packets/InventoryPackets.java @@ -30,14 +30,17 @@ import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.providers.Invent import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.rewriter.ItemRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_12To1_11_1 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, BedRewriter::toClientItem, InventoryPackets::toServerItem); + public InventoryPackets(Protocol1_12To1_11_1 protocol) { + super(protocol); + } - itemRewriter.registerSetSlot(ClientboundPackets1_9_3.SET_SLOT, Type.ITEM); - itemRewriter.registerWindowItems(ClientboundPackets1_9_3.WINDOW_ITEMS, Type.ITEM_ARRAY); - itemRewriter.registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM); + @Override + public void registerPackets() { + registerSetSlot(ClientboundPackets1_9_3.SET_SLOT, Type.ITEM); + registerWindowItems(ClientboundPackets1_9_3.WINDOW_ITEMS, Type.ITEM_ARRAY); + registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM); // Plugin message Packet -> Trading protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketRemapper() { @@ -113,17 +116,20 @@ public class InventoryPackets { ); // Creative Inventory Action - itemRewriter.registerCreativeInvAction(ServerboundPackets1_12.CREATIVE_INVENTORY_ACTION, Type.ITEM); + registerCreativeInvAction(ServerboundPackets1_12.CREATIVE_INVENTORY_ACTION, Type.ITEM); } - public static void toServerItem(Item item) { + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; BedRewriter.toServerItem(item); - if (item == null) return; - boolean newItem = item.getIdentifier() >= 235 && item.getIdentifier() <= 252; - newItem |= item.getIdentifier() == 453; + + boolean newItem = item.identifier() >= 235 && item.identifier() <= 252; + newItem |= item.identifier() == 453; if (newItem) { // Replace server-side unknown items item.setIdentifier((short) 1); item.setData((short) 0); } + return item; } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java index 0d6c7238d..0499441fd 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java @@ -28,6 +28,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_13_1to1_13.metadata.MetadataRewriter1_13_1To1_13; @@ -45,6 +46,7 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol { + Item item = wrapper.get(Type.FLAT_ITEM, 0); + itemRewriter.handleItemToServer(item); }); handler(new PacketHandler() { @Override @@ -166,4 +165,9 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol metadatas, UserConnection connection) { // 1.13 changed item to flat item (no data) if (metadata.metaType() == MetaType1_13.Slot) { - InventoryPackets.toClient((Item) metadata.getValue()); + protocol.getItemRewriter().handleItemToClient((Item) metadata.getValue()); } else if (metadata.metaType() == MetaType1_13.BlockID) { // Convert to new block id int data = (int) metadata.getValue(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java index af1a50992..20eb20b19 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java @@ -17,7 +17,6 @@ */ package com.viaversion.viaversion.protocols.protocol1_13_1to1_13.packets; -import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; @@ -29,14 +28,18 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.RecipeRewri import com.viaversion.viaversion.rewriter.ItemRewriter; import com.viaversion.viaversion.rewriter.RecipeRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_13_1To1_13 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); - itemRewriter.registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_ITEM); - itemRewriter.registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_ITEM_ARRAY); - itemRewriter.registerAdvancements(ClientboundPackets1_13.ADVANCEMENTS, Type.FLAT_ITEM); - itemRewriter.registerSetCooldown(ClientboundPackets1_13.COOLDOWN); + public InventoryPackets(Protocol1_13_1To1_13 protocol) { + super(protocol); + } + + @Override + public void registerPackets() { + registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_ITEM); + registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_ITEM_ARRAY); + registerAdvancements(ClientboundPackets1_13.ADVANCEMENTS, Type.FLAT_ITEM); + registerSetCooldown(ClientboundPackets1_13.COOLDOWN); protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() { @Override @@ -52,14 +55,14 @@ public class InventoryPackets { int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { // Input Item - toClient(wrapper.passthrough(Type.FLAT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_ITEM)); // Output Item - InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_ITEM)); boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item if (secondItem) { // Second Item - InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_ITEM)); } wrapper.passthrough(Type.BOOLEAN); // Trade disabled @@ -72,9 +75,9 @@ public class InventoryPackets { } }); - itemRewriter.registerEntityEquipment(ClientboundPackets1_13.ENTITY_EQUIPMENT, Type.FLAT_ITEM); + registerEntityEquipment(ClientboundPackets1_13.ENTITY_EQUIPMENT, Type.FLAT_ITEM); - RecipeRewriter recipeRewriter = new RecipeRewriter1_13_2(protocol, InventoryPackets::toClient); + RecipeRewriter recipeRewriter = new RecipeRewriter1_13_2(protocol); protocol.registerClientbound(ClientboundPackets1_13.DECLARE_RECIPES, new PacketRemapper() { @Override public void registerMap() { @@ -90,19 +93,9 @@ public class InventoryPackets { } }); - itemRewriter.registerClickWindow(ServerboundPackets1_13.CLICK_WINDOW, Type.FLAT_ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, Type.FLAT_ITEM); + registerClickWindow(ServerboundPackets1_13.CLICK_WINDOW, Type.FLAT_ITEM); + registerCreativeInvAction(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, Type.FLAT_ITEM); - itemRewriter.registerSpawnParticle(ClientboundPackets1_13.SPAWN_PARTICLE, Type.FLAT_ITEM, Type.FLOAT); - } - - public static void toClient(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_13_1To1_13.MAPPINGS.getNewItemId(item.getIdentifier())); - } - - public static void toServer(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_13_1To1_13.MAPPINGS.getOldItemId(item.getIdentifier())); + registerSpawnParticle(ClientboundPackets1_13.SPAWN_PARTICLE, Type.FLAT_ITEM, Type.FLOAT); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java index 11fb718ad..0f4940027 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java @@ -25,6 +25,7 @@ import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.platform.providers.ViaProviders; import com.viaversion.viaversion.api.protocol.AbstractProtocol; @@ -34,6 +35,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1; @@ -73,6 +75,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol SCOREBOARD_TEAM_NAME_REWRITE = new HashMap<>(); private static final Set FORMATTING_CODES = Sets.newHashSet('k', 'l', 'm', 'n', 'o', 'r'); private final EntityRewriter entityRewriter = new MetadataRewriter1_13To1_12_2(this); + private final ItemRewriter itemRewriter = new InventoryPackets(this); static { SCOREBOARD_TEAM_NAME_REWRITE.put('0', 'g'); @@ -157,11 +160,10 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol { private static final String NBT_TAG_NAME = "ViaVersion|" + Protocol1_13To1_12_2.class.getSimpleName(); - public static void register(Protocol1_13To1_12_2 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); + public InventoryPackets(Protocol1_13To1_12_2 protocol) { + super(protocol); + } + @Override + public void registerPackets() { protocol.registerClientbound(ClientboundPackets1_12_1.SET_SLOT, new PacketRemapper() { @Override public void registerMap() { @@ -62,7 +65,7 @@ public class InventoryPackets { map(Type.SHORT); // 1 - Slot ID map(Type.ITEM, Type.FLAT_ITEM); // 2 - Slot Value - handler(itemRewriter.itemToClientHandler(Type.FLAT_ITEM)); + handler(itemToClientHandler(Type.FLAT_ITEM)); } }); protocol.registerClientbound(ClientboundPackets1_12_1.WINDOW_ITEMS, new PacketRemapper() { @@ -71,7 +74,7 @@ public class InventoryPackets { map(Type.UNSIGNED_BYTE); // 0 - Window ID map(Type.ITEM_ARRAY, Type.FLAT_ITEM_ARRAY); // 1 - Window Values - handler(itemRewriter.itemArrayHandler(Type.FLAT_ITEM_ARRAY)); + handler(itemArrayHandler(Type.FLAT_ITEM_ARRAY)); } }); protocol.registerClientbound(ClientboundPackets1_12_1.WINDOW_PROPERTY, new PacketRemapper() { @@ -142,18 +145,18 @@ public class InventoryPackets { for (int i = 0; i < size; i++) { // Input Item Item input = wrapper.read(Type.ITEM); - InventoryPackets.toClient(input); + handleItemToClient(input); wrapper.write(Type.FLAT_ITEM, input); // Output Item Item output = wrapper.read(Type.ITEM); - InventoryPackets.toClient(output); + handleItemToClient(output); wrapper.write(Type.FLAT_ITEM, output); boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item if (secondItem) { // Second Item Item second = wrapper.read(Type.ITEM); - InventoryPackets.toClient(second); + handleItemToClient(second); wrapper.write(Type.FLAT_ITEM, second); } @@ -203,7 +206,7 @@ public class InventoryPackets { map(Type.VAR_INT); // 1 - Slot ID map(Type.ITEM, Type.FLAT_ITEM); // 2 - Item - handler(itemRewriter.itemToClientHandler(Type.FLAT_ITEM)); + handler(itemToClientHandler(Type.FLAT_ITEM)); } }); @@ -218,7 +221,7 @@ public class InventoryPackets { map(Type.VAR_INT); // 4 - Mode map(Type.FLAT_ITEM, Type.ITEM); // 5 - Clicked Item - handler(itemRewriter.itemToServerHandler(Type.ITEM)); + handler(itemToServerHandler(Type.ITEM)); } }); @@ -263,37 +266,36 @@ public class InventoryPackets { map(Type.SHORT); // 0 - Slot map(Type.FLAT_ITEM, Type.ITEM); // 1 - Clicked Item - handler(itemRewriter.itemToServerHandler(Type.ITEM)); + handler(itemToServerHandler(Type.ITEM)); } }); } - // TODO CLEANUP / SMARTER REWRITE SYSTEM - // TODO Rewrite identifiers - public static void toClient(Item item) { - if (item == null) return; - CompoundTag tag = item.getTag(); + @Override + public Item handleItemToClient(Item item) { + if (item == null) return null; + CompoundTag tag = item.tag(); // Save original id - int originalId = (item.getIdentifier() << 16 | item.getData() & 0xFFFF); + int originalId = (item.identifier() << 16 | item.data() & 0xFFFF); - int rawId = (item.getIdentifier() << 4 | item.getData() & 0xF); + int rawId = (item.identifier() << 4 | item.data() & 0xF); // NBT Additions - if (isDamageable(item.getIdentifier())) { + if (isDamageable(item.identifier())) { if (tag == null) item.setTag(tag = new CompoundTag()); - tag.put("Damage", new IntTag(item.getData())); + tag.put("Damage", new IntTag(item.data())); } - if (item.getIdentifier() == 358) { // map + if (item.identifier() == 358) { // map if (tag == null) item.setTag(tag = new CompoundTag()); - tag.put("map", new IntTag(item.getData())); + tag.put("map", new IntTag(item.data())); } // NBT Changes if (tag != null) { // Invert banner/shield color id - boolean banner = item.getIdentifier() == 425; - if (banner || item.getIdentifier() == 442) { + boolean banner = item.identifier() == 425; + if (banner || item.identifier() == 442) { if (tag.get("BlockEntityTag") instanceof CompoundTag) { CompoundTag blockEntityTag = tag.get("BlockEntityTag"); if (blockEntityTag.get("Base") instanceof IntTag) { @@ -409,7 +411,7 @@ public class InventoryPackets { tag.put("CanDestroy", newCanDestroy); } // Handle SpawnEggs - if (item.getIdentifier() == 383) { + if (item.identifier() == 383) { if (tag.get("EntityTag") instanceof CompoundTag) { CompoundTag entityTag = tag.get("EntityTag"); if (entityTag.get("id") instanceof StringTag) { @@ -437,17 +439,17 @@ public class InventoryPackets { } if (!Protocol1_13To1_12_2.MAPPINGS.getItemMappings().containsKey(rawId)) { - if (!isDamageable(item.getIdentifier()) && item.getIdentifier() != 358) { // Map + if (!isDamageable(item.identifier()) && item.identifier() != 358) { // Map if (tag == null) item.setTag(tag = new CompoundTag()); tag.put(NBT_TAG_NAME, new IntTag(originalId)); // Data will be lost, saving original id } - if (item.getIdentifier() == 31 && item.getData() == 0) { // Shrub was removed + if (item.identifier() == 31 && item.data() == 0) { // Shrub was removed rawId = 32 << 4; // Dead Bush } else if (Protocol1_13To1_12_2.MAPPINGS.getItemMappings().containsKey(rawId & ~0xF)) { rawId &= ~0xF; // Remove data } else { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { - Via.getPlatform().getLogger().warning("Failed to get 1.13 item for " + item.getIdentifier()); + Via.getPlatform().getLogger().warning("Failed to get 1.13 item for " + item.identifier()); } rawId = 16; // Stone } @@ -455,6 +457,7 @@ public class InventoryPackets { item.setIdentifier(Protocol1_13To1_12_2.MAPPINGS.getItemMappings().get(rawId)); item.setData((short) 0); + return item; } public static String getNewPluginChannelId(String old) { @@ -485,13 +488,14 @@ public class InventoryPackets { } } - public static void toServer(Item item) { - if (item == null) return; + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; Integer rawId = null; boolean gotRawIdFromTag = false; - CompoundTag tag = item.getTag(); + CompoundTag tag = item.tag(); // Use tag to get original ID and data if (tag != null) { @@ -505,7 +509,7 @@ public class InventoryPackets { } if (rawId == null) { - int oldId = Protocol1_13To1_12_2.MAPPINGS.getItemMappings().inverse().get(item.getIdentifier()); + int oldId = Protocol1_13To1_12_2.MAPPINGS.getItemMappings().inverse().get(item.identifier()); if (oldId != -1) { // Handle spawn eggs Optional eggEntityId = SpawnEggRewriter.getEntityId(oldId); @@ -526,7 +530,7 @@ public class InventoryPackets { if (rawId == null) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { - Via.getPlatform().getLogger().warning("Failed to get 1.12 item for " + item.getIdentifier()); + Via.getPlatform().getLogger().warning("Failed to get 1.12 item for " + item.identifier()); } rawId = 0x10000; // Stone } @@ -536,7 +540,7 @@ public class InventoryPackets { // NBT changes if (tag != null) { - if (isDamageable(item.getIdentifier())) { + if (isDamageable(item.identifier())) { if (tag.get("Damage") instanceof IntTag) { if (!gotRawIdFromTag) { item.setData((short) (int) tag.get("Damage").getValue()); @@ -545,7 +549,7 @@ public class InventoryPackets { } } - if (item.getIdentifier() == 358) { // map + if (item.identifier() == 358) { // map if (tag.get("map") instanceof IntTag) { if (!gotRawIdFromTag) { item.setData((short) (int) tag.get("map").getValue()); @@ -554,7 +558,7 @@ public class InventoryPackets { } } - if (item.getIdentifier() == 442 || item.getIdentifier() == 425) { // shield / banner + if (item.identifier() == 442 || item.identifier() == 425) { // shield / banner if (tag.get("BlockEntityTag") instanceof CompoundTag) { CompoundTag blockEntityTag = tag.get("BlockEntityTag"); if (blockEntityTag.get("Base") instanceof IntTag) { @@ -669,6 +673,7 @@ public class InventoryPackets { tag.put("CanDestroy", newCanDestroy); } } + return item; } public static String getOldPluginChannelId(String newId) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java index 9e0bf631f..6facf5a17 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java @@ -23,6 +23,7 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13; @@ -44,6 +45,7 @@ public class Protocol1_14To1_13_2 extends AbstractProtocol { private static final String NBT_TAG_NAME = "ViaVersion|" + Protocol1_14To1_13_2.class.getSimpleName(); private static final Set REMOVED_RECIPE_TYPES = Sets.newHashSet("crafting_special_banneraddpattern", "crafting_special_repairitem"); private static final ComponentRewriter COMPONENT_REWRITER = new ComponentRewriter() { @@ -59,11 +59,14 @@ public class InventoryPackets { } }; - public static void register(Protocol protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); + public InventoryPackets(Protocol1_14To1_13_2 protocol) { + super(protocol); + } - itemRewriter.registerSetCooldown(ClientboundPackets1_13.COOLDOWN); - itemRewriter.registerAdvancements(ClientboundPackets1_13.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); + @Override + public void registerPackets() { + registerSetCooldown(ClientboundPackets1_13.COOLDOWN); + registerAdvancements(ClientboundPackets1_13.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); protocol.registerClientbound(ClientboundPackets1_13.OPEN_WINDOW, null, new PacketRemapper() { @Override @@ -141,8 +144,8 @@ public class InventoryPackets { } }); - itemRewriter.registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_VAR_INT_ITEM); protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() { @Override @@ -165,14 +168,14 @@ public class InventoryPackets { int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { // Input Item - toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Output Item - toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item if (secondItem) { // Second Item - toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); } wrapper.passthrough(Type.BOOLEAN); // Trade disabled @@ -197,9 +200,9 @@ public class InventoryPackets { } }); - itemRewriter.registerEntityEquipment(ClientboundPackets1_13.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); + registerEntityEquipment(ClientboundPackets1_13.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); - RecipeRewriter recipeRewriter = new RecipeRewriter1_13_2(protocol, InventoryPackets::toClient); + RecipeRewriter recipeRewriter = new RecipeRewriter1_13_2(protocol); protocol.registerClientbound(ClientboundPackets1_13.DECLARE_RECIPES, new PacketRemapper() { @Override public void registerMap() { @@ -224,7 +227,7 @@ public class InventoryPackets { }); - itemRewriter.registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); protocol.registerServerbound(ServerboundPackets1_14.SELECT_TRADE, new PacketRemapper() { @Override @@ -242,26 +245,27 @@ public class InventoryPackets { resyncPacket.write(Type.VAR_INT, 5); // 4 - Mode - Drag CompoundTag tag = new CompoundTag(); tag.put("force_resync", new DoubleTag(Double.NaN)); // Tags with NaN are not equal - resyncPacket.write(Type.FLAT_VAR_INT_ITEM, new Item(1, (byte) 1, (short) 0, tag)); // 5 - Clicked Item + resyncPacket.write(Type.FLAT_VAR_INT_ITEM, new DataItem(1, (byte) 1, (short) 0, tag)); // 5 - Clicked Item resyncPacket.scheduleSendToServer(Protocol1_14To1_13_2.class); } }); } }); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSpawnParticle(ClientboundPackets1_13.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.FLOAT); + registerSpawnParticle(ClientboundPackets1_13.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.FLOAT); } - public static void toClient(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_14To1_13_2.MAPPINGS.getNewItemId(item.getIdentifier())); + @Override + public Item handleItemToClient(Item item) { + if (item == null) return null; + item.setIdentifier(Protocol1_14To1_13_2.MAPPINGS.getNewItemId(item.identifier())); - if (item.getTag() == null) return; + if (item.tag() == null) return item; // Display Lore now uses JSON - Tag displayTag = item.getTag().get("display"); + Tag displayTag = item.tag().get("display"); if (displayTag instanceof CompoundTag) { CompoundTag display = (CompoundTag) displayTag; Tag loreTag = display.get("Lore"); @@ -276,16 +280,18 @@ public class InventoryPackets { } } } + return item; } - public static void toServer(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_14To1_13_2.MAPPINGS.getOldItemId(item.getIdentifier())); + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; + item.setIdentifier(Protocol1_14To1_13_2.MAPPINGS.getOldItemId(item.identifier())); - if (item.getTag() == null) return; + if (item.tag() == null) return item; // Display Name now uses JSON - Tag displayTag = item.getTag().get("display"); + Tag displayTag = item.tag().get("display"); if (displayTag instanceof CompoundTag) { CompoundTag display = (CompoundTag) displayTag; Tag loreTag = display.get("Lore"); @@ -303,5 +309,6 @@ public class InventoryPackets { } } } + return item; } } \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java index ae9ec519d..39edcf712 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java @@ -56,12 +56,12 @@ public class PlayerPackets { @Override public void handle(PacketWrapper wrapper) throws Exception { Item item = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); - InventoryPackets.toServer(item); + protocol.getItemRewriter().handleItemToServer(item); // Client limit when editing a book was upped from 50 to 100 in 1.14, but some anti-exploit plugins ban with a size higher than the old client limit if (Via.getConfig().isTruncate1_14Books()) { if (item == null) return; - CompoundTag tag = item.getTag(); + CompoundTag tag = item.tag(); if (tag == null) return; Tag pages = tag.get("pages"); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java index f3068de0e..d18d4281f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java @@ -22,6 +22,7 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; @@ -41,6 +42,7 @@ public class Protocol1_15To1_14_4 extends AbstractProtocol InventoryPackets.toServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + handler(wrapper -> itemRewriter.handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); } }); @@ -97,4 +99,9 @@ public class Protocol1_15To1_14_4 extends AbstractProtocol metadatas, UserConnection connection) throws Exception { if (metadata.metaType() == MetaType1_14.Slot) { - InventoryPackets.toClient((Item) metadata.getValue()); + protocol.getItemRewriter().handleItemToClient((Item) metadata.getValue()); } else if (metadata.metaType() == MetaType1_14.BlockID) { // Convert to new block id int data = (int) metadata.getValue(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java index b0b93c508..645d4a04f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java @@ -17,7 +17,6 @@ */ package com.viaversion.viaversion.protocols.protocol1_15to1_14_4.packets; -import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; @@ -25,31 +24,24 @@ import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.data.RecipeRewri import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4; import com.viaversion.viaversion.rewriter.ItemRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_15To1_14_4 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); - - itemRewriter.registerSetCooldown(ClientboundPackets1_14.COOLDOWN); - itemRewriter.registerWindowItems(ClientboundPackets1_14.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerTradeList(ClientboundPackets1_14.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSetSlot(ClientboundPackets1_14.SET_SLOT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerEntityEquipment(ClientboundPackets1_14.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerAdvancements(ClientboundPackets1_14.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - - new RecipeRewriter1_14(protocol, InventoryPackets::toClient).registerDefaultHandler(ClientboundPackets1_14.DECLARE_RECIPES); - - itemRewriter.registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + public InventoryPackets(Protocol1_15To1_14_4 protocol) { + super(protocol); } - public static void toClient(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_15To1_14_4.MAPPINGS.getNewItemId(item.getIdentifier())); - } + @Override + public void registerPackets() { + registerSetCooldown(ClientboundPackets1_14.COOLDOWN); + registerWindowItems(ClientboundPackets1_14.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + registerTradeList(ClientboundPackets1_14.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); + registerSetSlot(ClientboundPackets1_14.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerEntityEquipment(ClientboundPackets1_14.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); + registerAdvancements(ClientboundPackets1_14.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - public static void toServer(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_15To1_14_4.MAPPINGS.getOldItemId(item.getIdentifier())); + new RecipeRewriter1_14(protocol).registerDefaultHandler(ClientboundPackets1_14.DECLARE_RECIPES); + + registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java index e9305e8bb..6b9d92d0f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java @@ -106,7 +106,7 @@ public class WorldPackets { int data = wrapper.passthrough(Type.VAR_INT); wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(data)); } else if (id == 32) { - InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + protocol.getItemRewriter().handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); } } }); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java index 64357cb8a..8644efc26 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java @@ -22,6 +22,7 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.data.MappingData; @@ -40,6 +41,7 @@ public class Protocol1_16_2To1_16_1 extends AbstractProtocol metadatas, UserConnection connection) throws Exception { if (metadata.metaType() == MetaType1_14.Slot) { - InventoryPackets.toClient((Item) metadata.getValue()); + protocol.getItemRewriter().handleItemToClient((Item) metadata.getValue()); } else if (metadata.metaType() == MetaType1_14.BlockID) { int data = (int) metadata.getValue(); metadata.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/InventoryPackets.java index e75f6bc03..e25522523 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/InventoryPackets.java @@ -17,7 +17,6 @@ */ package com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.packets; -import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.Protocol1_16_2To1_16_1; @@ -26,17 +25,20 @@ import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.ClientboundPacke import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16; import com.viaversion.viaversion.rewriter.ItemRewriter; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_16_2To1_16_1 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); + public InventoryPackets(Protocol1_16_2To1_16_1 protocol) { + super(protocol); + } - itemRewriter.registerSetCooldown(ClientboundPackets1_16.COOLDOWN); - itemRewriter.registerWindowItems(ClientboundPackets1_16.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerTradeList(ClientboundPackets1_16.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSetSlot(ClientboundPackets1_16.SET_SLOT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerEntityEquipmentArray(ClientboundPackets1_16.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerAdvancements(ClientboundPackets1_16.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); + @Override + public void registerPackets() { + registerSetCooldown(ClientboundPackets1_16.COOLDOWN); + registerWindowItems(ClientboundPackets1_16.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + registerTradeList(ClientboundPackets1_16.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); + registerSetSlot(ClientboundPackets1_16.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerEntityEquipmentArray(ClientboundPackets1_16.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); + registerAdvancements(ClientboundPackets1_16.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); protocol.registerClientbound(ClientboundPackets1_16.UNLOCK_RECIPES, new PacketRemapper() { @Override @@ -56,27 +58,17 @@ public class InventoryPackets { } }); - new RecipeRewriter1_16(protocol, InventoryPackets::toClient).registerDefaultHandler(ClientboundPackets1_16.DECLARE_RECIPES); + new RecipeRewriter1_16(protocol).registerDefaultHandler(ClientboundPackets1_16.DECLARE_RECIPES); - itemRewriter.registerClickWindow(ServerboundPackets1_16_2.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + registerClickWindow(ServerboundPackets1_16_2.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); protocol.registerServerbound(ServerboundPackets1_16_2.EDIT_BOOK, new PacketRemapper() { @Override public void registerMap() { - handler(wrapper -> InventoryPackets.toServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); } }); - itemRewriter.registerSpawnParticle(ClientboundPackets1_16.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); - } - - public static void toClient(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_16_2To1_16_1.MAPPINGS.getNewItemId(item.getIdentifier())); - } - - public static void toServer(Item item) { - if (item == null) return; - item.setIdentifier(Protocol1_16_2To1_16_1.MAPPINGS.getOldItemId(item.getIdentifier())); + registerSpawnParticle(ClientboundPackets1_16.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java index 2b593a01f..a6041f10e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java @@ -28,6 +28,7 @@ import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; @@ -56,6 +57,7 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol metadatas, UserConnection connection) throws Exception { if (metadata.metaType() == MetaType1_14.Slot) { - InventoryPackets.toClient((Item) metadata.getValue()); + protocol.getItemRewriter().handleItemToClient((Item) metadata.getValue()); } else if (metadata.metaType() == MetaType1_14.BlockID) { int data = (int) metadata.getValue(); metadata.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java index 9eb23254c..91b887207 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java @@ -37,11 +37,14 @@ import com.viaversion.viaversion.rewriter.ItemRewriter; import java.util.UUID; -public class InventoryPackets { +public class InventoryPackets extends ItemRewriter { - public static void register(Protocol1_16To1_15_2 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); + public InventoryPackets(Protocol1_16To1_15_2 protocol) { + super(protocol); + } + @Override + public void registerPackets() { protocol.registerClientbound(ClientboundPackets1_15.OPEN_WINDOW, new PacketRemapper() { @Override public void registerMap() { @@ -92,11 +95,11 @@ public class InventoryPackets { } }); - itemRewriter.registerSetCooldown(ClientboundPackets1_15.COOLDOWN); - itemRewriter.registerWindowItems(ClientboundPackets1_15.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerTradeList(ClientboundPackets1_15.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSetSlot(ClientboundPackets1_15.SET_SLOT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerAdvancements(ClientboundPackets1_15.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); + registerSetCooldown(ClientboundPackets1_15.COOLDOWN); + registerWindowItems(ClientboundPackets1_15.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + registerTradeList(ClientboundPackets1_15.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); + registerSetSlot(ClientboundPackets1_15.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerAdvancements(ClientboundPackets1_15.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); protocol.registerClientbound(ClientboundPackets1_15.ENTITY_EQUIPMENT, new PacketRemapper() { @Override @@ -106,15 +109,15 @@ public class InventoryPackets { handler(wrapper -> { int slot = wrapper.read(Type.VAR_INT); wrapper.write(Type.BYTE, (byte) slot); - InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); }); } }); - new RecipeRewriter1_14(protocol, InventoryPackets::toClient).registerDefaultHandler(ClientboundPackets1_15.DECLARE_RECIPES); + new RecipeRewriter1_14(protocol).registerDefaultHandler(ClientboundPackets1_15.DECLARE_RECIPES); - itemRewriter.registerClickWindow(ServerboundPackets1_16.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_16.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + registerClickWindow(ServerboundPackets1_16.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + registerCreativeInvAction(ServerboundPackets1_16.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); protocol.registerServerbound(ServerboundPackets1_16.CLOSE_WINDOW, new PacketRemapper() { @Override @@ -131,18 +134,19 @@ public class InventoryPackets { protocol.registerServerbound(ServerboundPackets1_16.EDIT_BOOK, new PacketRemapper() { @Override public void registerMap() { - handler(wrapper -> InventoryPackets.toServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); } }); - itemRewriter.registerSpawnParticle(ClientboundPackets1_15.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); + registerSpawnParticle(ClientboundPackets1_15.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); } - public static void toClient(Item item) { - if (item == null) return; + @Override + public Item handleItemToClient(Item item) { + if (item == null) return null; - if (item.getIdentifier() == 771 && item.getTag() != null) { - CompoundTag tag = item.getTag(); + if (item.identifier() == 771 && item.tag() != null) { + CompoundTag tag = item.tag(); Tag ownerTag = tag.get("SkullOwner"); if (ownerTag instanceof CompoundTag) { CompoundTag ownerCompundTag = (CompoundTag) ownerTag; @@ -155,16 +159,18 @@ public class InventoryPackets { } oldToNewAttributes(item); - item.setIdentifier(Protocol1_16To1_15_2.MAPPINGS.getNewItemId(item.getIdentifier())); + item.setIdentifier(Protocol1_16To1_15_2.MAPPINGS.getNewItemId(item.identifier())); + return item; } - public static void toServer(Item item) { - if (item == null) return; + @Override + public Item handleItemToServer(Item item) { + if (item == null) return null; - item.setIdentifier(Protocol1_16To1_15_2.MAPPINGS.getOldItemId(item.getIdentifier())); + item.setIdentifier(Protocol1_16To1_15_2.MAPPINGS.getOldItemId(item.identifier())); - if (item.getIdentifier() == 771 && item.getTag() != null) { - CompoundTag tag = item.getTag(); + if (item.identifier() == 771 && item.tag() != null) { + CompoundTag tag = item.tag(); Tag ownerTag = tag.get("SkullOwner"); if (ownerTag instanceof CompoundTag) { CompoundTag ownerCompundTag = (CompoundTag) ownerTag; @@ -177,12 +183,13 @@ public class InventoryPackets { } newToOldAttributes(item); + return item; } public static void oldToNewAttributes(Item item) { - if (item.getTag() == null) return; + if (item.tag() == null) return; - ListTag attributes = item.getTag().get("AttributeModifiers"); + ListTag attributes = item.tag().get("AttributeModifiers"); if (attributes == null) return; for (Tag tag : attributes) { @@ -199,9 +206,9 @@ public class InventoryPackets { } public static void newToOldAttributes(Item item) { - if (item.getTag() == null) return; + if (item.tag() == null) return; - ListTag attributes = item.getTag().get("AttributeModifiers"); + ListTag attributes = item.tag().get("AttributeModifiers"); if (attributes == null) return; for (Tag tag : attributes) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java index 7bcfb84ef..6ce94032c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java @@ -26,6 +26,7 @@ import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; +import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; @@ -45,6 +46,7 @@ public class Protocol1_17To1_16_4 extends AbstractProtocol { - public static void register(Protocol1_17To1_16_4 protocol) { - ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer); + public InventoryPackets(Protocol1_17To1_16_4 protocol) { + super(protocol); + } - itemRewriter.registerSetCooldown(ClientboundPackets1_16_2.COOLDOWN); - itemRewriter.registerWindowItems(ClientboundPackets1_16_2.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerTradeList(ClientboundPackets1_16_2.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSetSlot(ClientboundPackets1_16_2.SET_SLOT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerEntityEquipmentArray(ClientboundPackets1_16_2.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSpawnParticle(ClientboundPackets1_16_2.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); + @Override + public void registerPackets() { + registerSetCooldown(ClientboundPackets1_16_2.COOLDOWN); + registerWindowItems(ClientboundPackets1_16_2.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + registerTradeList(ClientboundPackets1_16_2.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); + registerSetSlot(ClientboundPackets1_16_2.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); + registerEntityEquipmentArray(ClientboundPackets1_16_2.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); + registerSpawnParticle(ClientboundPackets1_16_2.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); - new RecipeRewriter1_16(protocol, InventoryPackets::toClient).registerDefaultHandler(ClientboundPackets1_16_2.DECLARE_RECIPES); + new RecipeRewriter1_16(protocol).registerDefaultHandler(ClientboundPackets1_16_2.DECLARE_RECIPES); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); protocol.registerServerbound(ServerboundPackets1_17.EDIT_BOOK, new PacketRemapper() { @Override public void registerMap() { - handler(wrapper -> InventoryPackets.toServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); } }); @@ -80,7 +83,7 @@ public class InventoryPackets { item = null; } else { // Use the item sent - toServer(item); + handleItemToServer(item); } wrapper.write(Type.FLAT_VAR_INT_ITEM, item); @@ -133,16 +136,4 @@ public class InventoryPackets { } }); } - - public static void toClient(Item item) { - if (item == null) return; - - item.setIdentifier(Protocol1_17To1_16_4.MAPPINGS.getNewItemId(item.getIdentifier())); - } - - public static void toServer(Item item) { - if (item == null) return; - - item.setIdentifier(Protocol1_17To1_16_4.MAPPINGS.getOldItemId(item.getIdentifier())); - } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java index 19ec5f382..c09342b86 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java @@ -158,8 +158,8 @@ public class ItemRewriter { public static void toServer(Item item) { if (item != null) { - if (item.getIdentifier() == 383 && item.getData() == 0) { // Monster Egg - CompoundTag tag = item.getTag(); + if (item.identifier() == 383 && item.data() == 0) { // Monster Egg + CompoundTag tag = item.tag(); int data = 0; if (tag != null && tag.get("EntityTag") instanceof CompoundTag) { CompoundTag entityTag = tag.get("EntityTag"); @@ -173,8 +173,8 @@ public class ItemRewriter { item.setTag(tag); item.setData((short) data); } - if (item.getIdentifier() == 373) { // Potion - CompoundTag tag = item.getTag(); + if (item.identifier() == 373) { // Potion + CompoundTag tag = item.tag(); int data = 0; if (tag != null && tag.get("Potion") instanceof StringTag) { StringTag potion = tag.get("Potion"); @@ -188,8 +188,8 @@ public class ItemRewriter { item.setData((short) data); } // Splash potion - if (item.getIdentifier() == 438) { - CompoundTag tag = item.getTag(); + if (item.identifier() == 438) { + CompoundTag tag = item.tag(); int data = 0; item.setIdentifier(373); // Potion if (tag != null && tag.get("Potion") instanceof StringTag) { @@ -204,9 +204,9 @@ public class ItemRewriter { item.setData((short) data); } - boolean newItem = item.getIdentifier() >= 198 && item.getIdentifier() <= 212; - newItem |= item.getIdentifier() == 397 && item.getData() == 5; - newItem |= item.getIdentifier() >= 432 && item.getIdentifier() <= 448; + boolean newItem = item.identifier() >= 198 && item.identifier() <= 212; + newItem |= item.identifier() == 397 && item.data() == 5; + newItem |= item.identifier() >= 432 && item.identifier() <= 448; if (newItem) { // Replace server-side unknown items item.setIdentifier((short) 1); item.setData((short) 0); @@ -215,11 +215,11 @@ public class ItemRewriter { } public static void rewriteBookToServer(Item item) { - int id = item.getIdentifier(); + int id = item.identifier(); if (id != 387) { return; } - CompoundTag tag = item.getTag(); + CompoundTag tag = item.tag(); ListTag pages = tag.get("pages"); if (pages == null) { // is this even possible? return; @@ -251,13 +251,13 @@ public class ItemRewriter { public static void toClient(Item item) { if (item != null) { - if (item.getIdentifier() == 383 && item.getData() != 0) { // Monster Egg - CompoundTag tag = item.getTag(); + if (item.identifier() == 383 && item.data() != 0) { // Monster Egg + CompoundTag tag = item.tag(); if (tag == null) { tag = new CompoundTag(); } CompoundTag entityTag = new CompoundTag(); - String entityName = ENTTIY_ID_TO_NAME.get((int) item.getData()); + String entityName = ENTTIY_ID_TO_NAME.get((int) item.data()); if (entityName != null) { StringTag id = new StringTag(entityName); entityTag.put("id", id); @@ -266,23 +266,23 @@ public class ItemRewriter { item.setTag(tag); item.setData((short) 0); } - if (item.getIdentifier() == 373) { // Potion - CompoundTag tag = item.getTag(); + if (item.identifier() == 373) { // Potion + CompoundTag tag = item.tag(); if (tag == null) { tag = new CompoundTag(); } - if (item.getData() >= 16384) { + if (item.data() >= 16384) { item.setIdentifier(438); // splash id - item.setData((short) (item.getData() - 8192)); + item.setData((short) (item.data() - 8192)); } - String name = potionNameFromDamage(item.getData()); + String name = potionNameFromDamage(item.data()); StringTag potion = new StringTag("minecraft:" + name); tag.put("Potion", potion); item.setTag(tag); item.setData((short) 0); } - if (item.getIdentifier() == 387) { // WRITTEN_BOOK - CompoundTag tag = item.getTag(); + if (item.identifier() == 387) { // WRITTEN_BOOK + CompoundTag tag = item.tag(); if (tag == null) { tag = new CompoundTag(); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/EntityPackets.java index fcccc8d8d..7189b47dd 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/EntityPackets.java @@ -187,7 +187,7 @@ public class EntityPackets { Item stack = wrapper.get(Type.ITEM, 0); if (stack != null) { - if (Protocol1_9To1_8.isSword(stack.getIdentifier())) { + if (Protocol1_9To1_8.isSword(stack.identifier())) { entityTracker.getValidBlocking().add(entityID); return; } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/InventoryPackets.java index 9173c820d..35e9aefae 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/InventoryPackets.java @@ -126,7 +126,7 @@ public class InventoryPackets { short windowId = wrapper.get(Type.BYTE, 0); // Store item in slot - inventoryTracker.setItemId(windowId, slotID, stack == null ? 0 : stack.getIdentifier()); + inventoryTracker.setItemId(windowId, slotID, stack == null ? 0 : stack.identifier()); // Sync shield item in offhand with main hand entityTracker.syncShieldWithSword(); @@ -177,7 +177,7 @@ public class InventoryPackets { // Store items in slots if (showShieldWhenSwordInHand) { - inventoryTracker.setItemId(windowId, i, stack == null ? 0 : stack.getIdentifier()); + inventoryTracker.setItemId(windowId, i, stack == null ? 0 : stack.identifier()); } ItemRewriter.toClient(stack); @@ -269,7 +269,7 @@ public class InventoryPackets { short slotID = wrapper.get(Type.SHORT, 0); // Update item in slot - inventoryTracker.setItemId((short) 0, slotID, stack == null ? 0 : stack.getIdentifier()); + inventoryTracker.setItemId((short) 0, slotID, stack == null ? 0 : stack.identifier()); // Sync shield item in offhand with main hand entityTracker.syncShieldWithSword(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java index 05e89ef21..58919cf9e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java @@ -19,6 +19,7 @@ package com.viaversion.viaversion.protocols.protocol1_9to1_8.packets; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9; @@ -117,7 +118,7 @@ public class SpawnPackets { public void handle(PacketWrapper wrapper) throws Exception { wrapper.write(Type.VAR_INT, entityID); List meta = new ArrayList<>(); - Item item = new Item(373, (byte) 1, (short) data, null); // Potion + Item item = new DataItem(373, (byte) 1, (short) data, null); // Potion ItemRewriter.toClient(item); // Rewrite so that it gets the right nbt // TEMP FIX FOR POTIONS UNTIL WE FIGURE OUT HOW TO TRANSFORM SENT PACKETS Metadata potion = new Metadata(5, MetaType1_9.Slot, item); @@ -308,7 +309,7 @@ public class SpawnPackets { PacketWrapper packet = PacketWrapper.create(0x3C, null, wrapper.user()); packet.write(Type.VAR_INT, wrapper.get(Type.VAR_INT, 0)); packet.write(Type.VAR_INT, 0); - packet.write(Type.ITEM, new Item(item, (byte) 1, (short) 0, null)); + packet.write(Type.ITEM, new DataItem(item, (byte) 1, (short) 0, null)); try { packet.send(Protocol1_9To1_8.class); } catch (Exception e) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java index 563687e88..b5dcd025a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java @@ -22,6 +22,7 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.chunks.Chunk1_8; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -314,7 +315,7 @@ public class WorldPackets { // Method to identify the sword in hand boolean isSword = showShieldWhenSwordInHand ? tracker.hasSwordInHand() - : item != null && Protocol1_9To1_8.isSword(item.getIdentifier()); + : item != null && Protocol1_9To1_8.isSword(item.identifier()); if (isSword) { if (hand == 0) { @@ -325,7 +326,7 @@ public class WorldPackets { if (!showShieldWhenSwordInHand && tracker.getItemInSecondHand() == null) { // Set shield in offhand when interacting with main hand - Item shield = new Item(442, (byte) 1, (short) 0, null); + Item shield = new DataItem(442, (byte) 1, (short) 0, null); tracker.setSecondHand(shield); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/HandItemProvider.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/HandItemProvider.java index 56d88aca8..27ec80599 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/HandItemProvider.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/HandItemProvider.java @@ -18,11 +18,12 @@ package com.viaversion.viaversion.protocols.protocol1_9to1_8.providers; import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.platform.providers.Provider; public class HandItemProvider implements Provider { public Item getHandItem(final UserConnection info) { - return new Item(0, (byte) 0, (short) 0, null); + return new DataItem(0, (byte) 0, (short) 0, null); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java index 485674909..ef10f624f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java @@ -26,6 +26,7 @@ import com.viaversion.viaversion.api.legacy.bossbar.BossColor; import com.viaversion.viaversion.api.legacy.bossbar.BossStyle; import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types.EntityType; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9; @@ -114,7 +115,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { if (!swordInHand || this.itemInSecondHand == null) { // Update shield in off hand depending if a sword is in the main hand - setSecondHand(swordInHand ? new Item(442, (byte) 1, (short) 0, null) : null); + setSecondHand(swordInHand ? new DataItem(442, (byte) 1, (short) 0, null) : null); } } @@ -201,7 +202,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { if (entityId != getProvidedEntityId() && Via.getConfig().isShieldBlocking()) { if ((data & 0x10) == 0x10) { if (validBlocking.contains(entityId)) { - Item shield = new Item(442, (byte) 1, (short) 0, null); + Item shield = new DataItem(442, (byte) 1, (short) 0, null); setSecondHand(entityId, shield); } else { setSecondHand(entityId, null); diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java index 5900af062..d2a295d14 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java @@ -218,12 +218,11 @@ public abstract class EntityRewriter extends RewriterBase * @param itemType item meta type if needed * @param blockType block meta type if needed * @param particleType particle meta type if needed - * @param itemRewriter itemrewriter if needed */ - public void registerDumMetaTypeHandler(@Nullable MetaType itemType, @Nullable MetaType blockType, @Nullable MetaType particleType, ItemRewriter.@Nullable RewriteFunction itemRewriter) { + public void registerMetaTypeHandler(@Nullable MetaType itemType, @Nullable MetaType blockType, @Nullable MetaType particleType) { filter().handler((event, meta) -> { if (itemType != null && meta.metaType() == itemType) { - itemRewriter.rewrite(meta.value()); + protocol.getItemRewriter().handleItemToClient(meta.value()); } else if (blockType != null && meta.metaType() == blockType) { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java index 91a9c6f52..dfbb232fd 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java @@ -24,18 +24,34 @@ import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; +import com.viaversion.viaversion.api.rewriter.RewriterBase; import com.viaversion.viaversion.api.type.Type; +import org.checkerframework.checker.nullness.qual.Nullable; -// If any of these methods become outdated, just create a new rewriter overriding the methods -public class ItemRewriter { - private final Protocol protocol; - private final RewriteFunction toClient; - private final RewriteFunction toServer; +public abstract class ItemRewriter extends RewriterBase implements com.viaversion.viaversion.api.rewriter.ItemRewriter { - public ItemRewriter(Protocol protocol, RewriteFunction toClient, RewriteFunction toServer) { - this.protocol = protocol; - this.toClient = toClient; - this.toServer = toServer; + public ItemRewriter(T protocol) { + super(protocol); + } + + // These two methods always return the same item instance *for now* + // It is made this way so it's easy to handle new instance creation/implementation changes + @Override + public @Nullable Item handleItemToClient(@Nullable Item item) { + if (item == null) return null; + if (protocol.getMappingData() != null && protocol.getMappingData().getItemMappings() != null) { + item.setIdentifier(protocol.getMappingData().getNewItemId(item.identifier())); + } + return item; + } + + @Override + public @Nullable Item handleItemToServer(@Nullable Item item) { + if (item == null) return null; + if (protocol.getMappingData() != null && protocol.getMappingData().getItemMappings() != null) { + item.setIdentifier(protocol.getMappingData().getOldItemId(item.identifier())); + } + return item; } public void registerWindowItems(ClientboundPacketType packetType, Type type) { @@ -89,7 +105,7 @@ public class ItemRewriter { do { slot = wrapper.passthrough(Type.BYTE); // & 0x7F into an extra variable if slot is needed - toClient.rewrite(wrapper.passthrough(type)); + handleItemToClient(wrapper.passthrough(type)); } while ((slot & 0xFFFFFF80) != 0); }); } @@ -138,11 +154,11 @@ public class ItemRewriter { int length = wrapper.passthrough(Type.VAR_INT); for (int i = 0; i < length; i++) { wrapper.passthrough(Type.SHORT); // Slot - toServer.rewrite(wrapper.passthrough(type)); + handleItemToServer(wrapper.passthrough(type)); } // Carried item - toServer.rewrite(wrapper.passthrough(type)); + handleItemToServer(wrapper.passthrough(type)); }); } }); @@ -169,11 +185,11 @@ public class ItemRewriter { wrapper.passthrough(Type.VAR_INT); int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { - toClient.rewrite(wrapper.passthrough(type)); // Input - toClient.rewrite(wrapper.passthrough(type)); // Output + handleItemToClient(wrapper.passthrough(type)); // Input + handleItemToClient(wrapper.passthrough(type)); // Output if (wrapper.passthrough(Type.BOOLEAN)) { // Has second item - toClient.rewrite(wrapper.passthrough(type)); // Second Item + handleItemToClient(wrapper.passthrough(type)); // Second Item } wrapper.passthrough(Type.BOOLEAN); // Trade disabled @@ -209,7 +225,7 @@ public class ItemRewriter { if (wrapper.passthrough(Type.BOOLEAN)) { wrapper.passthrough(Type.COMPONENT); // Title wrapper.passthrough(Type.COMPONENT); // Description - toClient.rewrite(wrapper.passthrough(type)); // Icon + handleItemToClient(wrapper.passthrough(type)); // Icon wrapper.passthrough(Type.VAR_INT); // Frame type int flags = wrapper.passthrough(Type.INT); // Flags if ((flags & 1) != 0) { @@ -261,7 +277,7 @@ public class ItemRewriter { int data = wrapper.passthrough(Type.VAR_INT); wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(data)); } else if (id == mappings.getItemId()) { - toClient.rewrite(wrapper.passthrough(itemType)); + handleItemToClient(wrapper.passthrough(itemType)); } int newId = protocol.getMappingData().getNewParticleId(id); @@ -276,22 +292,16 @@ public class ItemRewriter { return wrapper -> { Item[] items = wrapper.get(type, 0); for (Item item : items) { - toClient.rewrite(item); + handleItemToClient(item); } }; } public PacketHandler itemToClientHandler(Type type) { - return wrapper -> toClient.rewrite(wrapper.get(type, 0)); + return wrapper -> handleItemToClient(wrapper.get(type, 0)); } public PacketHandler itemToServerHandler(Type type) { - return wrapper -> toServer.rewrite(wrapper.get(type, 0)); - } - - @FunctionalInterface - public interface RewriteFunction { - - void rewrite(Item item); + return wrapper -> handleItemToServer(wrapper.get(type, 0)); } } diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/RecipeRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/RecipeRewriter.java index 437604c6f..818f84236 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/RecipeRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/RecipeRewriter.java @@ -17,11 +17,13 @@ */ package com.viaversion.viaversion.rewriter; +import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.type.Type; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.HashMap; import java.util.Map; @@ -29,12 +31,10 @@ import java.util.Map; public abstract class RecipeRewriter { protected final Protocol protocol; - protected final ItemRewriter.RewriteFunction rewriter; protected final Map recipeHandlers = new HashMap<>(); - protected RecipeRewriter(Protocol protocol, ItemRewriter.RewriteFunction rewriter) { + protected RecipeRewriter(Protocol protocol) { this.protocol = protocol; - this.rewriter = rewriter; } public void handle(PacketWrapper wrapper, String type) throws Exception { @@ -60,6 +60,12 @@ public abstract class RecipeRewriter { }); } + protected void rewrite(@Nullable Item item) { + if (protocol.getItemRewriter() != null) { + protocol.getItemRewriter().handleItemToClient(item); + } + } + @FunctionalInterface public interface RecipeConsumer { diff --git a/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java b/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java index 3ed641219..86187b867 100644 --- a/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java +++ b/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java @@ -17,11 +17,11 @@ */ package com.viaversion.viaversion.common.type; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.type.Type; public class ItemTypeTest { @@ -38,7 +38,7 @@ public class ItemTypeTest { // Test item read Assertions.assertEquals( - new Item((int) Short.MAX_VALUE, (byte) -128, (short) 257, null), + new DataItem((int) Short.MAX_VALUE, (byte) -128, (short) 257, null), Type.ITEM.read(Unpooled.wrappedBuffer(new byte[]{ 127, -1, -128, @@ -47,7 +47,7 @@ public class ItemTypeTest { })) ); Assertions.assertEquals( - new Item(420, (byte) 53, (short) 0, null), + new DataItem(420, (byte) 53, (short) 0, null), Type.FLAT_ITEM.read(Unpooled.wrappedBuffer(new byte[]{ 1, (byte) 164, 53, @@ -55,7 +55,7 @@ public class ItemTypeTest { })) ); Assertions.assertEquals( - new Item(268435456, (byte) 127, (short) 0, null), + new DataItem(268435456, (byte) 127, (short) 0, null), Type.FLAT_VAR_INT_ITEM.read(Unpooled.wrappedBuffer(new byte[]{ 1, -128, -128, -128, -128, 1, @@ -83,20 +83,20 @@ public class ItemTypeTest { ByteBuf buf = Unpooled.buffer(); // Test item write - Type.ITEM.write(buf, new Item((int) Short.MAX_VALUE, (byte) -128, (short) 257, null)); + Type.ITEM.write(buf, new DataItem((int) Short.MAX_VALUE, (byte) -128, (short) 257, null)); Assertions.assertArrayEquals(toBytes(buf), new byte[]{ 127, -1, -128, 1, 1, 0 }); - Type.FLAT_ITEM.write(buf, new Item(420, (byte) 53, (short) 0, null)); + Type.FLAT_ITEM.write(buf, new DataItem(420, (byte) 53, (short) 0, null)); Assertions.assertArrayEquals(toBytes(buf), new byte[]{ 1, (byte) 164, 53, 0 }); - Type.FLAT_VAR_INT_ITEM.write(buf, new Item(268435456, (byte) 127, (short) 0, null)); + Type.FLAT_VAR_INT_ITEM.write(buf, new DataItem(268435456, (byte) 127, (short) 0, null)); Assertions.assertArrayEquals(toBytes(buf), new byte[]{ 1, -128, -128, -128, -128, 1, diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/HandItemCache.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/HandItemCache.java index f47a0143c..a65695be8 100644 --- a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/HandItemCache.java +++ b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/HandItemCache.java @@ -17,6 +17,7 @@ */ package com.viaversion.viaversion.sponge.listeners.protocol1_9to1_8; +import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.sponge.listeners.protocol1_9to1_8.sponge4.Sponge4ItemGrabber; import com.viaversion.viaversion.sponge.listeners.protocol1_9to1_8.sponge5.Sponge5ItemGrabber; @@ -68,7 +69,7 @@ public class HandItemCache implements Runnable { } public static Item convert(ItemStack itemInHand) { - if (itemInHand == null) return new Item(0, (byte) 0, (short) 0, null); + if (itemInHand == null) return new DataItem(0, (byte) 0, (short) 0, null); if (GET_DAMAGE == null) { try { GET_DAMAGE = itemInHand.getClass().getDeclaredField("field_77991_e"); @@ -104,7 +105,7 @@ public class HandItemCache implements Runnable { e.printStackTrace(); } } - return new Item(id, (byte) itemInHand.getQuantity(), (short) damage, null); + return new DataItem(id, (byte) itemInHand.getQuantity(), (short) damage, null); } }