diff --git a/injected_interfaces/interfaces.json b/injected_interfaces/interfaces.json index 27bd8ebcfc0..611ff67752d 100644 --- a/injected_interfaces/interfaces.json +++ b/injected_interfaces/interfaces.json @@ -1,7 +1,4 @@ { - "net/minecraft/core/MappedRegistry": [ - "com/gregtechceu/gtceu/core/IMappedRegistryAccess" - ], "net/minecraft/client/renderer/block/model/BakedQuad": [ "com/gregtechceu/gtceu/core/util/extensions/BakedQuadExt" ], diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java index 04e65b368ea..7aeb11eb3b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.data.chemical.material; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.core.IMappedRegistryAccess; +import com.gregtechceu.gtceu.core.mixins.MappedRegistryAccessor; import net.minecraft.resources.ResourceLocation; @@ -83,7 +83,7 @@ default Material getMaterial(String name) { /** * * @return {@code true} if this registry is frozen, {@code false} otherwise - * @see IMappedRegistryAccess#gtceu$isFrozen() + * @see MappedRegistryAccessor#isFrozen() */ boolean isFrozen(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java index 55c3eed85cb..2a55567e8d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistry; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.core.mixins.MappedRegistryAccessor; import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; @@ -110,7 +111,7 @@ public Material getDefaultFallback() { @Override public boolean isFrozen() { - return this.gtceu$isFrozen(); + return ((MappedRegistryAccessor) (Object) this).isFrozen(); } public void close() { diff --git a/src/main/java/com/gregtechceu/gtceu/core/IMappedRegistryAccess.java b/src/main/java/com/gregtechceu/gtceu/core/IMappedRegistryAccess.java deleted file mode 100644 index 92abc3bea5b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/core/IMappedRegistryAccess.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.gregtechceu.gtceu.core; - -import net.minecraft.core.Holder; -import net.minecraft.core.RegistrationInfo; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; - -import it.unimi.dsi.fastutil.objects.ObjectList; -import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import org.jetbrains.annotations.TestOnly; -import org.jetbrains.annotations.VisibleForTesting; - -import java.util.Map; - -public interface IMappedRegistryAccess { - - default boolean gtceu$isFrozen() { - throw new AssertionError(); - } - - default ObjectList> gtceu$getById() { - throw new AssertionError(); - } - - default Reference2IntMap gtceu$getToId() { - throw new AssertionError(); - } - - default Map> gtceu$getByLocation() { - throw new AssertionError(); - } - - default Map, Holder.Reference> gtceu$getByKey() { - throw new AssertionError(); - } - - default Map> gtceu$getByValue() { - throw new AssertionError(); - } - - default Map, RegistrationInfo> gtceu$getRegistrationInfos() { - throw new AssertionError(); - } - - /// FOR TESTING ONLY; THIS WILL FUCK UP THINGS IF THINGS ARE IN USE! - @TestOnly - @VisibleForTesting - default void gtceu$remove(ResourceKey key) { - if (this.gtceu$isFrozen()) { - throw new IllegalStateException("Cannot remove entry from a frozen registry: " + key); - } - - Holder.Reference ref = this.gtceu$getByKey().remove(key); - if (ref == null) { - return; // not present, nothing to remove - } - - this.gtceu$getByLocation().remove(key.location()); - - T value = ref.value(); - this.gtceu$getByValue().remove(value); - - int id = this.gtceu$getToId().removeInt(value); - ObjectList> byId = this.gtceu$getById(); - - if (id >= 0 && id < byId.size()) { - byId.set(id, null); - } - - this.gtceu$getRegistrationInfos().remove(key); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryAccessor.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryAccessor.java new file mode 100644 index 00000000000..0930af0b037 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryAccessor.java @@ -0,0 +1,13 @@ +package com.gregtechceu.gtceu.core.mixins; + +import net.minecraft.core.MappedRegistry; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(MappedRegistry.class) +public interface MappedRegistryAccessor { + + @Accessor + boolean isFrozen(); +} diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryMixin.java deleted file mode 100644 index 065155b35fc..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/MappedRegistryMixin.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.gregtechceu.gtceu.core.mixins; - -import com.gregtechceu.gtceu.core.IMappedRegistryAccess; - -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.RegistrationInfo; -import net.minecraft.core.WritableRegistry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.neoforged.neoforge.registries.BaseMappedRegistry; - -import it.unimi.dsi.fastutil.objects.ObjectList; -import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Map; - -@SuppressWarnings("UnstableApiUsage") -@Mixin(MappedRegistry.class) -public abstract class MappedRegistryMixin extends BaseMappedRegistry - implements WritableRegistry, IMappedRegistryAccess { - - @Shadow - private boolean frozen; - @Shadow - @Final - private ObjectList> byId; - @Shadow - @Final - private Reference2IntMap toId; - @Shadow - @Final - private Map> byLocation; - @Shadow - @Final - private Map, Holder.Reference> byKey; - @Shadow - @Final - private Map> byValue; - @Shadow - @Final - private Map, RegistrationInfo> registrationInfos; - - @Override - public boolean gtceu$isFrozen() { - return this.frozen; - } - - @Override - public ObjectList> gtceu$getById() { - return this.byId; - } - - @Override - public Reference2IntMap gtceu$getToId() { - return this.toId; - } - - @Override - public Map> gtceu$getByLocation() { - return this.byLocation; - } - - @Override - public Map, Holder.Reference> gtceu$getByKey() { - return this.byKey; - } - - @Override - public Map> gtceu$getByValue() { - return this.byValue; - } - - @Override - public Map, RegistrationInfo> gtceu$getRegistrationInfos() { - return this.registrationInfos; - } -} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index 100c0862820..57d377b62a0 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -53,7 +53,7 @@ "LevelMixin", "LootPoolAccessor", "MapColorAccessor", - "MappedRegistryMixin", + "MappedRegistryAccessor", "OreConfigurationMixin", "OreVeinifierMixin", "PotionBrewingAccessor",