Skip to content

Commit e9fc01a

Browse files
Attempted fix for forge not registering registries.
1 parent da9d461 commit e9fc01a

File tree

7 files changed

+30
-12
lines changed

7 files changed

+30
-12
lines changed

common-testmod/src/main/java/me/pandamods/test/TestMod.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@
2424
import me.pandamods.test.config.CommonTestConfig;
2525
import net.minecraft.core.MappedRegistry;
2626
import net.minecraft.core.Registry;
27+
import net.minecraft.core.registries.BuiltInRegistries;
28+
import net.minecraft.core.registries.Registries;
2729
import net.minecraft.resources.ResourceKey;
2830
import net.minecraft.resources.ResourceLocation;
31+
import net.minecraft.world.entity.Entity;
32+
import net.minecraft.world.entity.EntityType;
33+
import net.minecraft.world.entity.MobCategory;
2934

3035
public class TestMod {
3136
public static final String MOD_ID = "testmod";
@@ -41,9 +46,13 @@ public class TestMod {
4146
public static final DeferredObject<TestRegistry> TEST1 = TEST_REGISTER.register("test1", TestRegistry::new);
4247
public static final DeferredObject<TestRegistry> TEST2 = TEST_REGISTER.register("test2", TestRegistry::new);
4348

49+
public static final DeferredRegister<EntityType<?>> TEST_ENTITY_REGISTER = DeferredRegister.create(MOD_ID, Registries.ENTITY_TYPE);
50+
public static final DeferredObject<EntityType<?>> TEST3 = TEST_ENTITY_REGISTER.register("test3", () -> EntityType.Builder.createNothing(MobCategory.MISC).build("test3"));
51+
4452
public TestMod() {
4553
instance = this;
4654
TEST_REGISTER.register();
55+
TEST_ENTITY_REGISTER.register();
4756
}
4857

4958
public static ResourceLocation resourceLocation(String path) {

common/src/main/java/me/pandamods/pandalib/registry/DeferredObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public ResourceKey<?> getKey() {
5858
}
5959

6060
public ResourceKey<? extends Registry<?>> getRegistryKey() {
61-
return ResourceKey.createRegistryKey(key.location());
61+
return ResourceKey.createRegistryKey(key.registry());
6262
}
6363

6464
public Registry<?> getRegistry() {

fabric/src/main/java/me/pandamods/pandalib/fabric/platform/RegistrationHelperImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public <T> void registerNewRegistry(Registry<T> registry) {
4646
if (BuiltInRegistries.REGISTRY.containsKey(registryName))
4747
throw new IllegalStateException("Attempted duplicate registration of registry " + registryName);
4848

49-
((WritableRegistry) BuiltInRegistries.REGISTRY).register(registry.key(), registry, Lifecycle.stable());
49+
((WritableRegistry) BuiltInRegistries.REGISTRY).register(registry.key(), registry, registry.registryLifecycle());
5050
}
5151

5252
@Override

forge/src/main/java/me/pandamods/pandalib/forge/PandaLibForge.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public class PandaLibForge {
3131
public PandaLibForge() {
3232
IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
3333
EventBuses.registerModEventBus(PandaLib.MOD_ID, eventBus);
34-
3534
new PandaLib();
35+
3636
if (Services.REGISTRATION instanceof RegistrationHelperImpl helper) {
3737
eventBus.addListener(helper::registerEvent);
3838
MinecraftForge.EVENT_BUS.addListener(helper::addReloadListenerEvent);

forge/src/main/java/me/pandamods/pandalib/forge/mixin/NewRegistryEventMixin.java renamed to forge/src/main/java/me/pandamods/pandalib/forge/mixin/RegistryManagerMixin.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
import me.pandamods.pandalib.forge.platform.RegistrationHelperImpl;
1616
import me.pandamods.pandalib.platform.Services;
1717
import net.minecraftforge.registries.NewRegistryEvent;
18+
import net.minecraftforge.registries.RegistryManager;
1819
import org.spongepowered.asm.mixin.Mixin;
1920
import org.spongepowered.asm.mixin.injection.At;
2021
import org.spongepowered.asm.mixin.injection.Inject;
2122
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2223

23-
@Mixin(value = NewRegistryEvent.class, remap = false)
24-
public class NewRegistryEventMixin {
25-
@Inject(method = "fill", at = @At(value = "FIELD", target = "Lnet/minecraftforge/registries/NewRegistryEvent;registries:Ljava/util/List;"))
26-
public void registerRegistries(CallbackInfo ci) {
24+
@Mixin(value = RegistryManager.class, remap = false)
25+
public class RegistryManagerMixin {
26+
@Inject(method = "postNewRegistryEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/Registry;keySet()Ljava/util/Set;"))
27+
private static void registerRegistries(CallbackInfo ci) {
2728
if (Services.REGISTRATION instanceof RegistrationHelperImpl helper) {
2829
helper.registerNewRegistries();
2930
}

forge/src/main/java/me/pandamods/pandalib/forge/platform/RegistrationHelperImpl.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import me.pandamods.pandalib.platform.services.RegistrationHelper;
1717
import me.pandamods.pandalib.registry.DeferredObject;
1818
import net.minecraft.client.Minecraft;
19+
import net.minecraft.core.Holder;
20+
import net.minecraft.core.MappedRegistry;
1921
import net.minecraft.core.Registry;
2022
import net.minecraft.core.WritableRegistry;
2123
import net.minecraft.core.registries.BuiltInRegistries;
@@ -25,7 +27,7 @@
2527
import net.minecraft.server.packs.resources.PreparableReloadListener;
2628
import net.minecraft.server.packs.resources.ReloadableResourceManager;
2729
import net.minecraftforge.event.AddReloadListenerEvent;
28-
import net.minecraftforge.registries.RegisterEvent;
30+
import net.minecraftforge.registries.*;
2931

3032
import java.util.*;
3133
import java.util.function.Supplier;
@@ -62,11 +64,17 @@ public void registerEvent(RegisterEvent event) {
6264
pendingRegistries.values().forEach(pending -> pending.register(event));
6365
}
6466

65-
@SuppressWarnings({"rawtypes", "unchecked"})
67+
@SuppressWarnings({"deprecation", "unchecked", "rawtypes"})
6668
public void registerNewRegistries() {
67-
for (Registry registry : pendingRegistryTypes) {
68-
((WritableRegistry) BuiltInRegistries.REGISTRY).register(registry.key(), registry, Lifecycle.stable());
69+
if (BuiltInRegistries.REGISTRY instanceof MappedRegistry<?> rootRegistry)
70+
rootRegistry.unfreeze();
71+
72+
for (Registry<?> registry : pendingRegistryTypes) {
73+
((WritableRegistry) BuiltInRegistries.REGISTRY).register(registry.key(), registry, registry.registryLifecycle());
6974
}
75+
76+
if (BuiltInRegistries.REGISTRY instanceof MappedRegistry<?> rootRegistry)
77+
rootRegistry.freeze();
7078
}
7179

7280
public void addReloadListenerEvent(AddReloadListenerEvent event) {

forge/src/main/resources/pandalib.mixins.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"client": [
77
],
88
"mixins": [
9-
"NewRegistryEventMixin"
9+
"RegistryManagerMixin"
1010
],
1111
"injectors": {
1212
"defaultRequire": 1

0 commit comments

Comments
 (0)