CoreModn't

This commit is contained in:
IThundxr 2025-02-21 16:42:07 -05:00
parent a2ab54e18a
commit 89ba8a76bc
Failed to generate hash of commit
10 changed files with 76 additions and 74 deletions

View file

@ -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
}
}

View file

@ -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.
}
}

View file

@ -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());

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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

View file

@ -1,3 +0,0 @@
{
"better_registry": "coremods/better_registry.js"
}

View file

@ -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;
}
}
}
}

View file

@ -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",