diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java index 7dd86cc66be..6cfd5c32c89 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.recipe.ConsumedInputsData; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.api.sync_system.TypeDeclaration; @@ -177,7 +176,6 @@ public static void registerGenericTransformerSupplier(Class type, Supplie registerCodecTransformer(MonitorGroup.class, MonitorGroup.CODEC, MonitorGroup.STREAM_CODEC); registerCodecTransformer(ConsumedInputsData.class, ConsumedInputsData.CODEC, ByteBufCodecs.fromCodecWithRegistries(ConsumedInputsData.CODEC)); - registerTransformer(GTRecipeType.class, new RegistryReferenceTransformer<>(GTRegistries.Keys.RECIPE_TYPE, GTRecipeType::getRegistryName)); registerTransformer(Material.class, new RegistryReferenceTransformer<>(GTRegistries.Keys.MATERIAL, Material::getResourceLocation)); // spotless:on diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java index d83e02c2eaf..9283b6752ff 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java @@ -1,29 +1,51 @@ package com.gregtechceu.gtceu.integration.kjs; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.integration.kjs.events.*; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import dev.latvian.mods.kubejs.event.EventGroup; import dev.latvian.mods.kubejs.event.EventHandler; import dev.latvian.mods.kubejs.event.EventTargetType; import dev.latvian.mods.kubejs.event.TargetedEventHandler; +import dev.latvian.mods.kubejs.util.Cast; +import dev.latvian.mods.rhino.type.TypeInfo; public interface GTCEuStartupEvents { + EventTargetType>> REGISTRY_ASSUME_GT = Cast.to(EventTargetType.create(ResourceKey.class) + .transformer(GTCEuStartupEvents::toRegistryKeyAssumeGTNamespace) + .identity() + .describeType(TypeInfo.of(ResourceKey.class) + .withParams(TypeInfo.of(Registry.class)))); + EventGroup GROUP = EventGroup.of("GTCEuStartupEvents"); EventHandler MATERIAL_ICON_INFO = GROUP.startup("materialIconInfo", () -> MaterialIconInfoEventJS.class); EventHandler WORLD_GEN_LAYERS = GROUP.startup("worldGenLayers", () -> WorldGenLayerEventJS.class); TargetedEventHandler>> REGISTRY = GROUP.startup("registry", () -> GTRegistryKubeEvent.class) - .requiredTarget(EventTargetType.REGISTRY); - EventHandler MATERIAL_MODIFICATION = GROUP.startup("materialModification", - () -> MaterialModificationEventJS.class); + .requiredTarget(REGISTRY_ASSUME_GT); + EventHandler MATERIAL_MODIFICATION = GROUP.startup("materialModification", () -> MaterialModificationEventJS.class); EventHandler CRAFTING_COMPONENTS = GROUP.startup("craftingComponents", () -> CraftingComponentsEventJS.class); EventHandler REGISTER_WOODS = GROUP.startup("registerWoods", () -> RegisterWoodsEventJS.class); EventHandler MACHINE_MODIFICATION = GROUP.startup("machineModification", () -> ModifyMachineEventJS.class); EventHandler REGISTER_SPOILABLES = GROUP.startup("registerSpoilables", () -> RegisterSpoilablesEventJS.class); + + @SuppressWarnings("rawtypes") + private static ResourceKey> toRegistryKeyAssumeGTNamespace(Object object) { + return switch (object) { + case null -> null; + case ResourceKey rl -> rl; + case ResourceLocation rl -> ResourceKey.createRegistryKey(rl); + default -> { + String s = object.toString(); + yield s.isBlank() ? null : ResourceKey.createRegistryKey(GTCEu.id(s)); + } + }; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index f53c1f0aa5c..b83a53858dc 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -116,11 +116,15 @@ import dev.latvian.mods.kubejs.recipe.schema.RecipeSchemaRegistry; import dev.latvian.mods.kubejs.registry.BuilderTypeRegistry; import dev.latvian.mods.kubejs.registry.RegistryObjectStorage; +import dev.latvian.mods.kubejs.registry.RegistryType; import dev.latvian.mods.kubejs.registry.ServerRegistryRegistry; import dev.latvian.mods.kubejs.script.BindingRegistry; import dev.latvian.mods.kubejs.script.TypeWrapperRegistry; +import dev.latvian.mods.kubejs.util.ID; import dev.latvian.mods.kubejs.util.RegistryAccessContainer; +import dev.latvian.mods.rhino.Context; import dev.latvian.mods.rhino.Wrapper; +import dev.latvian.mods.rhino.type.TypeInfo; public class GregTechKubeJSPlugin implements KubeJSPlugin { @@ -135,6 +139,9 @@ public void registerBuilderTypes(BuilderTypeRegistry registry) { reg.add(GTCEu.id("ore"), OreTagPrefixBuilder.class, OreTagPrefixBuilder::new); }); + registry.of(Registries.RECIPE_TYPE, reg -> { + reg.add(GTCEu.id("machine"), GTRecipeTypeBuilder.class, GTRecipeTypeBuilder::new); + }); registry.addDefault(GTRegistries.Keys.RECIPE_TYPE, GTRecipeTypeBuilder.class, GTRecipeTypeBuilder::new); registry.addDefault(GTRegistries.Keys.RECIPE_CATEGORY, GTRecipeCategoryBuilder.class, GTRecipeCategoryBuilder::new); @@ -339,7 +346,22 @@ private void registryObjectTypeWrapper(TypeWrapperRegistry typeWrappers, Cla public void registerTypeWrappers(TypeWrapperRegistry registry) { registry.register(GTResourceLocation.class, GTResourceLocation::wrap); - registryObjectTypeWrapper(registry, GTRecipeType.class, GTRegistries.Keys.RECIPE_TYPE); + registry.register(GTRecipeType.class, (Context cx, Object from, TypeInfo target) -> { + if (ID.isKey(from)) { + // if it's an ID, make it default to the GT namespace + GTResourceLocation wrapper = GTResourceLocation.wrap(from); + if (wrapper != null) from = wrapper.wrapped(); + } + + // first convert + Object o = cx.jsToJava(from, RegistryType.ofKey(Registries.RECIPE_TYPE).type()); + if (o instanceof GTRecipeType gtType) { + return gtType; + } else { + cx.reportConversionError(from, target); + return null; + } + }); registryObjectTypeWrapper(registry, GTRecipeCategory.class, GTRegistries.Keys.RECIPE_CATEGORY); registryObjectTypeWrapper(registry, ChanceLogic.class, GTRegistries.Keys.CHANCE_LOGIC); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java index 0c06e52770c..ffc27e9bc7f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java @@ -51,6 +51,8 @@ public GTRecipeTypeBuilder(ResourceLocation id) { this.maxTooltips = 4; this.smallRecipeMap = null; this.iconSupplier = null; + + this.dummyBuilder = true; } public GTRecipeTypeBuilder category(String category) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/KubeGTRegistryEventHandler.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/KubeGTRegistryEventHandler.java index a776583efe8..5412ac5dcb7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/KubeGTRegistryEventHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/helpers/KubeGTRegistryEventHandler.java @@ -31,7 +31,7 @@ public class KubeGTRegistryEventHandler { @SubscribeEvent(priority = EventPriority.LOW) public static void registerAll(RegisterEvent event) { // only post the GT registry event for GT registries - if (!GTRegistries.getRegistries().contains(event.getRegistry())) { + if (!GTRegistries.getRegistryOrder().contains(event.getRegistryKey().location())) { return; }