Fix KubeJS plugin
This commit is contained in:
parent
2b6bf541c6
commit
8149c8c896
25
build.gradle
25
build.gradle
|
|
@ -11,6 +11,7 @@ base {
|
|||
}
|
||||
|
||||
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
|
||||
java.toolchain.vendor = JvmVendorSpec.JETBRAINS
|
||||
java.withSourcesJar()
|
||||
|
||||
neoForge {
|
||||
|
|
@ -60,16 +61,6 @@ neoForge {
|
|||
|
||||
// Include resources generated by data generators.
|
||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||
// Exclude KubeJS compat till they update todo remove when KubeJS updates
|
||||
// If IntelliJ ignores this, you have to change Gradle settings to build projects using Gradle instead of IntelliJ
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
exclude 'thedarkcolour/exdeorum/compat/kubejs/'
|
||||
exclude 'thedarkcolour/exdeorum/compat/top/'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
|
@ -124,9 +115,9 @@ repositories {
|
|||
|
||||
dependencies {
|
||||
// TOP OPTIONAL
|
||||
//compileOnly("mcjty.theoneprobe:theoneprobe:${mc_version}_neo-${top_version}") {
|
||||
// transitive = false
|
||||
//}
|
||||
compileOnly("mcjty.theoneprobe:theoneprobe:${mc_version}_neo-${top_version}") {
|
||||
transitive = false
|
||||
}
|
||||
// JADE OPTIONAL
|
||||
compileOnly("curse.maven:jade-324717:5109393")
|
||||
// JEI OPTIONAL
|
||||
|
|
@ -139,10 +130,10 @@ dependencies {
|
|||
compileOnly("dev.emi:emi-neoforge:${emi_version}:api")
|
||||
compileOnly("dev.emi:emi-neoforge:${emi_version}")
|
||||
//implementation("curse.maven:reipc-521393:4837449")
|
||||
// KubeJS OPTIONAL todo add when KubeJS updates
|
||||
//implementation("dev.architectury:architectury-neoforge:${architectury_version}")
|
||||
//implementation("dev.latvian.mods:rhino-neoforge:${rhino_version}")
|
||||
//implementation("dev.latvian.mods:kubejs-neoforge:${kubejs_version}")
|
||||
// KubeJS OPTIONAL
|
||||
implementation("dev.architectury:architectury-neoforge:${architectury_version}")
|
||||
implementation "curse.maven:rhino-416294:5554415"
|
||||
implementation("dev.latvian.mods:kubejs-neoforge:${kubejs_version}")
|
||||
|
||||
// ModKit DEV ONLY
|
||||
implementation('com.github.thedarkcolour:ModKit:81a0889b26')
|
||||
|
|
|
|||
|
|
@ -4,19 +4,19 @@ org.gradle.jvmargs=-Xmx3G
|
|||
org.gradle.parallel=true
|
||||
|
||||
mc_version=1.21
|
||||
neo_version=21.0.66-beta
|
||||
neo_version=21.0.147
|
||||
neo_version_range=[21,)
|
||||
loader_version_range=[3,)
|
||||
|
||||
jei_version=19.2.0.21
|
||||
jei_version=19.5.3.67
|
||||
rei_version=14.0.688
|
||||
emi_version=1.1.7+1.21
|
||||
cloth_config_version=15.0.127
|
||||
top_version=11.0.1-2
|
||||
top_version=12.0.3-5
|
||||
|
||||
kubejs_version=2001.6.3-build.47
|
||||
rhino_version=2004.2.3-build.4
|
||||
architectury_version=11.1.17
|
||||
kubejs_version=2100.7.0-build.119
|
||||
#rhino_version=2004.2.3-build.4
|
||||
architectury_version=13.0.6
|
||||
|
||||
parchment_minecraft_version=1.20.6
|
||||
parchment_mappings_version=2024.06.02
|
||||
|
|
|
|||
|
|
@ -50,4 +50,5 @@ public class ModIds {
|
|||
public static final String CYCLIC = "cyclic";
|
||||
public static final String SKYBLOCK_BUILDER = "skyblockbuilder";
|
||||
public static final String IMMERSIVE_ENGINEERING = "immersiveengineering";
|
||||
public static final String KUBEJS = "kubejs";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,8 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.jade;
|
||||
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.enchantment.ItemEnchantments;
|
||||
import net.minecraft.world.phys.Vec2;
|
||||
import snownee.jade.api.BlockAccessor;
|
||||
import snownee.jade.api.IBlockComponentProvider;
|
||||
|
|
|
|||
|
|
@ -18,37 +18,31 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.kubejs;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mojang.serialization.JsonOps;
|
||||
import dev.latvian.mods.kubejs.bindings.event.ServerEvents;
|
||||
import dev.latvian.mods.kubejs.recipe.RecipesEventJS;
|
||||
import dev.latvian.mods.kubejs.recipe.ReplacementMatch;
|
||||
import dev.latvian.mods.kubejs.recipe.filter.RecipeFilter;
|
||||
import dev.latvian.mods.kubejs.recipe.RecipesKubeEvent;
|
||||
import dev.latvian.mods.kubejs.recipe.filter.RecipeFilterParseEvent;
|
||||
import dev.latvian.mods.kubejs.recipe.match.ReplacementMatchInfo;
|
||||
import dev.latvian.mods.kubejs.script.ScriptType;
|
||||
import dev.latvian.mods.rhino.Context;
|
||||
import dev.latvian.mods.rhino.util.HideFromJS;
|
||||
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
|
||||
import net.minecraft.world.item.crafting.RecipeType;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.Property;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
import thedarkcolour.exdeorum.recipe.BlockPredicate;
|
||||
import thedarkcolour.exdeorum.recipe.RecipeUtil;
|
||||
import thedarkcolour.exdeorum.recipe.crucible.FinishedCrucibleHeatRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.crucible.CrucibleHeatRecipe;
|
||||
import thedarkcolour.exdeorum.registry.ERecipeTypes;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
class ExDeorumKubeJsBindings {
|
||||
static {
|
||||
RecipeFilter.PARSE.register((ctx, filters, map) -> {
|
||||
var sieveMesh = map.get("sieve_mesh");
|
||||
if (sieveMesh != null) {
|
||||
filters.add(new SieveMeshFilter(ReplacementMatch.of(sieveMesh)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setCrucibleHeatValue(Block block, int value) {
|
||||
setCrucibleHeatValueForBlock(block, value);
|
||||
}
|
||||
|
|
@ -62,7 +56,7 @@ class ExDeorumKubeJsBindings {
|
|||
for (Property prop : state.getProperties()) {
|
||||
bypassTypeChecking(properties, prop, state);
|
||||
}
|
||||
event.custom(new FinishedCrucibleHeatRecipe(null, BlockPredicate.blockState(state.getBlock(), properties.build()), value).serializeRecipe());
|
||||
event.custom(null, (JsonObject) CrucibleHeatRecipe.CODEC.encoder().encodeStart(JsonOps.INSTANCE, new CrucibleHeatRecipe(BlockPredicate.blockState(state.getBlock(), properties.build().get()), value)).result().get());
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -71,14 +65,13 @@ class ExDeorumKubeJsBindings {
|
|||
properties.hasProperty(prop, prop.getName(state.getValue(prop)));
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
public void setCrucibleHeatValueForBlock(Block block, int value) {
|
||||
onRecipesEvent(event -> {
|
||||
event.custom(new FinishedCrucibleHeatRecipe(null, BlockPredicate.singleBlock(block), value).serializeRecipe());
|
||||
event.custom(null, (JsonObject) CrucibleHeatRecipe.CODEC.encoder().encodeStart(JsonOps.INSTANCE, new CrucibleHeatRecipe(BlockPredicate.singleBlock(block), value)).result().get());
|
||||
});
|
||||
}
|
||||
|
||||
public void removeDefaultSieveRecipes(RecipesEventJS recipesEvent) {
|
||||
public void removeDefaultSieveRecipes(RecipesKubeEvent recipesEvent) {
|
||||
removeDefaultRecipes(recipesEvent, ERecipeTypes.SIEVE);
|
||||
}
|
||||
|
||||
|
|
@ -87,15 +80,26 @@ class ExDeorumKubeJsBindings {
|
|||
}
|
||||
|
||||
@HideFromJS
|
||||
private static void removeDefaultRecipes(RecipesEventJS event, RegistryObject<? extends RecipeType<?>> recipeType) {
|
||||
event.remove(r -> r.kjs$getType().equals(recipeType.getId()) && r.kjs$getOrCreateId().getNamespace().equals(ExDeorum.ID));
|
||||
private static void removeDefaultRecipes(RecipesKubeEvent event, DeferredHolder<? extends RecipeType<?>, ? extends RecipeType<?>> recipeType) {
|
||||
event.remove(null, (ctx, r) -> r.kjs$getType().equals(recipeType.getId()) && r.kjs$getOrCreateId().getNamespace().equals(ExDeorum.ID));
|
||||
}
|
||||
|
||||
@HideFromJS
|
||||
private static void onRecipesEvent(Consumer<RecipesEventJS> action) {
|
||||
private static void onRecipesEvent(Consumer<RecipesKubeEvent> action) {
|
||||
ServerEvents.RECIPES.listenJava(ScriptType.SERVER, null, jsEvent -> {
|
||||
action.accept((RecipesEventJS) jsEvent);
|
||||
action.accept((RecipesKubeEvent) jsEvent);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
public static void onRecipeFilterParse(RecipeFilterParseEvent event) {
|
||||
var sieveMesh = event.map.get("sieve_mesh");
|
||||
if (sieveMesh != null) {
|
||||
ReplacementMatchInfo m = ReplacementMatchInfo.wrap(event.cx, sieveMesh, ReplacementMatchInfo.TYPE_INFO);
|
||||
if (m == ReplacementMatchInfo.NONE) {
|
||||
throw Context.reportRuntimeError("Unable to parse recipe output filter `" + sieveMesh + "`", event.cx);
|
||||
}
|
||||
event.filters.add(new SieveMeshFilter(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,27 +18,25 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.kubejs;
|
||||
|
||||
import dev.latvian.mods.kubejs.KubeJSPlugin;
|
||||
import dev.latvian.mods.kubejs.recipe.schema.RegisterRecipeSchemasEvent;
|
||||
import dev.latvian.mods.kubejs.script.BindingsEvent;
|
||||
import dev.latvian.mods.kubejs.script.ScriptType;
|
||||
import dev.latvian.mods.kubejs.util.ClassFilter;
|
||||
import dev.latvian.mods.kubejs.plugin.KubeJSPlugin;
|
||||
import dev.latvian.mods.kubejs.recipe.schema.RecipeSchemaRegistry;
|
||||
import dev.latvian.mods.kubejs.script.BindingRegistry;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
|
||||
public class ExDeorumKubeJsPlugin extends KubeJSPlugin {
|
||||
@Override
|
||||
public void registerBindings(BindingsEvent event) {
|
||||
event.add(ExDeorum.ID, new ExDeorumKubeJsBindings());
|
||||
public class ExDeorumKubeJsPlugin implements KubeJSPlugin {
|
||||
static {
|
||||
NeoForge.EVENT_BUS.addListener(ExDeorumKubeJsBindings::onRecipeFilterParse);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerRecipeSchemas(RegisterRecipeSchemasEvent event) {
|
||||
event.namespace("exdeorum")
|
||||
public void registerBindings(BindingRegistry bindings) {
|
||||
bindings.add(ExDeorum.ID, new ExDeorumKubeJsBindings());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerRecipeSchemas(RecipeSchemaRegistry registry) {
|
||||
registry.namespace(ExDeorum.ID)
|
||||
.register("sieve", SieveRecipeSchema.SCHEMA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerClasses(ScriptType type, ClassFilter filter) {
|
||||
super.registerClasses(type, filter);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,16 +18,17 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.kubejs;
|
||||
|
||||
import dev.latvian.mods.kubejs.core.RecipeKJS;
|
||||
import dev.latvian.mods.kubejs.recipe.ItemMatch;
|
||||
import dev.latvian.mods.kubejs.recipe.RecipeJS;
|
||||
import dev.latvian.mods.kubejs.recipe.ReplacementMatch;
|
||||
import dev.latvian.mods.kubejs.core.RecipeLikeKJS;
|
||||
import dev.latvian.mods.kubejs.recipe.KubeRecipe;
|
||||
import dev.latvian.mods.kubejs.recipe.filter.RecipeFilter;
|
||||
import dev.latvian.mods.kubejs.recipe.match.ItemMatch;
|
||||
import dev.latvian.mods.kubejs.recipe.match.ReplacementMatchInfo;
|
||||
import dev.latvian.mods.rhino.Context;
|
||||
import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe;
|
||||
|
||||
public record SieveMeshFilter(ReplacementMatch match) implements RecipeFilter {
|
||||
public record SieveMeshFilter(ReplacementMatchInfo info) implements RecipeFilter {
|
||||
@Override
|
||||
public boolean test(RecipeKJS recipe) {
|
||||
return this.match instanceof ItemMatch itemMatch && recipe instanceof RecipeJS recipeJs && recipeJs.getOriginalRecipe() instanceof SieveRecipe sieveRecipe && itemMatch.contains(sieveRecipe.mesh);
|
||||
public boolean test(Context cx, RecipeLikeKJS r) {
|
||||
return r instanceof KubeRecipe recipeJs && recipeJs.getOriginalRecipe() instanceof SieveRecipe sieveRecipe && this.info.match() instanceof ItemMatch match && match.matches(cx, sieveRecipe.mesh, false);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,75 +18,17 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.kubejs;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import dev.latvian.mods.kubejs.item.InputItem;
|
||||
import dev.latvian.mods.kubejs.item.OutputItem;
|
||||
import dev.latvian.mods.kubejs.recipe.ItemMatch;
|
||||
import dev.latvian.mods.kubejs.recipe.RecipeJS;
|
||||
import dev.latvian.mods.kubejs.recipe.RecipeKey;
|
||||
import dev.latvian.mods.kubejs.recipe.ReplacementMatch;
|
||||
import dev.latvian.mods.kubejs.recipe.component.ComponentRole;
|
||||
import dev.latvian.mods.kubejs.recipe.component.ItemComponents;
|
||||
import dev.latvian.mods.kubejs.recipe.component.RecipeComponent;
|
||||
import dev.latvian.mods.kubejs.recipe.component.IngredientComponent;
|
||||
import dev.latvian.mods.kubejs.recipe.component.ItemStackComponent;
|
||||
import dev.latvian.mods.kubejs.recipe.schema.RecipeSchema;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
|
||||
public interface SieveRecipeSchema {
|
||||
RecipeComponent<OutputItem> OUTPUT_ITEM_ONLY = new RecipeComponent<>() {
|
||||
@Override
|
||||
public String componentType() {
|
||||
return "output_item_only";
|
||||
}
|
||||
RecipeKey<ItemStack> RESULT = ItemStackComponent.ITEM_STACK.key("result", ComponentRole.OUTPUT);
|
||||
RecipeKey<Ingredient> INGREDIENT = IngredientComponent.INGREDIENT.key("ingredient", ComponentRole.INPUT);
|
||||
|
||||
@Override
|
||||
public ComponentRole role() {
|
||||
return ComponentRole.OUTPUT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> componentClass() {
|
||||
return OutputItem.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPriority(RecipeJS recipe, Object from) {
|
||||
return recipe.outputItemHasPriority(from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement write(RecipeJS recipe, OutputItem value) {
|
||||
return new JsonPrimitive(ForgeRegistries.ITEMS.getKey(value.item.getItem()).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutputItem read(RecipeJS recipe, Object from) {
|
||||
if (from instanceof JsonPrimitive primitive && primitive.isString()) {
|
||||
return OutputItem.of(new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(primitive.getAsString()))));
|
||||
} else {
|
||||
return OutputItem.of(from);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOutput(RecipeJS recipe, OutputItem value, ReplacementMatch match) {
|
||||
return match instanceof ItemMatch m && !value.isEmpty() && m.contains(value.item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String checkEmpty(RecipeKey<OutputItem> key, OutputItem value) {
|
||||
if (value.isEmpty()) {
|
||||
return "ItemStack '" + key.name + "' can't be empty";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
RecipeKey<OutputItem> RESULT = OUTPUT_ITEM_ONLY.key("result");
|
||||
RecipeKey<InputItem> INGREDIENT = ItemComponents.INPUT.key("ingredient");
|
||||
|
||||
RecipeSchema SCHEMA = new RecipeSchema(RESULT, INGREDIENT).uniqueOutputId(RESULT);
|
||||
RecipeSchema SCHEMA = new RecipeSchema(RESULT, INGREDIENT).uniqueId(RESULT);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,13 +18,11 @@
|
|||
|
||||
package thedarkcolour.exdeorum.compat.top;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import mcjty.theoneprobe.api.*;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
|
|
@ -32,13 +30,14 @@ import thedarkcolour.exdeorum.blockentity.AbstractCrucibleBlockEntity;
|
|||
import thedarkcolour.exdeorum.blockentity.BarrelBlockEntity;
|
||||
import thedarkcolour.exdeorum.blockentity.InfestedLeavesBlockEntity;
|
||||
import thedarkcolour.exdeorum.blockentity.SieveBlockEntity;
|
||||
import thedarkcolour.exdeorum.compat.CompatUtil;
|
||||
import thedarkcolour.exdeorum.data.TranslationKeys;
|
||||
import thedarkcolour.exdeorum.registry.EBlocks;
|
||||
|
||||
public class ExDeorumInfoProvider implements IProbeInfoProvider {
|
||||
@Override
|
||||
public ResourceLocation getID() {
|
||||
return new ResourceLocation(ExDeorum.ID, "info_provider");
|
||||
return ResourceLocation.fromNamespaceAndPath(ExDeorum.ID, "info_provider");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -90,13 +89,11 @@ public class ExDeorumInfoProvider implements IProbeInfoProvider {
|
|||
.item(mesh, info.defaultItemStyle().width(16).height(16))
|
||||
.text(CompoundText.create().info(mesh.getDescriptionId()));
|
||||
if (mesh.isEnchanted()) {
|
||||
var list = new ObjectArrayList<Component>();
|
||||
var style = info.defaultTextStyle().height(10);
|
||||
ItemStack.appendEnchantmentNames(list, mesh.getEnchantmentTags());
|
||||
|
||||
for (var component : list) {
|
||||
CompatUtil.addEnchantmentsTooltip(mesh, level, component -> {
|
||||
info.text(component, style);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user