diff --git a/gradle.properties b/gradle.properties index d403c64..532a18c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,10 +14,10 @@ parchment_version = 2024.11.17 mod_id=mechanicals mod_name=Mechanicals Lib mod_license=LGPL3 -mod_version=0.2.11 +mod_version=0.4.26 mod_group_id=com.oierbravo mod_author=oierbravo -mod_description=Utility Library for Create Addons. +mod_description=Utility Library for modding, mainly but not limited Create Addons. # dependency versions create_version = 6.0.4-53 diff --git a/src/main/java/com/oierbravo/mechanicals/Mechanicals.java b/src/main/java/com/oierbravo/mechanicals/Mechanicals.java index 4ccda72..2180127 100644 --- a/src/main/java/com/oierbravo/mechanicals/Mechanicals.java +++ b/src/main/java/com/oierbravo/mechanicals/Mechanicals.java @@ -2,6 +2,7 @@ package com.oierbravo.mechanicals; import com.mojang.logging.LogUtils; import com.oierbravo.mechanicals.register.MechanicalCreativeModeTabs; +import com.oierbravo.mechanicals.register.MechanicalIngredientTypes; import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes; import com.oierbravo.mechanicals.register.MechanicalRegistries; import net.minecraft.resources.ResourceLocation; @@ -23,7 +24,8 @@ public class Mechanicals { MechanicalCreativeModeTabs.register(modEventBus); modEventBus.addListener(this::newRegistries); - MechanicalRecipeRequirementTypes.init(modEventBus); + MechanicalRecipeRequirementTypes.register(modEventBus); + MechanicalIngredientTypes.register(modEventBus); modEventBus.addListener(this::doClientStuff); } diff --git a/src/main/java/com/oierbravo/mechanicals/compat/jei/RecipeRequirementRenderer.java b/src/main/java/com/oierbravo/mechanicals/compat/jei/RecipeRequirementRenderer.java new file mode 100644 index 0000000..cfdb52a --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/compat/jei/RecipeRequirementRenderer.java @@ -0,0 +1,45 @@ +package com.oierbravo.mechanicals.compat.jei; + +import com.oierbravo.mechanicals.foundation.recipe.IRecipeWithRequirements; +import com.oierbravo.mechanicals.utility.LibLang; +import net.createmod.catnip.data.Pair; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; + +import java.util.List; + +public class RecipeRequirementRenderer { + public static void drawRequirements(IRecipeWithRequirements recipe, GuiGraphics guiGraphics, int x, int y) { + Minecraft minecraft = Minecraft.getInstance(); + Font fontRenderer = minecraft.font; + int index = 0; + int distance = 9; + int offsetX = 5; + int offsetY = 14; + + guiGraphics.drawString(fontRenderer, LibLang.translate("ui.recipe.requirements.title").component().withStyle(), x, y, 0xFFFFFFFF, true); + + List> jeiRequirementTooltips = recipe.getJeiRequirementsTooltips(); + + if(jeiRequirementTooltips.isEmpty()){ + guiGraphics.drawString(fontRenderer, LibLang.translate("ui.recipe_requirement.none.tooltip").component().withStyle(),x + offsetX, y + offsetY, 0xFF808080, false); + return; + } + + for (Pair pair : jeiRequirementTooltips) { + int oneLinerLenght = pair.getSecond().getString().length() + pair.getSecond().getString().length(); + if (oneLinerLenght < 19) { + guiGraphics.drawString(fontRenderer, pair.getFirst().plainCopy().append(" ").append(pair.getSecond()), x + offsetX, y + offsetY + distance * index, 0xFF808080, false); + index++; + continue; + } + guiGraphics.drawString(fontRenderer, pair.getFirst(), x + offsetX, y + offsetY + distance * index, 0xFF808080, false); + index++; + guiGraphics.drawString(fontRenderer, pair.getSecond(), x + offsetX * 2, y + offsetY + distance * index, 0xFF808080, false); + index++; + + } + } +} diff --git a/src/main/java/com/oierbravo/mechanicals/compat/kubejs/MechanicalsJsPlugin.java b/src/main/java/com/oierbravo/mechanicals/compat/kubejs/MechanicalsJsPlugin.java index 0701382..874a404 100644 --- a/src/main/java/com/oierbravo/mechanicals/compat/kubejs/MechanicalsJsPlugin.java +++ b/src/main/java/com/oierbravo/mechanicals/compat/kubejs/MechanicalsJsPlugin.java @@ -7,6 +7,7 @@ import com.oierbravo.mechanicals.compat.kubejs.bindings.RecipeRequirementBuilder import dev.latvian.mods.kubejs.plugin.KubeJSPlugin; import dev.latvian.mods.kubejs.recipe.schema.RecipeComponentFactoryRegistry; import dev.latvian.mods.kubejs.script.BindingRegistry; +import net.neoforged.fml.ModList; public class MechanicalsJsPlugin implements KubeJSPlugin { @@ -17,12 +18,14 @@ public class MechanicalsJsPlugin implements KubeJSPlugin { registry.register(RecipeRequirementsComponent.RECIPE_REQUIREMENT); registry.register(ResourceLocationComponent.RESOURCE_LOCATION); registry.register(CreateFluidIngredientComponent.FLUID_INGREDIENT); + registry.register(CountableIngredientComponent.COUNTABLE_INGREDIENT); } @Override public void registerBindings(BindingRegistry registry) { if (registry.type().isServer()) { - registry.add("Output", ProcessingOutputBuilder.class); + if(ModList.get().isLoaded("create")) + registry.add("Output", ProcessingOutputBuilder.class); registry.add("BlockPredicate", BlockPredicateBuilder.class); registry.add("RecipeRequirement", RecipeRequirementBuilder.class); } diff --git a/src/main/java/com/oierbravo/mechanicals/compat/kubejs/components/CountableIngredientComponent.java b/src/main/java/com/oierbravo/mechanicals/compat/kubejs/components/CountableIngredientComponent.java new file mode 100644 index 0000000..dc41212 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/compat/kubejs/components/CountableIngredientComponent.java @@ -0,0 +1,34 @@ +package com.oierbravo.mechanicals.compat.kubejs.components; + +import com.mojang.serialization.Codec; +import com.oierbravo.mechanicals.foundation.ingredient.CountableIngredient; +import dev.latvian.mods.kubejs.recipe.KubeRecipe; +import dev.latvian.mods.kubejs.recipe.component.RecipeComponent; +import dev.latvian.mods.rhino.Context; +import dev.latvian.mods.rhino.type.TypeInfo; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; + +public record CountableIngredientComponent() implements RecipeComponent { + public static final RecipeComponent COUNTABLE_INGREDIENT = new CountableIngredientComponent(); + + @Override + public Codec codec() { + return CountableIngredient.CODEC; + } + + @Override + public TypeInfo typeInfo() { + return TypeInfo.of(CountableIngredient.class); + } + + @Override + public CountableIngredient wrap(Context cx, KubeRecipe recipe, Object from) { + if(from instanceof Ingredient ingredient) + return CountableIngredient.of(ingredient,1); + if(from instanceof ItemStack itemStack) + return CountableIngredient.of(itemStack); + return RecipeComponent.super.wrap(cx, recipe, from); + } + +} diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/CycleBehavior.java b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/CycleBehavior.java index ca16254..ca068f8 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/CycleBehavior.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/CycleBehavior.java @@ -97,9 +97,12 @@ public class CycleBehavior extends BlockEntityBehaviour { apply(); if (!level.isClientSide) blockEntity.sendData(); + else + specifics.playActuateSound(); + } - if (!level.isClientSide && runningTicks > cycleTime) { + if (!level.isClientSide && runningTicks >= cycleTime) { specifics.onCycleCompleted(); currentCycle++; if(currentCycle == numCycles){ @@ -116,7 +119,7 @@ public class CycleBehavior extends BlockEntityBehaviour { runningTicks += getRunningTickSpeed(); if (level.isClientSide){ - specifics.playSound(); + specifics.playRunningSound(); specifics.showParticles(); } @@ -180,7 +183,8 @@ public class CycleBehavior extends BlockEntityBehaviour { default void onCycleCompleted(){}; default void onOperationCompletd(){}; - default void playSound(){}; + default void playActuateSound(){}; + default void playRunningSound(){}; default void showParticles(){}; default void playCompletionSound(){}; diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/DynamicCycleBehavior.java b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/DynamicCycleBehavior.java index 13cef00..d800a3d 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/DynamicCycleBehavior.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/DynamicCycleBehavior.java @@ -87,7 +87,7 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { blockEntity.sendData(); } - if (!level.isClientSide && runningTicks > cycleTime) { + if (!level.isClientSide && runningTicks >= cycleTime) { finished = true; running = false; specifics.onOperationCompleted(); @@ -98,7 +98,7 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { prevRunningTicks = runningTicks; runningTicks += getRunningTickSpeed(); if (level.isClientSide){ - specifics.playSound(); + specifics.playRunningSound(); specifics.showParticles(); } if (prevRunningTicks < cycleTime && runningTicks >= cycleTime) { @@ -172,7 +172,7 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { public interface DynamicCycleBehaviorSpecifics { default void onOperationCompleted(){}; - default void playSound(){}; + default void playRunningSound(){}; default void showParticles(){}; default void playCompletionSound(){}; float getKineticSpeed(); diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java index f4e32da..897d725 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java @@ -47,7 +47,7 @@ public class RecipeRequirementsBehaviour exte return false; } - if(!specifics.hasEnoughOutputSpace()){ + if(!specifics.hasEnoughOutputSpace(pRecipe)){ missingRequirements.add("output"); } @@ -101,7 +101,7 @@ public class RecipeRequirementsBehaviour exte } public interface RecipeRequirementsSpecifics { - boolean hasEnoughOutputSpace(); + boolean hasEnoughOutputSpace(R recipe); boolean matchesIngredients(R recipe); } } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractCreateRecipeGen.java b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractCreateRecipeGen.java index c18b968..f0c99b8 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractCreateRecipeGen.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractCreateRecipeGen.java @@ -1,5 +1,8 @@ package com.oierbravo.mechanicals.foundation.data; +import com.simibubi.create.content.kinetics.crusher.CrushingRecipe; +import com.simibubi.create.content.kinetics.deployer.ItemApplicationRecipe; +import com.simibubi.create.content.kinetics.deployer.ManualApplicationRecipe; import com.simibubi.create.content.kinetics.millstone.MillingRecipe; import com.simibubi.create.content.kinetics.mixer.MixingRecipe; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; @@ -18,12 +21,17 @@ public abstract class AbstractCreateRecipeGen extends RecipeProvider { super(output, registries); this.resourceLocationSupplier = resourceLocationSupplier; } - + protected ProcessingRecipeBuilder createCrushing(String name){ + return new ProcessingRecipeBuilder<>(CrushingRecipe::new, resourceLocationSupplier.get().withPath(name)); + } protected ProcessingRecipeBuilder createMilling(String name){ return new ProcessingRecipeBuilder<>(MillingRecipe::new, resourceLocationSupplier.get().withPath(name)); } protected ProcessingRecipeBuilder createMixing(String name){ return new ProcessingRecipeBuilder<>(MixingRecipe::new, resourceLocationSupplier.get().withPath(name)); } + protected ProcessingRecipeBuilder createItemApplication(String name){ + return new ProcessingRecipeBuilder<>(ManualApplicationRecipe::new, resourceLocationSupplier.get().withPath(name)); + } } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java index c16f256..025182d 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java @@ -42,7 +42,7 @@ public abstract class AbstractMechanicalRecipeGenerator +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +public record CountableIngredient(Ingredient ingredient, int count) implements Predicate/*, ICustomIngredient*/ { + public static final CountableIngredient EMPTY = new CountableIngredient(Ingredient.EMPTY,0); + + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Ingredient.CODEC.fieldOf("ingredient").forGetter(CountableIngredient::ingredient), + Codec.INT.fieldOf("count").forGetter(CountableIngredient::count) + ).apply(instance, CountableIngredient::new)); + /*public static Codec CODEC = RecordCodecBuilder + .mapCodec((builder) + -> builder + .group( + Ingredient.CODEC.fieldOf("ingredient").forGetter(CountableIngredient::ingredient), + Codec.INT.fieldOf("count").forGetter(CountableIngredient::count)) + .apply(builder, CountableIngredient::new)); + +*/ + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, CountableIngredient::ingredient, + ByteBufCodecs.INT, CountableIngredient::count, + CountableIngredient::new + ); + + public static CountableIngredient of(Ingredient ingredient, int count) + { + return new CountableIngredient(ingredient, count); + } + public static CountableIngredient of(ItemStack itemStack) + { + return new CountableIngredient(Ingredient.of(itemStack), itemStack.getCount()); + } + + @Override + public boolean test(ItemStack itemStack) + { + return ingredient.test(itemStack) && itemStack.getCount() >= count; + } + + public ItemStack asItemStack(){ + return new ItemStack(Arrays.stream(ingredient.getItems()).findFirst().get().getItem(), count); + } + + /*@Override + public Stream getItems() { + return Arrays.stream(ingredient.getItems()); + } + + @Override + public boolean isSimple() { + return false; + } + + @Override + public IngredientType getType() { + return MechanicalIngredientTypes.COUNTABLE_INGREDIENT.get(); + }*/ +} diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java index fed2ee5..88872f1 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java @@ -21,13 +21,9 @@ public abstract class AbstractMechanicalRecipe conditions; public AbstractMechanicalRecipe(P params){ - id = params.id; recipeRequirements = params.recipeRequirements; conditions = params.conditions; } - public ResourceLocation getId() { - return id; - } public List getConditions(){ return conditions; } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java index 35790ff..7f58acc 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java @@ -20,12 +20,13 @@ import java.util.function.Consumer; public abstract class AbstractMechanicalRecipeBuilder, P extends AbstractMechanicalRecipeParams, BRB extends AbstractMechanicalRecipeBuilder> { protected final Map> criteria = new LinkedHashMap<>(); protected P params; + protected ResourceLocation id; public AbstractMechanicalRecipeBuilder(){ } public abstract R build(); - public abstract BRB create(ResourceLocation id); + public abstract BRB create(); public BRB withRequirement(IRecipeRequirement requirement){ params.recipeRequirements.add(requirement); @@ -51,7 +52,10 @@ public abstract class AbstractMechanicalRecipeBuilder consummer){ diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java index f910fe2..d2f65ab 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java @@ -6,12 +6,10 @@ import net.neoforged.neoforge.common.conditions.ICondition; import java.util.ArrayList; public abstract class AbstractMechanicalRecipeParams { - public ResourceLocation id; public ArrayList recipeRequirements; public ArrayList conditions; - protected AbstractMechanicalRecipeParams(ResourceLocation id) { - this.id = id; + protected AbstractMechanicalRecipeParams() { this.recipeRequirements = new ArrayList<>(); this.conditions = new ArrayList<>(); } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeRequirement.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeRequirement.java index 8b2cf00..64a4945 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeRequirement.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeRequirement.java @@ -3,6 +3,7 @@ package com.oierbravo.mechanicals.foundation.recipe; import com.mojang.serialization.Codec; import com.oierbravo.mechanicals.register.MechanicalRegistries; import com.oierbravo.mechanicals.utility.LibLang; +import com.oierbravo.mechanicals.utility.MechanicalLangIdGenerator; import net.createmod.catnip.data.Pair; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; @@ -31,12 +32,18 @@ public interface IRecipeRequirement { RecipeRequirementType getType(); default Pair toTooltipComponent(){ - return Pair.of(LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip.title").component(), - LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip.value", toString()).component() + return Pair.of(LibLang.translate(MechanicalLangIdGenerator.recipeRequirement(getIdString(), "title")).component(), + LibLang.translate(MechanicalLangIdGenerator.recipeRequirement(getIdString(), "value"), toString()).component() ); }; + default Component toItemTooltipComponent(){ + return LibLang.translate(MechanicalLangIdGenerator.recipeRequirement(getIdString(), "title")).component() + .append( + LibLang.translate(MechanicalLangIdGenerator.recipeRequirement(getIdString(), "value"), toString()).component() + ); + }; default Component toMissingComponent(){ - return LibLang.translate("ui.recipe_requirement." + getIdString() + ".missing").component(); + return LibLang.translate(MechanicalLangIdGenerator.recipeRequirement(getIdString(), "missing")).component(); } } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeWithRequirements.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeWithRequirements.java index 6a41fde..0fddf63 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeWithRequirements.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IRecipeWithRequirements.java @@ -13,6 +13,10 @@ public interface IRecipeWithRequirements { ArrayList getRecipeRequirements(); + default List getJeiRecipeRequirements(){ + return getRecipeRequirements(); + } + default Optional getRequirement(RecipeRequirementType type) { return getRecipeRequirements().stream().filter(iRecipeRequirement -> iRecipeRequirement.getType() == type).findFirst(); } @@ -41,4 +45,10 @@ public interface IRecipeWithRequirements { return getRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList(); } + default List> getJeiRequirementsTooltips(){ + if(getJeiRecipeRequirements().isEmpty()) + return List.of(); + return getJeiRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList(); + } + } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/requirements/BiomeTagRequirement.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/requirements/BiomeTagRequirement.java index f0dee5e..60a8d46 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/requirements/BiomeTagRequirement.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/requirements/BiomeTagRequirement.java @@ -25,7 +25,6 @@ public record BiomeTagRequirement(TagKey tag) implements IRecipeRequireme public static MapCodec CODEC = RecordCodecBuilder .mapCodec((builder) -> builder - //.group(TagKey.codec(Registries.BIOME).optionalFieldOf("value", null) .group(ResourceLocation.CODEC.optionalFieldOf("value", null) .forGetter(BiomeTagRequirement::getResourceLocation)).apply(builder,BiomeTagRequirement::new)); diff --git a/src/main/java/com/oierbravo/mechanicals/register/MechanicalCreativeModeTabs.java b/src/main/java/com/oierbravo/mechanicals/register/MechanicalCreativeModeTabs.java index f4a325f..a213d70 100644 --- a/src/main/java/com/oierbravo/mechanicals/register/MechanicalCreativeModeTabs.java +++ b/src/main/java/com/oierbravo/mechanicals/register/MechanicalCreativeModeTabs.java @@ -2,6 +2,7 @@ package com.oierbravo.mechanicals.register; import com.oierbravo.mechanicals.Mechanicals; import com.oierbravo.mechanicals.utility.LibLang; +import com.oierbravo.mechanicals.utility.MechanicalLangIdGenerator; import net.minecraft.world.item.Items; import net.neoforged.bus.api.IEventBus; @@ -17,7 +18,7 @@ public class MechanicalCreativeModeTabs { public static final DeferredHolder MAIN_TAB = TAB_REGISTER.register("main", () -> CreativeModeTab.builder() - .title(LibLang.translate("itemGroup:main").component()) + .title(LibLang.translate(MechanicalLangIdGenerator.creativeTabId("main")).component()) .icon(() -> Items.EGG.asItem().getDefaultInstance()) .build()); diff --git a/src/main/java/com/oierbravo/mechanicals/register/MechanicalIngredientTypes.java b/src/main/java/com/oierbravo/mechanicals/register/MechanicalIngredientTypes.java new file mode 100644 index 0000000..7cb4fb8 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/register/MechanicalIngredientTypes.java @@ -0,0 +1,24 @@ +package com.oierbravo.mechanicals.register; + +import com.oierbravo.mechanicals.foundation.ingredient.CountableIngredient; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.common.crafting.IngredientType; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; + +import java.util.function.Supplier; + +import static com.oierbravo.mechanicals.Mechanicals.MODID; + +public class MechanicalIngredientTypes { + private static final DeferredRegister> INGREDIENT_TYPES = DeferredRegister.create(NeoForgeRegistries.INGREDIENT_TYPES, MODID); + + /*public static final Supplier> COUNTABLE_INGREDIENT = + INGREDIENT_TYPES.register("countable_ingredient", + () -> new IngredientType<>(CountableIngredient.CODEC, CountableIngredient.STREAM_CODEC)); +*/ + public static void register(IEventBus modEventBus) { + INGREDIENT_TYPES.register(modEventBus); + } + +} diff --git a/src/main/java/com/oierbravo/mechanicals/register/MechanicalRecipeRequirementTypes.java b/src/main/java/com/oierbravo/mechanicals/register/MechanicalRecipeRequirementTypes.java index 82aaf74..caf91c6 100644 --- a/src/main/java/com/oierbravo/mechanicals/register/MechanicalRecipeRequirementTypes.java +++ b/src/main/java/com/oierbravo/mechanicals/register/MechanicalRecipeRequirementTypes.java @@ -34,7 +34,7 @@ public class MechanicalRecipeRequirementTypes { public static final Supplier> BIOME_TAG = register(BiomeTagRequirement.ID, BiomeTagRequirement.CODEC, BiomeTagRequirement.STREAM_CODEC); - public static void init(IEventBus modEventBus) { + public static void register(IEventBus modEventBus) { RECIPE_REQUIREMENT_TYPES.register(modEventBus); } diff --git a/src/main/java/com/oierbravo/mechanicals/utility/MechanicalLangIdGenerator.java b/src/main/java/com/oierbravo/mechanicals/utility/MechanicalLangIdGenerator.java new file mode 100644 index 0000000..7bf17c7 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/utility/MechanicalLangIdGenerator.java @@ -0,0 +1,18 @@ +package com.oierbravo.mechanicals.utility; + +public class MechanicalLangIdGenerator { + + public static String creativeTabId(String variant){ + return "itemGroup:" + variant; + } + + public static String jadeId(String namespace) { + return "config.jade.plugin_" + namespace + ".data"; + } + + public static String recipeRequirement(String id, String variant) { + return "ui.recipe_requirement." + id + ".tooltip." + variant; + } + + +} diff --git a/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java b/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java index 3699eea..0c5feda 100644 --- a/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java +++ b/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java @@ -1,29 +1,90 @@ package com.oierbravo.mechanicals.utility; -import com.simibubi.create.foundation.data.CreateRegistrate; -public class RegistrateLangBuilder { +import com.tterrag.registrate.AbstractRegistrate; + +public class RegistrateLangBuilder> { private final String namespace; - private final CreateRegistrate registrate; + private final R registrate; - public RegistrateLangBuilder(String namespace, CreateRegistrate registrate) { + public RegistrateLangBuilder(String namespace, R registrate) { this.namespace = namespace; this.registrate = registrate; } - public RegistrateLangBuilder add(String literal, String defaultTranslation){ + public RegistrateLangBuilder add(String literal, String defaultTranslation){ registrate.addRawLang(namespace + "." + literal,defaultTranslation); return this; } - public RegistrateLangBuilder addRaw(String literal, String defaultTranslation){ + public RegistrateLangBuilder addCreativeTab(String defaultTranslation){ + return add(MechanicalLangIdGenerator.creativeTabId( "main"), defaultTranslation); + } + public RegistrateLangBuilder addJade(String defaultTranslation){ + registrate.addRawLang(MechanicalLangIdGenerator.jadeId(namespace),defaultTranslation); + return this; + } + public RegistrateLangBuilder addRaw(String literal, String defaultTranslation){ registrate.addRawLang(literal,defaultTranslation); return this; } - public RegistrateLangBuilder addBlockTooltip(String id, String defaultTranslation){ - registrate.addRawLang("block." + namespace + "." + id + ".tooltip",defaultTranslation); + + protected RegistrateLangBuilder addRecipeRequirement(String variant, String id, String defaultTranslation){ + registrate.addRawLang("mechanicals." + MechanicalLangIdGenerator.recipeRequirement(id, variant),defaultTranslation); return this; } - public RegistrateLangBuilder addBlockTooltipSummary(String id, String defaultTranslation){ - registrate.addRawLang("block." + namespace + "." + id + ".tooltip.summary",defaultTranslation); + public RegistrateLangBuilder addRecipeRequirementTitle(String id, String defaultTranslation){ + return addRecipeRequirement("title", id, defaultTranslation); + } + public RegistrateLangBuilder addRecipeRequirementValue(String id, String defaultTranslation){ + return addRecipeRequirement("value", id, defaultTranslation); + } + public RegistrateLangBuilder addRecipeRequirementMissing(String id, String defaultTranslation){ + return addRecipeRequirement("missing", id, defaultTranslation); + } + + protected RegistrateLangBuilder addTooltip(String id, String type, String variant, String defaultTranslation){ + registrate.addRawLang(type + "." + namespace + "." + id + ".tooltip." + variant,defaultTranslation); return this; } + /* Item tooltips */ + public RegistrateLangBuilder addItemTooltip(String id, String variant, String defaultTranslation){ + return addTooltip(id, "item", variant, defaultTranslation); + } + public RegistrateLangBuilder addItemTooltipSummary(String id, String defaultTranslation){ + return addItemTooltip(id, "summary", defaultTranslation); + + } + public RegistrateLangBuilder addItemTooltipCondition(String id, int index, String defaultTranslation){ + return addItemTooltip(id, "condition" + index, defaultTranslation); + + } + public RegistrateLangBuilder addItemTooltipBehaviour(String id, int index, String defaultTranslation){ + return addItemTooltip(id, "behaviour" + index, defaultTranslation); + + } + /* Block tooltips */ + protected RegistrateLangBuilder addBlockTooltip(String id, String variant, String defaultTranslation){ + return addTooltip(id, "block", variant, defaultTranslation); + } + public RegistrateLangBuilder addBlockTooltipSummary(String id, String defaultTranslation){ + return addBlockTooltip(id, "summary", defaultTranslation); + } + public RegistrateLangBuilder addBlockTooltipCondition(String id, int index, String defaultTranslation){ + return addBlockTooltip(id, "condition" + index, defaultTranslation); + } + public RegistrateLangBuilder addBlockTooltipBehaviour(String id, int index, String defaultTranslation){ + return addBlockTooltip(id, "behaviour" + index, defaultTranslation); + + } + + /* Ponder */ + protected RegistrateLangBuilder addPonder(String id, String variant, String defaultTranslation){ + registrate.addRawLang(namespace + ".ponder." + id + "." + variant,defaultTranslation); + return this; + } + public RegistrateLangBuilder addPonderHeader(String id, String defaultTranslation){ + return addPonder(id, "header", defaultTranslation); + } + public RegistrateLangBuilder addPonderText(int index, String id, String defaultTranslation){ + return addPonder(id, "text_" + index, defaultTranslation); + } } diff --git a/src/main/resources/assets/mechanicals/textures/jei/widgets.png b/src/main/resources/assets/mechanicals/textures/gui/jei/widgets.png similarity index 66% rename from src/main/resources/assets/mechanicals/textures/jei/widgets.png rename to src/main/resources/assets/mechanicals/textures/gui/jei/widgets.png index cae22ac..05a7585 100644 Binary files a/src/main/resources/assets/mechanicals/textures/jei/widgets.png and b/src/main/resources/assets/mechanicals/textures/gui/jei/widgets.png differ