diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/ChatType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/ChatType.java index 421637d36..e849aa940 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/ChatType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/ChatType.java @@ -20,6 +20,7 @@ import com.github.retrooper.packetevents.protocol.chat.message.ChatMessage_v1_19_1; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -37,7 +38,7 @@ import static com.github.retrooper.packetevents.util.adventure.AdventureIndexUtil.indexValueOrThrow; -public interface ChatType extends MappedEntity, CopyableEntity { +public interface ChatType extends MappedEntity, CopyableEntity, DeepComparableEntity { @UnknownNullability("only nullable for 1.19") ChatTypeDecoration getChatDecoration(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/StaticChatType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/StaticChatType.java index f57e7038e..ed8914fb2 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/StaticChatType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/chat/StaticChatType.java @@ -96,6 +96,7 @@ public ChatType copy(@Nullable TypesBuilderData newData) { return this.narrationPriority; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticChatType)) return false; @@ -107,6 +108,7 @@ public boolean deepEquals(Object obj) { return this.narrationPriority == that.narrationPriority; } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.chatDecoration, this.overlayDecoration, this.narrationDecoration, this.narrationPriority); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/StaticWolfVariant.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/StaticWolfVariant.java index 7a8b4b4d7..5df581534 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/StaticWolfVariant.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/StaticWolfVariant.java @@ -82,6 +82,7 @@ public MappedEntitySet getBiomes() { return this.biomes; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticWolfVariant)) return false; @@ -93,6 +94,7 @@ public boolean deepEquals(Object obj) { return this.biomes.equals(that.biomes); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.wildTexture, this.tameTexture, this.angryTexture, this.biomes); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/WolfVariant.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/WolfVariant.java index 2d1690201..752a73d6c 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/WolfVariant.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/entity/wolfvariant/WolfVariant.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.entity.wolfvariant; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntitySet; import com.github.retrooper.packetevents.protocol.nbt.NBT; @@ -31,7 +32,7 @@ import com.github.retrooper.packetevents.util.mappings.TypesBuilderData; import org.jetbrains.annotations.Nullable; -public interface WolfVariant extends MappedEntity, CopyableEntity { +public interface WolfVariant extends MappedEntity, CopyableEntity, DeepComparableEntity { ResourceLocation getWildTexture(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/BannerPattern.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/BannerPattern.java index fc228b8eb..dffdfa69f 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/BannerPattern.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/BannerPattern.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.item.banner; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -29,7 +30,7 @@ import com.github.retrooper.packetevents.wrapper.PacketWrapper; import org.jetbrains.annotations.Nullable; -public interface BannerPattern extends MappedEntity, CopyableEntity { +public interface BannerPattern extends MappedEntity, CopyableEntity, DeepComparableEntity { ResourceLocation getAssetId(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/StaticBannerPattern.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/StaticBannerPattern.java index 5b40bf0d8..cb203787f 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/StaticBannerPattern.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/banner/StaticBannerPattern.java @@ -55,6 +55,7 @@ public String getTranslationKey() { return this.translationKey; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticBannerPattern)) return false; @@ -64,6 +65,7 @@ public boolean deepEquals(Object obj) { return this.translationKey.equals(that.translationKey); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.assetId, this.translationKey); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/EnchantmentType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/EnchantmentType.java index edff9da01..ea407dd12 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/EnchantmentType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/EnchantmentType.java @@ -23,6 +23,7 @@ import com.github.retrooper.packetevents.protocol.component.StaticComponentMap; import com.github.retrooper.packetevents.protocol.item.enchantment.EnchantmentDefinition; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntitySet; import com.github.retrooper.packetevents.protocol.nbt.NBT; @@ -35,7 +36,7 @@ import java.util.Optional; -public interface EnchantmentType extends MappedEntity, CopyableEntity { +public interface EnchantmentType extends MappedEntity, CopyableEntity, DeepComparableEntity { Component getDescription(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/StaticEnchantmentType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/StaticEnchantmentType.java index 6f01b368b..d90f4f055 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/StaticEnchantmentType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/enchantment/type/StaticEnchantmentType.java @@ -84,6 +84,7 @@ public StaticComponentMap getEffects() { return this.effects; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticEnchantmentType)) return false; @@ -95,6 +96,7 @@ public boolean deepEquals(Object obj) { return this.effects.equals(that.effects); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.description, this.definition, this.exclusiveSet, this.effects); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/IJukeboxSong.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/IJukeboxSong.java index da6b0cb06..3c43ab39c 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/IJukeboxSong.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/IJukeboxSong.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.item.jukebox; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -32,7 +33,8 @@ import net.kyori.adventure.text.Component; import org.jetbrains.annotations.Nullable; -public interface IJukeboxSong extends MappedEntity, CopyableEntity { +public interface IJukeboxSong extends MappedEntity, CopyableEntity, DeepComparableEntity { + Sound getSound(); Component getDescription(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/JukeboxSong.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/JukeboxSong.java index aaf2dfd06..5934e1479 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/JukeboxSong.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/jukebox/JukeboxSong.java @@ -101,6 +101,7 @@ public void setComparatorOutput(int comparatorOutput) { this.comparatorOutput = comparatorOutput; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof JukeboxSong)) return false; @@ -112,6 +113,7 @@ public boolean deepEquals(Object obj) { return this.description.equals(that.description); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.sound, this.description, this.lengthInSeconds, this.comparatorOutput); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/StaticTrimMaterial.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/StaticTrimMaterial.java index ca5928677..09dd7649d 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/StaticTrimMaterial.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/StaticTrimMaterial.java @@ -87,6 +87,7 @@ public Component getDescription() { return this.description; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticTrimMaterial)) return false; @@ -99,6 +100,7 @@ public boolean deepEquals(Object obj) { return this.description.equals(that.description); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.assetName, this.ingredient, this.itemModelIndex, this.overrideArmorMaterials, this.description); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/TrimMaterial.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/TrimMaterial.java index bc1038e4c..9460fda21 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/TrimMaterial.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimmaterial/TrimMaterial.java @@ -23,6 +23,7 @@ import com.github.retrooper.packetevents.protocol.item.type.ItemType; import com.github.retrooper.packetevents.protocol.item.type.ItemTypes; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -39,7 +40,7 @@ import java.util.HashMap; import java.util.Map; -public interface TrimMaterial extends MappedEntity, CopyableEntity { +public interface TrimMaterial extends MappedEntity, CopyableEntity, DeepComparableEntity { String getAssetName(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/StaticTrimPattern.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/StaticTrimPattern.java index 1f6a7f586..1a1e55a1f 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/StaticTrimPattern.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/StaticTrimPattern.java @@ -79,6 +79,7 @@ public boolean isDecal() { return this.decal; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticTrimPattern)) return false; @@ -90,6 +91,7 @@ public boolean deepEquals(Object obj) { return this.description.equals(that.description); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.assetId, this.templateItem, this.description, this.decal); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/TrimPattern.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/TrimPattern.java index d20290b1b..8c38a8f6c 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/TrimPattern.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/item/trimpattern/TrimPattern.java @@ -21,6 +21,7 @@ import com.github.retrooper.packetevents.protocol.item.type.ItemType; import com.github.retrooper.packetevents.protocol.item.type.ItemTypes; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTByte; @@ -34,7 +35,7 @@ import net.kyori.adventure.text.Component; import org.jetbrains.annotations.Nullable; -public interface TrimPattern extends MappedEntity, CopyableEntity { +public interface TrimPattern extends MappedEntity, CopyableEntity, DeepComparableEntity { ResourceLocation getAssetId(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/mapper/DeepComparableEntity.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/mapper/DeepComparableEntity.java new file mode 100644 index 000000000..72eea5340 --- /dev/null +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/mapper/DeepComparableEntity.java @@ -0,0 +1,26 @@ +/* + * This file is part of packetevents - https://github.com/retrooper/packetevents + * Copyright (C) 2024 retrooper and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.github.retrooper.packetevents.protocol.mapper; + +public interface DeepComparableEntity { + + boolean deepEquals(Object obj); + + int deepHashCode(); +} diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/Biome.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/Biome.java index 739c2d470..16701615e 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/Biome.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/Biome.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.world.biome; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTByte; @@ -35,7 +36,7 @@ import static com.github.retrooper.packetevents.util.adventure.AdventureIndexUtil.indexValueOrThrow; -public interface Biome extends MappedEntity, CopyableEntity { +public interface Biome extends MappedEntity, CopyableEntity, DeepComparableEntity { boolean hasPrecipitation(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/StaticBiome.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/StaticBiome.java index 0e95c4d0f..a395045b8 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/StaticBiome.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/StaticBiome.java @@ -153,6 +153,7 @@ public BiomeEffects getEffects() { return this.effects; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticBiome)) return false; @@ -168,6 +169,7 @@ public boolean deepEquals(Object obj) { return this.effects.equals(that.effects); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.precipitation, this.temperature, this.temperatureModifier, this.downfall, this.category, this.depth, this.scale, this.effects); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/DamageType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/DamageType.java index 84bd3a6bd..8f8826771 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/DamageType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/DamageType.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.world.damagetype; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -32,7 +33,7 @@ import static com.github.retrooper.packetevents.util.adventure.AdventureIndexUtil.indexValueOrThrow; -public interface DamageType extends MappedEntity, CopyableEntity { +public interface DamageType extends MappedEntity, CopyableEntity, DeepComparableEntity { String getMessageId(); DamageScaling getScaling(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/StaticDamageType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/StaticDamageType.java index 5efe4a782..52a527f6d 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/StaticDamageType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/damagetype/StaticDamageType.java @@ -73,6 +73,7 @@ public DeathMessageType getDeathMessageType() { return this.deathMessageType; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticDamageType)) return false; @@ -85,6 +86,7 @@ public boolean deepEquals(Object obj) { return this.deathMessageType == that.deathMessageType; } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.messageId, this.scaling, this.exhaustion, this.effects, this.deathMessageType); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/DimensionType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/DimensionType.java index a05bb33b3..857bef8e0 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/DimensionType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/DimensionType.java @@ -20,6 +20,7 @@ import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTByte; @@ -36,7 +37,7 @@ import java.util.OptionalLong; -public interface DimensionType extends MappedEntity, CopyableEntity { +public interface DimensionType extends MappedEntity, CopyableEntity, DeepComparableEntity { OptionalLong getFixedTime(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/StaticDimensionType.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/StaticDimensionType.java index 362a11246..778b79ff0 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/StaticDimensionType.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/dimension/StaticDimensionType.java @@ -187,6 +187,7 @@ public int getMonsterSpawnBlockLightLimit() { return this.monsterSpawnBlockLightLimit; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticDimensionType)) return false; @@ -212,6 +213,7 @@ public boolean deepEquals(Object obj) { return Objects.equals(this.monsterSpawnLightLevel, that.monsterSpawnLightLevel); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.fixedTime, this.hasSkyLight, this.hasCeiling, this.ultraWarm, this.natural, this.coordinateScale, this.bedWorking, this.respawnAnchorWorking, this.minY, this.height, this.logicalHeight, this.infiniburnTag, this.effectsLocation, this.ambientLight, this.piglinSafe, this.hasRaids, this.monsterSpawnLightLevel, this.monsterSpawnBlockLightLimit); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/PaintingVariant.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/PaintingVariant.java index afb3d9a79..3eec7376d 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/PaintingVariant.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/PaintingVariant.java @@ -19,6 +19,7 @@ package com.github.retrooper.packetevents.protocol.world.painting; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -30,7 +31,7 @@ import com.github.retrooper.packetevents.wrapper.PacketWrapper; import org.jetbrains.annotations.Nullable; -public interface PaintingVariant extends MappedEntity, CopyableEntity { +public interface PaintingVariant extends MappedEntity, CopyableEntity, DeepComparableEntity { int getWidth(); diff --git a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/StaticPaintingVariant.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/StaticPaintingVariant.java index c7caacf01..9b6219f2d 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/StaticPaintingVariant.java +++ b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/painting/StaticPaintingVariant.java @@ -62,6 +62,7 @@ public ResourceLocation getAssetId() { return this.assetId; } + @Override public boolean deepEquals(Object obj) { if (this == obj) return true; if (!(obj instanceof StaticPaintingVariant)) return false; @@ -72,6 +73,7 @@ public boolean deepEquals(Object obj) { return this.assetId.equals(that.assetId); } + @Override public int deepHashCode() { return Objects.hash(super.hashCode(), this.width, this.height, this.assetId); } diff --git a/api/src/main/java/com/github/retrooper/packetevents/util/mappings/SynchronizedRegistriesHandler.java b/api/src/main/java/com/github/retrooper/packetevents/util/mappings/SynchronizedRegistriesHandler.java index bbde2b7d6..ec944f6aa 100644 --- a/api/src/main/java/com/github/retrooper/packetevents/util/mappings/SynchronizedRegistriesHandler.java +++ b/api/src/main/java/com/github/retrooper/packetevents/util/mappings/SynchronizedRegistriesHandler.java @@ -34,6 +34,7 @@ import com.github.retrooper.packetevents.protocol.item.trimpattern.TrimPattern; import com.github.retrooper.packetevents.protocol.item.trimpattern.TrimPatterns; import com.github.retrooper.packetevents.protocol.mapper.CopyableEntity; +import com.github.retrooper.packetevents.protocol.mapper.DeepComparableEntity; import com.github.retrooper.packetevents.protocol.mapper.MappedEntity; import com.github.retrooper.packetevents.protocol.nbt.NBT; import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; @@ -142,7 +143,7 @@ public interface NbtEntryDecoder { } @ApiStatus.Internal - public static final class RegistryEntry> { + public static final class RegistryEntry & DeepComparableEntity> { private final IRegistry baseRegistry; private final NbtEntryDecoder decoder; @@ -186,7 +187,7 @@ private void handleElement( if (element.getData() != null) { // data was provided, use registry element sent over network T value = this.decoder.decode(element.getData(), version, data); - if (!value.equals(copiedBaseEntry)) { + if (!value.deepEquals(copiedBaseEntry)) { // only define decoded value if it doesn't match the base // registry value this ensures we don't save everything twice, // if it has been already stored in memory