diff --git a/common/src/main/java/io/wispforest/accessories/mixin/DataComponentPatchAccessor.java b/common/src/main/java/io/wispforest/accessories/mixin/DataComponentPatchAccessor.java new file mode 100644 index 000000000..f4d9c3092 --- /dev/null +++ b/common/src/main/java/io/wispforest/accessories/mixin/DataComponentPatchAccessor.java @@ -0,0 +1,15 @@ +package io.wispforest.accessories.mixin; + +import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponentType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Optional; + +@Mixin(DataComponentPatch.class) +public interface DataComponentPatchAccessor { + @Accessor + Reference2ObjectMap, Optional> getMap(); +} diff --git a/common/src/main/java/io/wispforest/accessories/mixin/PatchedDataComponentMapMixin.java b/common/src/main/java/io/wispforest/accessories/mixin/PatchedDataComponentMapMixin.java index 31c2269f3..31cd3017c 100644 --- a/common/src/main/java/io/wispforest/accessories/mixin/PatchedDataComponentMapMixin.java +++ b/common/src/main/java/io/wispforest/accessories/mixin/PatchedDataComponentMapMixin.java @@ -19,10 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; @Mixin(PatchedDataComponentMap.class) public abstract class PatchedDataComponentMapMixin implements PatchedDataComponentMapExtension { @@ -96,7 +93,11 @@ public abstract class PatchedDataComponentMapMixin implements PatchedDataCompone this.inApplyPatchLock = false; - var changedDataTypes = (List>) (List) patch.entrySet().stream().map(Map.Entry::getKey).toList(); + if (this.mutationEvent == null) { + return; + } + + var changedDataTypes = new ArrayList<>(((DataComponentPatchAccessor) (Object) patch).getMap().keySet()); this.accessories$handleMutationEvent(changedDataTypes); } @@ -114,7 +115,11 @@ public abstract class PatchedDataComponentMapMixin implements PatchedDataCompone private void accessories$updateChangeValue_restorePatch(DataComponentPatch patch, CallbackInfo ci){ this.changeCheckStack = true; - var changedDataTypes = (List>) (List) patch.entrySet().stream().map(Map.Entry::getKey).toList(); + if (this.mutationEvent == null) { + return; + } + + var changedDataTypes = new ArrayList<>(((DataComponentPatchAccessor) (Object) patch).getMap().keySet()); this.accessories$handleMutationEvent(changedDataTypes); } diff --git a/common/src/main/resources/accessories-common.mixins.json b/common/src/main/resources/accessories-common.mixins.json index cec805390..de925b22b 100644 --- a/common/src/main/resources/accessories-common.mixins.json +++ b/common/src/main/resources/accessories-common.mixins.json @@ -46,10 +46,10 @@ "mixins": [ "AbstractContainerMenuMixin", "ApplyBonusCountMixin", - "TooltipFlagMixin", "CommandSelectionAccessor", "CraftingMenuAccessor", "CriteriaTriggersAccessor", + "DataComponentPatchAccessor", "DataPackContentsMixin", "DefaultDispenseItemBehaviorAccessor", "DispenserBlockMixin", @@ -63,6 +63,8 @@ "EquipmentSlotMixin", "EquipmentSlotTypeMixin", "FileToIdConverterMixin", + "GameRulesAccessor", + "GameRulesAccessor$BooleanValueAccessor", "HorseInventoryMenuAccessor", "InventoryMixin", "ItemStackAccessor", @@ -79,8 +81,7 @@ "SimpleJsonResourceReloadListenerAccessor", "SimpleJsonResourceReloadListenerMixin", "StateHolderAccessor", - "GameRulesAccessor", - "GameRulesAccessor$BooleanValueAccessor", + "TooltipFlagMixin", "owo.ConfigWrapperAccessor", "owo.DumpdataCommandMixin", "owo.NbtDeserializerMixin",