From 8c6d104faaba86d731cce374eff0f41b58aab34f Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 3 Aug 2023 19:47:18 +1000 Subject: [PATCH] 23w31a eletric boogaloo --- .../metadata/types/MetaTypes1_20_2.java | 64 +++++++++++++++++++ .../viaversion/viaversion/api/type/Type.java | 27 ++------ .../type/types/minecraft/Item1_20_2Type.java | 60 +++++++++++++++++ .../api/type/types/minecraft/ItemType.java | 1 + .../api/type/types/version/Types1_20_2.java | 40 ++++++++++++ .../rewriter/EntityPacketRewriter1_20_2.java | 12 +++- 6 files changed, 181 insertions(+), 23 deletions(-) create mode 100644 api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaTypes1_20_2.java create mode 100644 api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Item1_20_2Type.java create mode 100644 api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20_2.java diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaTypes1_20_2.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaTypes1_20_2.java new file mode 100644 index 000000000..baae97aef --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaTypes1_20_2.java @@ -0,0 +1,64 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2023 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.metadata.types; + +import com.viaversion.viaversion.api.minecraft.metadata.MetaType; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.minecraft.ParticleType; + +public final class MetaTypes1_20_2 extends AbstractMetaTypes { + + public final MetaType byteType = add(0, Type.BYTE); + public final MetaType varIntType = add(1, Type.VAR_INT); + public final MetaType longType = add(2, Type.VAR_LONG); + public final MetaType floatType = add(3, Type.FLOAT); + public final MetaType stringType = add(4, Type.STRING); + public final MetaType componentType = add(5, Type.COMPONENT); + public final MetaType optionalComponentType = add(6, Type.OPTIONAL_COMPONENT); + public final MetaType itemType = add(7, Type.FLAT_VAR_INT_ITEM); + public final MetaType booleanType = add(8, Type.BOOLEAN); + public final MetaType rotationType = add(9, Type.ROTATION); + public final MetaType positionType = add(10, Type.POSITION1_14); + public final MetaType optionalPositionType = add(11, Type.OPTIONAL_POSITION_1_14); + public final MetaType directionType = add(12, Type.VAR_INT); + public final MetaType optionalUUIDType = add(13, Type.OPTIONAL_UUID); + public final MetaType blockStateType = add(14, Type.VAR_INT); + public final MetaType optionalBlockStateType = add(15, Type.VAR_INT); + public final MetaType nbtType = add(16, Type.NAMELESS_NBT); + public final MetaType particleType; + public final MetaType villagerDatatType = add(18, Type.VILLAGER_DATA); + public final MetaType optionalVarIntType = add(19, Type.OPTIONAL_VAR_INT); + public final MetaType poseType = add(20, Type.VAR_INT); + public final MetaType catVariantType = add(21, Type.VAR_INT); + public final MetaType frogVariantType = add(22, Type.VAR_INT); + public final MetaType optionalGlobalPosition = add(23, Type.OPTIONAL_GLOBAL_POSITION); + public final MetaType paintingVariantType = add(24, Type.VAR_INT); + public final MetaType snifferState = add(25, Type.VAR_INT); + public final MetaType vectorType = add(26, Type.VECTOR3F); + public final MetaType quaternionType = add(27, Type.QUATERNION); + + public MetaTypes1_20_2(final ParticleType particleType) { + super(28); + this.particleType = add(17, particleType); + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/Type.java b/api/src/main/java/com/viaversion/viaversion/api/type/Type.java index 8e8db2eb7..378ca54ab 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/Type.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/Type.java @@ -59,28 +59,8 @@ import com.viaversion.viaversion.api.type.types.VarIntArrayType; import com.viaversion.viaversion.api.type.types.VarIntType; import com.viaversion.viaversion.api.type.types.VarLongType; import com.viaversion.viaversion.api.type.types.VoidType; -import com.viaversion.viaversion.api.type.types.minecraft.NamelessNBTType; -import com.viaversion.viaversion.api.type.types.minecraft.BlockChangeRecordType; -import com.viaversion.viaversion.api.type.types.minecraft.ChunkPositionType; -import com.viaversion.viaversion.api.type.types.minecraft.EulerAngleType; -import com.viaversion.viaversion.api.type.types.minecraft.FlatItemArrayType; -import com.viaversion.viaversion.api.type.types.minecraft.FlatItemType; -import com.viaversion.viaversion.api.type.types.minecraft.FlatVarIntItemArrayType; -import com.viaversion.viaversion.api.type.types.minecraft.FlatVarIntItemType; -import com.viaversion.viaversion.api.type.types.minecraft.GlobalPositionType; -import com.viaversion.viaversion.api.type.types.minecraft.ItemArrayType; -import com.viaversion.viaversion.api.type.types.minecraft.ItemType; -import com.viaversion.viaversion.api.type.types.minecraft.NBTType; -import com.viaversion.viaversion.api.type.types.minecraft.OptionalVarIntType; -import com.viaversion.viaversion.api.type.types.minecraft.PlayerMessageSignatureType; -import com.viaversion.viaversion.api.type.types.minecraft.Position1_14Type; -import com.viaversion.viaversion.api.type.types.minecraft.PositionType; -import com.viaversion.viaversion.api.type.types.minecraft.ProfileKeyType; -import com.viaversion.viaversion.api.type.types.minecraft.QuaternionType; -import com.viaversion.viaversion.api.type.types.minecraft.VarLongBlockChangeRecordType; -import com.viaversion.viaversion.api.type.types.minecraft.Vector3fType; -import com.viaversion.viaversion.api.type.types.minecraft.VectorType; -import com.viaversion.viaversion.api.type.types.minecraft.VillagerDataType; +import com.viaversion.viaversion.api.type.types.minecraft.*; + import java.util.UUID; /** @@ -198,6 +178,9 @@ public abstract class Type implements ByteBufReader, ByteBufWriter { public static final Type FLAT_ITEM_ARRAY_VAR_INT = new ArrayType<>(FLAT_ITEM); public static final Type FLAT_VAR_INT_ITEM_ARRAY_VAR_INT = new ArrayType<>(FLAT_VAR_INT_ITEM); + public static final Type ITEM1_20_2 = new Item1_20_2Type(); + public static final Type ITEM1_20_2_ARRAY_VAR_INT = new ArrayType<>(ITEM1_20_2); + /* Actual Class */ private final Class outputClass; private final String typeName; diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Item1_20_2Type.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Item1_20_2Type.java new file mode 100644 index 000000000..73ceacdde --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Item1_20_2Type.java @@ -0,0 +1,60 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2023 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.type.types.minecraft; + +import com.viaversion.viaversion.api.minecraft.item.DataItem; +import com.viaversion.viaversion.api.minecraft.item.Item; +import io.netty.buffer.ByteBuf; +import org.checkerframework.checker.nullness.qual.Nullable; + +public class Item1_20_2Type extends BaseItemType { + + public Item1_20_2Type() { + super("Item1_20_2Type"); + } + + @Override + public @Nullable Item read(final ByteBuf buffer) throws Exception { + if (!buffer.readBoolean()) { + return null; + } + + final Item item = new DataItem(); + item.setIdentifier(VAR_INT.readPrimitive(buffer)); + item.setAmount(buffer.readByte()); + item.setTag(NAMELESS_NBT.read(buffer)); + return item; + } + + @Override + public void write(final ByteBuf buffer, @Nullable final Item object) throws Exception { + if (object == null) { + buffer.writeBoolean(false); + } else { + buffer.writeBoolean(true); + VAR_INT.writePrimitive(buffer, object.identifier()); + buffer.writeByte(object.amount()); + NAMELESS_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 035ac40ca..ccdea648d 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 @@ -28,6 +28,7 @@ import io.netty.buffer.ByteBuf; import org.checkerframework.checker.nullness.qual.Nullable; public class ItemType extends BaseItemType { + public ItemType() { super("Item"); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20_2.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20_2.java new file mode 100644 index 000000000..066cf85ee --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20_2.java @@ -0,0 +1,40 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2023 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.type.types.version; + +import com.viaversion.viaversion.api.minecraft.metadata.Metadata; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaTypes1_19_4; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaTypes1_20_2; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.minecraft.MetaListType; +import com.viaversion.viaversion.api.type.types.minecraft.ParticleType; + +import java.util.List; + +public final class Types1_20_2 { + + public static final ParticleType PARTICLE = Types1_20.PARTICLE; // Only safe to use after protocol loading + public static final MetaTypes1_20_2 META_TYPES = new MetaTypes1_20_2(PARTICLE); + public static final Type METADATA = new MetadataType(META_TYPES); + public static final Type> METADATA_LIST = new MetaListType(METADATA); +} diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/EntityPacketRewriter1_20_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/EntityPacketRewriter1_20_2.java index 0810a7eab..00bf5cc73 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/EntityPacketRewriter1_20_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/EntityPacketRewriter1_20_2.java @@ -18,17 +18,22 @@ package com.viaversion.viaversion.protocols.protocol1_20_2to1_20.rewriter; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.version.Types1_20; +import com.viaversion.viaversion.api.type.types.version.Types1_20_2; import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.Protocol1_20_2To1_20; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundConfigurationPackets1_20_2; import com.viaversion.viaversion.rewriter.EntityRewriter; +import java.util.List; + public final class EntityPacketRewriter1_20_2 extends EntityRewriter { public EntityPacketRewriter1_20_2(final Protocol1_20_2To1_20 protocol) { @@ -38,7 +43,7 @@ public final class EntityPacketRewriter1_20_2 extends EntityRewriter meta.setMetaType(Types1_20_2.META_TYPES.byId(meta.metaType().typeId()))); + } + @Override public EntityType typeFromId(final int type) { return Entity1_19_4Types.getTypeFromId(type);