mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
CoreModn't
This commit is contained in:
parent
a2ab54e18a
commit
89ba8a76bc
10 changed files with 76 additions and 74 deletions
11
build.gradle
11
build.gradle
|
@ -109,7 +109,7 @@ legacyForge {
|
|||
gameDirectory = project.file('run')
|
||||
systemProperty 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
|
||||
systemProperty 'forge.logging.console.level', 'debug'
|
||||
programArguments = ["--mod", mod_id, "--all", "--output", file("src/generated/resources/").getAbsolutePath(), "--existing", file("src/main/resources").getAbsolutePath()]
|
||||
programArguments.addAll("--mod", mod_id as String, "--all", "--output", file("src/generated/resources/").getAbsolutePath(), "--existing", file("src/main/resources").getAbsolutePath())
|
||||
}
|
||||
|
||||
gameTestServer {
|
||||
|
@ -132,7 +132,8 @@ repositories {
|
|||
maven { url = "https://api.modrinth.com/maven" }
|
||||
maven { url = "https://maven.saps.dev/releases" } // FTB Mods
|
||||
maven { url = "https://maven.architectury.dev" } // Arch API
|
||||
maven { url = "https://jm.gserv.me/repository/maven-public" // JourneyMap
|
||||
maven {
|
||||
url = "https://jm.gserv.me/repository/maven-public" // JourneyMap
|
||||
content {
|
||||
includeGroup "info.journeymap"
|
||||
includeGroup "mysticdrew"
|
||||
|
@ -294,7 +295,7 @@ jar {
|
|||
|
||||
manifest.attributes([
|
||||
"MixinConfigs": "create.mixins.json",
|
||||
"Git-Hash": gitHash
|
||||
"Git-Hash" : gitHash
|
||||
])
|
||||
}
|
||||
|
||||
|
@ -346,7 +347,7 @@ String calculateGitHash() {
|
|||
commandLine("git", "rev-parse", "HEAD")
|
||||
}
|
||||
return output.standardOutput.asText.get().trim()
|
||||
} catch(Throwable ignored) {
|
||||
} catch (Throwable ignored) {
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
@ -360,7 +361,7 @@ boolean hasUnstaged() {
|
|||
if (!result.isEmpty())
|
||||
println("Found stageable results:\n ${result}\n")
|
||||
return !result.isEmpty()
|
||||
} catch(Throwable ignored) {
|
||||
} catch (Throwable ignored) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package com.simibubi.create.api.registry;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
|
@ -13,11 +11,11 @@ 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;
|
||||
|
||||
/**
|
||||
|
@ -26,8 +24,6 @@ import net.minecraft.resources.ResourceKey;
|
|||
* @see CreateRegistries
|
||||
*/
|
||||
public class CreateBuiltInRegistries {
|
||||
private 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);
|
||||
|
@ -47,27 +43,15 @@ public class CreateBuiltInRegistries {
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T> Registry<T> register(ResourceKey<Registry<T>> key, WritableRegistry<T> registry) {
|
||||
ROOT_REGISTRY.register(
|
||||
BuiltInRegistriesAccessor.create$getWRITABLE_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.
|
||||
// this method is called at the tail of BuiltInRegistries, injected by a coremod. See it for details.
|
||||
// this method is called at the tail of BuiltInRegistries, injected by BuiltInRegistriesMixin.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.lang.invoke.VarHandle;
|
|||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.foundation.mixin.accessor.ItemModelGeneratorsAccessor;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateItemModelProvider;
|
||||
|
||||
|
@ -14,6 +15,7 @@ import net.minecraft.data.models.model.TextureMapping;
|
|||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
||||
import net.minecraftforge.client.model.generators.ItemModelBuilder;
|
||||
import net.minecraftforge.client.model.generators.ModelBuilder;
|
||||
|
||||
|
@ -32,7 +34,7 @@ public class TrimmableArmorModelGenerator {
|
|||
public static <T extends ArmorItem> void generate(DataGenContext<Item, T> c, RegistrateItemModelProvider p) {
|
||||
T item = c.get();
|
||||
ItemModelBuilder builder = p.generated(c);
|
||||
for (ItemModelGenerators.TrimModelData data : ItemModelGenerators.GENERATED_TRIM_MODELS) {
|
||||
for (ItemModelGenerators.TrimModelData data : ItemModelGeneratorsAccessor.create$getGENERATED_TRIM_MODELS()) {
|
||||
ResourceLocation modelLoc = ModelLocationUtils.getModelLocation(item);
|
||||
ResourceLocation textureLoc = TextureMapping.getItemTexture(item);
|
||||
String trimId = data.name(item.getMaterial());
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
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 {
|
||||
CreateBuiltInRegistries.init();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
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("WRITABLE_REGISTRY")
|
||||
static WritableRegistry<WritableRegistry<?>> create$getWRITABLE_REGISTRY() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.simibubi.create.foundation.mixin.accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import net.minecraft.data.models.ItemModelGenerators;
|
||||
import net.minecraft.data.models.ItemModelGenerators.TrimModelData;
|
||||
|
||||
@Mixin(ItemModelGenerators.class)
|
||||
public interface ItemModelGeneratorsAccessor {
|
||||
@Accessor("GENERATED_TRIM_MODELS")
|
||||
static List<TrimModelData> create$getGENERATED_TRIM_MODELS() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
|
@ -37,6 +37,3 @@ public net.minecraft.client.gui.components.CommandSuggestions$SuggestionsList <i
|
|||
public-f net.minecraft.data.recipes.RecipeProvider m_6055_()Ljava/lang/String; # getName
|
||||
|
||||
public net.minecraft.data.models.ItemModelGenerators$TrimModelData
|
||||
|
||||
# Using a static accessor here doesn't work, no idea why but will have to debug it later
|
||||
public net.minecraft.data.models.ItemModelGenerators f_265952_ # GENERATED_TRIM_MODELS
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"better_registry": "coremods/better_registry.js"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI')
|
||||
|
||||
// this is terrible, but Forge has forced our hands.
|
||||
// for some reason, Forge loads half the game with Bootstrap.bootStrap *before* loading mods during datagen.
|
||||
// this is not the case in other entrypoints.
|
||||
// this makes mixins to some important places, like BuiltInRegistries, impossible since mixin isn't
|
||||
// initialized when the class is loaded.
|
||||
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,6 +9,7 @@
|
|||
"mixins": [
|
||||
"ArmorTrimMixin",
|
||||
"BlockItemMixin",
|
||||
"BuiltInRegistriesMixin",
|
||||
"ClientboundMapItemDataPacketMixin",
|
||||
"CustomItemUseEffectsMixin",
|
||||
"EntityMixin",
|
||||
|
@ -22,11 +23,13 @@
|
|||
"TestCommandMixin",
|
||||
"WaterWheelFluidSpreadMixin",
|
||||
"accessor.AbstractProjectileDispenseBehaviorAccessor",
|
||||
"accessor.BuiltInRegistriesAccessor",
|
||||
"accessor.DispenserBlockAccessor",
|
||||
"accessor.FallingBlockEntityAccessor",
|
||||
"accessor.FlowingFluidAccessor",
|
||||
"accessor.FluidInteractionRegistryAccessor",
|
||||
"accessor.GameTestHelperAccessor",
|
||||
"accessor.ItemModelGeneratorsAccessor",
|
||||
"accessor.LivingEntityAccessor",
|
||||
"accessor.NbtAccounterAccessor",
|
||||
"accessor.ServerLevelAccessor",
|
||||
|
|
Loading…
Add table
Reference in a new issue