1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-10-27 03:47:38 +00:00

Update to latest Forge

This fixes the issue with DeferredRegister crashing on non-wrapped
registries.
This commit is contained in:
Jonathan Coates
2022-12-15 17:53:50 +00:00
parent 1276478deb
commit 2b237332ce
4 changed files with 18 additions and 46 deletions

View File

@@ -65,9 +65,10 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistry;
import net.minecraftforge.registries.RegisterEvent;
import net.minecraftforge.registries.RegistryManager;
import net.minecraftforge.registries.RegistryObject;
import javax.annotation.Nullable;
import java.util.*;
@@ -99,7 +100,7 @@ public class PlatformHelperImpl implements PlatformHelper {
@Override
public <T> RegistrationHelper<T> createRegistrationHelper(ResourceKey<Registry<T>> registry) {
return new RegistrationHelperImpl<>(registry);
return new RegistrationHelperImpl<>(DeferredRegister.create(registry, ComputerCraftAPI.MOD_ID));
}
@Nullable
@@ -366,55 +367,27 @@ public class PlatformHelperImpl implements PlatformHelper {
}
}
// TODO: Switch back to using a DeferredRegistry: Right now it's broken for some registry types.
private static final class RegistrationHelperImpl<T> implements RegistrationHelper<T> {
private final ResourceKey<Registry<T>> registry;
private final List<RegistryEntryImpl<? extends T>> entries = new ArrayList<>();
private RegistrationHelperImpl(ResourceKey<Registry<T>> registry) {
this.registry = registry;
}
private record RegistrationHelperImpl<T>(DeferredRegister<T> registry) implements RegistrationHelper<T> {
@Override
public <U extends T> RegistryEntry<U> register(String name, Supplier<U> create) {
var entry = new RegistryEntryImpl<>(new ResourceLocation(ComputerCraftAPI.MOD_ID, name), create);
entries.add(entry);
return entry;
return new RegistryEntryImpl<>(registry().register(name, create));
}
@Override
public void register() {
FMLJavaModLoadingContext.get().getModEventBus().addListener((RegisterEvent event) -> {
event.register(registry, helper -> {
for (var object : entries) object.register(helper);
});
});
registry().register(FMLJavaModLoadingContext.get().getModEventBus());
}
}
private static final class RegistryEntryImpl<T> implements RegistryEntry<T> {
private final ResourceLocation id;
private final Supplier<T> supplier;
private @Nullable T instance;
RegistryEntryImpl(ResourceLocation id, Supplier<T> supplier) {
this.id = id;
this.supplier = supplier;
}
void register(RegisterEvent.RegisterHelper<? super T> registry) {
registry.register(id, instance = supplier.get());
}
private record RegistryEntryImpl<T>(RegistryObject<T> object) implements RegistryEntry<T> {
@Override
public ResourceLocation id() {
return id;
return object().getId();
}
@Override
public T get() {
if (instance == null) throw new IllegalStateException(id + " has not been constructed yet");
return instance;
return object().get();
}
}