mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Enhanced registries
This commit is contained in:
parent
7bf2be0ab9
commit
17fe7a31ed
6 changed files with 46 additions and 34 deletions
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.api.registry;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
|
@ -10,18 +12,21 @@ import com.simibubi.create.api.contraption.storage.item.MountedItemStorageType;
|
|||
import com.simibubi.create.content.kinetics.fan.processing.FanProcessingType;
|
||||
import com.simibubi.create.content.kinetics.mechanicalArm.ArmInteractionPointType;
|
||||
import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType;
|
||||
import com.simibubi.create.foundation.mixin.accessor.BuiltInRegistriesAccessor;
|
||||
|
||||
import net.minecraft.core.MappedRegistry;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.WritableRegistry;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
|
||||
/**
|
||||
* Static registries added by Create.
|
||||
*
|
||||
* @see CreateRegistries
|
||||
*/
|
||||
public class CreateBuiltInRegistries {
|
||||
public static final WritableRegistry<WritableRegistry<?>> ROOT_REGISTRY = getRootRegistry();
|
||||
|
||||
public static final Registry<ArmInteractionPointType> ARM_INTERACTION_POINT_TYPE = simple(CreateRegistries.ARM_INTERACTION_POINT_TYPE);
|
||||
public static final Registry<FanProcessingType> FAN_PROCESSING_TYPE = simple(CreateRegistries.FAN_PROCESSING_TYPE);
|
||||
public static final Registry<ItemAttributeType> ITEM_ATTRIBUTE_TYPE = simple(CreateRegistries.ITEM_ATTRIBUTE_TYPE);
|
||||
|
@ -36,12 +41,24 @@ public class CreateBuiltInRegistries {
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T> Registry<T> register(ResourceKey<Registry<T>> key, WritableRegistry<T> registry) {
|
||||
BuiltInRegistriesAccessor.getWRITABLE_REGISTRY().register(
|
||||
ROOT_REGISTRY.register(
|
||||
(ResourceKey<WritableRegistry<?>>) (Object) key, registry, Lifecycle.stable()
|
||||
);
|
||||
return registry;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static WritableRegistry<WritableRegistry<?>> getRootRegistry() {
|
||||
// an accessor can't be used here because BuiltInRegistries is loaded too early during datagen.
|
||||
try {
|
||||
Field field = BuiltInRegistries.class.getDeclaredField("WRITABLE_REGISTRY");
|
||||
field.setAccessible(true);
|
||||
return (WritableRegistry<WritableRegistry<?>>) field.get(null);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new RuntimeException("Create: Failed to get root registry", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void init() {
|
||||
// make sure the class is loaded.
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
package com.simibubi.create.foundation.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
import com.simibubi.create.api.registry.CreateBuiltInRegistries;
|
||||
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
|
||||
@Mixin(BuiltInRegistries.class)
|
||||
public class BuiltInRegistriesMixin {
|
||||
static {
|
||||
// Mixin merges static blocks.
|
||||
CreateBuiltInRegistries.init();
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package com.simibubi.create.foundation.mixin.accessor;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import net.minecraft.core.WritableRegistry;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
|
||||
@Mixin(BuiltInRegistries.class)
|
||||
public interface BuiltInRegistriesAccessor {
|
||||
@Accessor
|
||||
static WritableRegistry<WritableRegistry<?>> getWRITABLE_REGISTRY() {
|
||||
throw new AbstractMethodError();
|
||||
}
|
||||
}
|
3
src/main/resources/META-INF/coremods.json
Normal file
3
src/main/resources/META-INF/coremods.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"better_registry": "coremods/better_registry.js"
|
||||
}
|
24
src/main/resources/coremods/better_registry.js
Normal file
24
src/main/resources/coremods/better_registry.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI')
|
||||
|
||||
// Necessary to fix forge being a terrible loader
|
||||
function initializeCoreMod() {
|
||||
return {
|
||||
"registrycoremod": {
|
||||
'target': {
|
||||
'type': 'METHOD',
|
||||
'class': 'net.minecraft.core.registries.BuiltInRegistries',
|
||||
'methodName': '<clinit>',
|
||||
'methodDesc': '()V'
|
||||
},
|
||||
'transformer': function (method) {
|
||||
var CreateBuiltInRegistries = "com/simibubi/create/api/registry/CreateBuiltInRegistries";
|
||||
|
||||
var insn = ASMAPI.buildMethodCall(CreateBuiltInRegistries, "init", "()V", ASMAPI.MethodType.STATIC)
|
||||
|
||||
method.instructions.insertBefore(method.instructions.getLast(), insn)
|
||||
|
||||
return method;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,7 +9,6 @@
|
|||
"mixins": [
|
||||
"ArmorTrimMixin",
|
||||
"BlockItemMixin",
|
||||
"BuiltInRegistriesMixin",
|
||||
"ClientboundMapItemDataPacketMixin",
|
||||
"CustomItemUseEffectsMixin",
|
||||
"EntityMixin",
|
||||
|
@ -23,7 +22,6 @@
|
|||
"TestCommandMixin",
|
||||
"WaterWheelFluidSpreadMixin",
|
||||
"accessor.AbstractProjectileDispenseBehaviorAccessor",
|
||||
"accessor.BuiltInRegistriesAccessor",
|
||||
"accessor.DispenserBlockAccessor",
|
||||
"accessor.FallingBlockEntityAccessor",
|
||||
"accessor.FlowingFluidAccessor",
|
||||
|
|
Loading…
Add table
Reference in a new issue