From 02bf9501a9c2c7e8b963f998e40c854dad03fa30 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 20 Oct 2021 18:48:07 +0200 Subject: [PATCH] Handle item and particle meta --- .../metadata/types/MetaType1_18.java | 72 +++++++++++++++++++ .../types/minecraft/Particle1_18Type.java | 39 ++++++++++ .../type/types/version/Metadata1_18Type.java | 35 +++++++++ .../api/type/types/version/Types1_18.java | 12 +++- .../packets/EntityPackets.java | 10 +-- 5 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaType1_18.java create mode 100644 api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Particle1_18Type.java create mode 100644 api/src/main/java/com/viaversion/viaversion/api/type/types/version/Metadata1_18Type.java diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaType1_18.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaType1_18.java new file mode 100644 index 000000000..b175bc8bc --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/metadata/types/MetaType1_18.java @@ -0,0 +1,72 @@ +/* + * 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.metadata.types; + +import com.viaversion.viaversion.api.minecraft.metadata.MetaType; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.version.Types1_17; + +public enum MetaType1_18 implements MetaType { + BYTE(0, Type.BYTE), + VAR_INT(1, Type.VAR_INT), + FLOAT(2, Type.FLOAT), + STRING(3, Type.STRING), + COMPONENT(4, Type.COMPONENT), + OPT_COMPONENT(5, Type.OPTIONAL_COMPONENT), + ITEM(6, Type.FLAT_VAR_INT_ITEM), + BOOLEAN(7, Type.BOOLEAN), + ROTATION(8, Type.ROTATION), + POSITION(9, Type.POSITION1_14), + OPT_POSITION(10, Type.OPTIONAL_POSITION_1_14), + DIRECTION(11, Type.VAR_INT), + OPT_UUID(12, Type.OPTIONAL_UUID), + BLOCK_STATE(13, Type.VAR_INT), + NBT(14, Type.NBT), + PARTICLE(15, Types1_17.PARTICLE), + VILLAGER_DATA(16, Type.VILLAGER_DATA), + OPT_VAR_INT(17, Type.OPTIONAL_VAR_INT), + POSE(18, Type.VAR_INT); + + private static final MetaType1_18[] VALUES = values(); + private final int typeId; + private final Type type; + + MetaType1_18(int typeId, Type type) { + this.typeId = typeId; + this.type = type; + } + + public static MetaType1_18 byId(int id) { + return VALUES[id]; + } + + @Override + public int typeId() { + return typeId; + } + + @Override + public Type type() { + return type; + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Particle1_18Type.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Particle1_18Type.java new file mode 100644 index 000000000..96f4d00de --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/Particle1_18Type.java @@ -0,0 +1,39 @@ +/* + * 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.type.types.minecraft; + +import com.viaversion.viaversion.api.type.Type; + +public class Particle1_18Type extends AbstractParticleType { + + public Particle1_18Type() { + readers.put(2, blockHandler()); + readers.put(3, blockHandler()); + readers.put(24, blockHandler()); + readers.put(14, dustHandler()); + readers.put(15, dustTransitionHandler()); + readers.put(35, itemHandler(Type.FLAT_VAR_INT_ITEM)); + readers.put(36, vibrationHandler(Type.POSITION1_14)); + } +} + diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Metadata1_18Type.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Metadata1_18Type.java new file mode 100644 index 000000000..01639dbee --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Metadata1_18Type.java @@ -0,0 +1,35 @@ +/* + * 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.type.types.version; + +import com.viaversion.viaversion.api.minecraft.metadata.MetaType; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_18; +import com.viaversion.viaversion.api.type.types.minecraft.ModernMetaType; + +public class Metadata1_18Type extends ModernMetaType { + + @Override + protected MetaType getType(final int index) { + return MetaType1_18.byId(index); + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_18.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_18.java index b1a539c62..c9c4c8d08 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_18.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_18.java @@ -23,12 +23,18 @@ package com.viaversion.viaversion.api.type.types.version; import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; -import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; -import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; -import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; +import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.Particle; +import com.viaversion.viaversion.api.type.types.minecraft.MetaListType; +import com.viaversion.viaversion.api.type.types.minecraft.Particle1_18Type; + +import java.util.List; public final class Types1_18 { public static final Type BLOCK_ENTITY = new BlockEntityType1_18(); + public static final Type METADATA = new Metadata1_18Type(); + public static final Type> METADATA_LIST = new MetaListType(METADATA); + public static final Type PARTICLE = new Particle1_18Type(); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/EntityPackets.java index 19f818eb4..08512ccbe 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/EntityPackets.java @@ -20,8 +20,11 @@ package com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_18; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.version.Types1_17; +import com.viaversion.viaversion.api.type.types.version.Types1_18; import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.Protocol1_18To1_17_1; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.storage.ChunkLightStorage; @@ -39,10 +42,8 @@ public final class EntityPackets extends EntityRewriter { /*registerTrackerWithData(ClientboundPackets1_17_1.SPAWN_ENTITY, Entity1_18Types.FALLING_BLOCK); registerTracker(ClientboundPackets1_17_1.SPAWN_MOB); registerTracker(ClientboundPackets1_17_1.SPAWN_PLAYER, Entity1_18Types.PLAYER); - registerMetadataRewriter(ClientboundPackets1_17_1.ENTITY_METADATA, Types1_17.METADATA_LIST); registerRemoveEntities(ClientboundPackets1_17_1.REMOVE_ENTITIES);*/ - - //TODO NEW METATYPE FOR PARTICLE CHANGE + registerMetadataRewriter(ClientboundPackets1_17_1.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_18.METADATA_LIST); protocol.registerClientbound(ClientboundPackets1_17_1.JOIN_GAME, new PacketRemapper() { @Override @@ -85,7 +86,8 @@ public final class EntityPackets extends EntityRewriter { @Override protected void registerRewrites() { - //registerMetaTypeHandler(MetaType1_17.ITEM, MetaType1_17.BLOCK_STATE, MetaType1_17.PARTICLE); //TODO with nulls if needed + filter().handler((event, meta) -> meta.setMetaType(MetaType1_18.byId(meta.metaType().typeId()))); + registerMetaTypeHandler(MetaType1_18.ITEM, null, MetaType1_18.PARTICLE); /*filter().filterFamily(Entity1_17Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> { //TODO check id // Convert to new block id