From f1f4ffe6b2b469b0fc9e44f27261e581ea8f6e4f Mon Sep 17 00:00:00 2001 From: booky10 Date: Fri, 30 Aug 2024 20:31:32 +0200 Subject: [PATCH 1/3] Implement DeepComparableEntity for all dynamic registry entries --- .../github/retrooper/packetevents/protocol/chat/ChatType.java | 3 ++- .../retrooper/packetevents/protocol/chat/StaticChatType.java | 2 ++ .../protocol/entity/wolfvariant/StaticWolfVariant.java | 2 ++ .../packetevents/protocol/entity/wolfvariant/WolfVariant.java | 3 ++- .../packetevents/protocol/item/banner/BannerPattern.java | 3 ++- .../protocol/item/banner/StaticBannerPattern.java | 2 ++ .../protocol/item/enchantment/type/EnchantmentType.java | 3 ++- .../protocol/item/enchantment/type/StaticEnchantmentType.java | 2 ++ .../packetevents/protocol/item/jukebox/IJukeboxSong.java | 4 +++- .../packetevents/protocol/item/jukebox/JukeboxSong.java | 2 ++ .../protocol/item/trimmaterial/StaticTrimMaterial.java | 2 ++ .../packetevents/protocol/item/trimmaterial/TrimMaterial.java | 3 ++- .../protocol/item/trimpattern/StaticTrimPattern.java | 2 ++ .../packetevents/protocol/item/trimpattern/TrimPattern.java | 3 ++- .../retrooper/packetevents/protocol/world/biome/Biome.java | 3 ++- .../packetevents/protocol/world/biome/StaticBiome.java | 2 ++ .../packetevents/protocol/world/damagetype/DamageType.java | 3 ++- .../protocol/world/damagetype/StaticDamageType.java | 2 ++ .../packetevents/protocol/world/dimension/DimensionType.java | 3 ++- .../protocol/world/dimension/StaticDimensionType.java | 2 ++ .../packetevents/protocol/world/painting/PaintingVariant.java | 3 ++- .../protocol/world/painting/StaticPaintingVariant.java | 2 ++ 22 files changed, 45 insertions(+), 11 deletions(-) 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 421637d369..e849aa9405 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 f57e7038ed..ed8914fb2a 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 7a8b4b4d70..5df5815340 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 2d1690201e..752a73d6c4 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 fc228b8eb7..dffdfa69f9 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 5b40bf0d87..cb203787fc 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 edff9da019..ea407dd12b 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 6f01b368b1..d90f4f0557 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 da6b0cb06a..3c43ab39cf 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 aaf2dfd06e..5934e14796 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 ca5928677f..09dd7649d6 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 bc1038e4c9..9460fda213 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 1f6a7f5869..1a1e55a1fa 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 d20290b1b7..8c38a8f6ce 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/world/biome/Biome.java b/api/src/main/java/com/github/retrooper/packetevents/protocol/world/biome/Biome.java index 739c2d470e..16701615e4 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 0e95c4d0fe..a395045b8c 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 84bd3a6bd3..8f88267718 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 5efe4a782c..52a527f6dd 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 a05bb33b30..857bef8e0c 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 362a112462..778b79ff02 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 afb3d9a793..3eec7376db 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 c7caacf011..9b6219f2d0 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); } From 4d7314e2d8811ec3210766011cfd847c6e3b6b73 Mon Sep 17 00:00:00 2001 From: booky10 Date: Fri, 30 Aug 2024 20:34:37 +0200 Subject: [PATCH 2/3] Check for deep equals before using vanilla registry element Could potentially solve #962, although I can't reproduce that issue This may be caused by two different changes to packetevents: 1. We did a little memory optimization so only elements different to the vanilly registry get stored 2. We fixed an issue where some elements would not equal the "same" vanilla element This could cause every custom element to just never be registered, so we now do explicit deep-equals checks before saving the vanilla element instead --- .../util/mappings/SynchronizedRegistriesHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 bbde2b7d6e..ec944f6aa8 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 From 2baaf18db64fdc80f6df2d95b0844fb06f15a43d Mon Sep 17 00:00:00 2001 From: booky10 Date: Sat, 21 Sep 2024 15:26:53 +0200 Subject: [PATCH 3/3] Fix missing DeepComparableEntity interface Caused by me just cherry-picking some commits from another branch --- .../protocol/mapper/DeepComparableEntity.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 api/src/main/java/com/github/retrooper/packetevents/protocol/mapper/DeepComparableEntity.java 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 0000000000..72eea53407 --- /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(); +}