From 1f8d1339f5cfd1474f3e40968a859fc74617bccf Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 31 Oct 2024 09:37:21 +0100 Subject: [PATCH] Fix painting entity data in 1.21->1.21.2 Fixes #4227 --- .../api/minecraft/PaintingVariant.java | 30 +++++++- .../entitydata/types/EntityDataTypes1_21.java | 2 +- .../types/EntityDataTypes1_21_2.java | 75 +++++++++++++++++++ .../api/type/types/version/Types1_21_2.java | 4 +- 4 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21_2.java diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/PaintingVariant.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/PaintingVariant.java index 90073d972..d5fb1424d 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/PaintingVariant.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/PaintingVariant.java @@ -22,13 +22,19 @@ */ package com.viaversion.viaversion.api.minecraft; +import com.viaversion.nbt.tag.Tag; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.api.type.types.misc.HolderType; import io.netty.buffer.ByteBuf; +import org.checkerframework.checker.nullness.qual.Nullable; -public record PaintingVariant(int width, int height, String assetId) { +public record PaintingVariant(int width, int height, String assetId, @Nullable Tag title, @Nullable Tag author) { - public static HolderType TYPE = new HolderType<>() { + public PaintingVariant(final int width, final int height, final String assetId) { + this(width, height, assetId, null, null); + } + + public static HolderType TYPE1_21 = new HolderType<>() { @Override public PaintingVariant readDirect(final ByteBuf buffer) { final int width = Types.VAR_INT.readPrimitive(buffer); @@ -44,4 +50,24 @@ public record PaintingVariant(int width, int height, String assetId) { Types.STRING.write(buffer, variant.assetId()); } }; + public static HolderType TYPE1_21_2 = new HolderType<>() { + @Override + public PaintingVariant readDirect(final ByteBuf buffer) { + final int width = Types.VAR_INT.readPrimitive(buffer); + final int height = Types.VAR_INT.readPrimitive(buffer); + final String assetId = Types.STRING.read(buffer); + final Tag title = Types.OPTIONAL_TAG.read(buffer); + final Tag author = Types.OPTIONAL_TAG.read(buffer); + return new PaintingVariant(width, height, assetId, title, author); + } + + @Override + public void writeDirect(final ByteBuf buffer, final PaintingVariant variant) { + Types.VAR_INT.writePrimitive(buffer, variant.width()); + Types.VAR_INT.writePrimitive(buffer, variant.height()); + Types.STRING.write(buffer, variant.assetId()); + Types.OPTIONAL_TAG.write(buffer, variant.title()); + Types.OPTIONAL_TAG.write(buffer, variant.author()); + } + }; } diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21.java index 01bd6a92c..0498c5ae3 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21.java @@ -60,7 +60,7 @@ public final class EntityDataTypes1_21 extends AbstractEntityDataTypes { public final EntityDataType wolfVariantType = add(23, WolfVariant.TYPE); public final EntityDataType frogVariantType = add(24, Types.VAR_INT); public final EntityDataType optionalGlobalPosition = add(25, Types.OPTIONAL_GLOBAL_POSITION); - public final EntityDataType paintingVariantType = add(26, PaintingVariant.TYPE); + public final EntityDataType paintingVariantType = add(26, PaintingVariant.TYPE1_21); public final EntityDataType snifferState = add(27, Types.VAR_INT); public final EntityDataType armadilloState = add(28, Types.VAR_INT); public final EntityDataType vector3FType = add(29, Types.VECTOR3F); diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21_2.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21_2.java new file mode 100644 index 000000000..fe35af0c2 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/entitydata/types/EntityDataTypes1_21_2.java @@ -0,0 +1,75 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2024 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.entitydata.types; + +import com.viaversion.viaversion.api.minecraft.PaintingVariant; +import com.viaversion.viaversion.api.minecraft.Particle; +import com.viaversion.viaversion.api.minecraft.WolfVariant; +import com.viaversion.viaversion.api.minecraft.entitydata.EntityDataType; +import com.viaversion.viaversion.api.minecraft.item.Item; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.Types; +import com.viaversion.viaversion.api.type.types.ArrayType; +import com.viaversion.viaversion.api.type.types.misc.ParticleType; + +public final class EntityDataTypes1_21_2 extends AbstractEntityDataTypes { + + public final EntityDataType byteType = add(0, Types.BYTE); + public final EntityDataType varIntType = add(1, Types.VAR_INT); + public final EntityDataType longType = add(2, Types.VAR_LONG); + public final EntityDataType floatType = add(3, Types.FLOAT); + public final EntityDataType stringType = add(4, Types.STRING); + public final EntityDataType componentType = add(5, Types.TAG); + public final EntityDataType optionalComponentType = add(6, Types.OPTIONAL_TAG); + public final EntityDataType itemType; + public final EntityDataType booleanType = add(8, Types.BOOLEAN); + public final EntityDataType rotationsType = add(9, Types.ROTATIONS); + public final EntityDataType blockPositionType = add(10, Types.BLOCK_POSITION1_14); + public final EntityDataType optionalBlockPositionType = add(11, Types.OPTIONAL_POSITION_1_14); + public final EntityDataType directionType = add(12, Types.VAR_INT); + public final EntityDataType optionalUUIDType = add(13, Types.OPTIONAL_UUID); + public final EntityDataType blockStateType = add(14, Types.VAR_INT); + public final EntityDataType optionalBlockStateType = add(15, Types.VAR_INT); + public final EntityDataType compoundTagType = add(16, Types.COMPOUND_TAG); + public final EntityDataType particleType; + public final EntityDataType particlesType; + public final EntityDataType villagerDatatType = add(19, Types.VILLAGER_DATA); + public final EntityDataType optionalVarIntType = add(20, Types.OPTIONAL_VAR_INT); + public final EntityDataType poseType = add(21, Types.VAR_INT); + public final EntityDataType catVariantType = add(22, Types.VAR_INT); + public final EntityDataType wolfVariantType = add(23, WolfVariant.TYPE); + public final EntityDataType frogVariantType = add(24, Types.VAR_INT); + public final EntityDataType optionalGlobalPosition = add(25, Types.OPTIONAL_GLOBAL_POSITION); + public final EntityDataType paintingVariantType = add(26, PaintingVariant.TYPE1_21_2); + public final EntityDataType snifferState = add(27, Types.VAR_INT); + public final EntityDataType armadilloState = add(28, Types.VAR_INT); + public final EntityDataType vector3FType = add(29, Types.VECTOR3F); + public final EntityDataType quaternionType = add(30, Types.QUATERNION); + + public EntityDataTypes1_21_2(final Type itemType, final ParticleType particleType, final ArrayType particlesType) { + super(31); + this.itemType = add(7, itemType); + this.particleType = add(17, particleType); + this.particlesType = add(18, particlesType); + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_21_2.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_21_2.java index d143daf76..3cd74be96 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_21_2.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_21_2.java @@ -25,7 +25,7 @@ package com.viaversion.viaversion.api.type.types.version; import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.entitydata.EntityData; -import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21; +import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_2; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.ArrayType; @@ -50,7 +50,7 @@ public final class Types1_21_2 { public static final ParticleType PARTICLE = new ParticleType(); public static final ArrayType PARTICLES = new ArrayType<>(PARTICLE); - public static final EntityDataTypes1_21 ENTITY_DATA_TYPES = new EntityDataTypes1_21(ITEM, PARTICLE, PARTICLES); + public static final EntityDataTypes1_21_2 ENTITY_DATA_TYPES = new EntityDataTypes1_21_2(ITEM, PARTICLE, PARTICLES); public static final Type ENTITY_DATA = new EntityDataType(ENTITY_DATA_TYPES); public static final Type> ENTITY_DATA_LIST = new EntityDataListType(ENTITY_DATA); }