diff --git a/gradle.properties b/gradle.properties index b20d83c..b6c283e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ parchment_version = 2024.11.17 mod_id=mechanicals mod_name=Mechanicals Lib mod_license=LGPL3 -mod_version=0.1.0 +mod_version=0.1.4 mod_group_id=com.oierbravo mod_author=oierbravo mod_description=Utility Library for Create Addons. 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 76dce6f..dda94ce 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 @@ -40,6 +40,7 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { public void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) { currentTime = compound.getInt("CurrentTime"); processingTime = compound.getInt("ProcessingTime"); + prevRunningTicks = runningTicks = compound.getInt("Ticks"); running = compound.getBoolean("Running"); finished = compound.getBoolean("Finished"); super.read(compound, registries, clientPacket); @@ -63,6 +64,7 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { } public void stop(){ running = false; + finished = true; currentTime = 0; processingTime = 0; specifics.setWorking(false); @@ -95,22 +97,41 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { blockEntity.sendData(); return; } + if (level.isClientSide && runningTicks == -processingTime) { + prevRunningTicks = currentTime; + return; + } + if (runningTicks == processingTime && specifics.getKineticSpeed() != 0) { + apply(); + specifics.playSound(); + if (!level.isClientSide) + blockEntity.sendData(); + } specifics.setWorking(true); running = true; currentTime += getRunningTickSpeed(); - if (currentTime >= getProccessingTime() && specifics.getKineticSpeed() != 0) { - specifics.playSound(); - if (!level.isClientSide){ - stop(); - apply(); - specifics.onCycleCompleted(); - } + if (!level.isClientSide && runningTicks > processingTime) { + specifics.onCycleCompleted(); + stop(); + + blockEntity.sendData(); + return; + + } + + + prevRunningTicks = runningTicks; + runningTicks += getRunningTickSpeed(); + if (prevRunningTicks < processingTime && runningTicks >= processingTime) { + runningTicks = processingTime / 2; + // Pause the ticks until a packet is received + if (level.isClientSide && !blockEntity.isVirtual()) + runningTicks = -(processingTime / 2); } - blockEntity.sendData(); } public float getProgress(float partialTicks){ @@ -141,10 +162,21 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { public int getProgressPercent() { if(!running) return 0; - return Mth.clamp(currentTime * 100 / (getProccessingTime()), 0,100); + return Mth.clamp(runningTicks * 100 / (getProccessingTime()), 0,100); + } + public float getProgressPercentFloat() { + if(!running) + return 0; + return (float) runningTicks / getProccessingTime(); + } + + public float getProcessingRemainingPercentFloat() { + if(!running) + return 1; + return 1 - (float) (processingTime - runningTicks) / processingTime; } public int getCurrentTime(){ - return currentTime; + return runningTicks; } public boolean isRunning(){ 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 6226f41..1cb3813 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 @@ -66,6 +66,10 @@ public class RecipeRequirementsBehaviour exte blockEntity.sendData(); return true; } + public void cleanRequirements(){ + missingRequirements.clear(); + blockEntity.sendData(); + } public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking, boolean added) { if(missingRequirements.isEmpty()) diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java new file mode 100644 index 0000000..45c461b --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/foundation/data/AbstractMechanicalRecipeGenerator.java @@ -0,0 +1,46 @@ +package com.oierbravo.mechanicals.foundation.data; + +import com.oierbravo.mechanicals.foundation.recipe.AbstractMechanicalRecipeBuilder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; + +public abstract class AbstractMechanicalRecipeGenerator> extends RecipeProvider { + String namespace; + String displayName; + String recipeTypeId; + Supplier builderSupplier; + + public AbstractMechanicalRecipeGenerator(PackOutput output, CompletableFuture registries, String namespace, String recipeTypeId , Supplier builderSupplier,String displayName) { + super(output, registries); + this.namespace = namespace; + this.recipeTypeId = recipeTypeId; + this.displayName = displayName; + this.builderSupplier = builderSupplier; + } + + abstract protected void buildRecipes(RecipeOutput recipeOutput); + + private Block block(String resourceLocationString){ + return block(ResourceLocation.parse(resourceLocationString)); + } + private Block block(ResourceLocation resourceLocation){ + return BuiltInRegistries.BLOCK.get(resourceLocation); + } + + + protected MRB create(String id){ + return builderSupplier.get().create(ResourceLocation.fromNamespaceAndPath(namespace, recipeTypeId + "/" + id)); + } + @Override + public final String getName() { + return displayName + " recipes."; + } +} diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/gui/MechanicalGUITextures.java b/src/main/java/com/oierbravo/mechanicals/foundation/gui/MechanicalGUITextures.java new file mode 100644 index 0000000..6f63170 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/foundation/gui/MechanicalGUITextures.java @@ -0,0 +1,58 @@ +package com.oierbravo.mechanicals.foundation.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.createmod.catnip.gui.UIRenderHelper; +import net.createmod.catnip.gui.element.ScreenElement; +import net.createmod.catnip.theme.Color; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; + +public enum MechanicalGUITextures implements ScreenElement { + JEI_SHORT_ARROW("jei/widgets", 20, 9); + + public static final int FONT_COLOR = 5726074; + public final ResourceLocation location; + public int width; + public int height; + public int startX; + public int startY; + + private MechanicalGUITextures(String location, int width, int height) { + this(location, 0, 0, width, height); + } + + private MechanicalGUITextures(int startX, int startY) { + this("icons", startX * 16, startY * 16, 16, 16); + } + private MechanicalGUITextures(String location, int startX, int startY, int width, int height) { + this("mechanicals", location, startX, startY, width, height); + } + + private MechanicalGUITextures(String namespace, String location, int startX, int startY, int width, int height) { + this.location = ResourceLocation.fromNamespaceAndPath(namespace, "textures/gui/" + location + ".png"); + this.width = width; + this.height = height; + this.startX = startX; + this.startY = startY; + } + + @OnlyIn(Dist.CLIENT) + public void bind() { + RenderSystem.setShaderTexture(0, this.location); + } + + @OnlyIn(Dist.CLIENT) + public void render(GuiGraphics graphics, int x, int y) { + graphics.blit(location, x, y, startX, startY, width, height); + } + + @OnlyIn(Dist.CLIENT) + public void render(GuiGraphics graphics, int x, int y, Color c) { + bind(); + UIRenderHelper.drawColoredTexture(graphics, c, x, y, startX, startY, width, height); + } + + +} diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipe.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java similarity index 82% rename from src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipe.java rename to src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java index 91445d3..da9563a 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipe.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java @@ -12,7 +12,7 @@ import java.util.List; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public abstract class BaseRecipe implements Recipe, IRecipeWithRequirements { +public abstract class AbstractMechanicalRecipe implements Recipe, IRecipeWithRequirements { protected ResourceLocation id; @@ -20,7 +20,7 @@ public abstract class BaseRecipe conditions; - public BaseRecipe(P params){ + public AbstractMechanicalRecipe(P params){ this.id = params.id; recipeRequirements = params.recipeRequirements; this.conditions = params.conditions; diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeBuilder.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java similarity index 84% rename from src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeBuilder.java rename to src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java index 550bf17..23a5697 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeBuilder.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java @@ -15,20 +15,22 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; -public abstract class BaseRecipeBuilder, P extends BaseRecipeParams, BRB extends BaseRecipeBuilder> { +public abstract class AbstractMechanicalRecipeBuilder, P extends AbstractMechanicalRecipeParams, BRB extends AbstractMechanicalRecipeBuilder> { protected final Map> criteria = new LinkedHashMap<>(); protected P params; protected ArrayList recipeRequirements; protected ArrayList recipeConditions; - public BaseRecipeBuilder( ResourceLocation id){ + public AbstractMechanicalRecipeBuilder(){ recipeRequirements = new ArrayList<>(); recipeConditions = new ArrayList<>(); } public abstract R build(); + public abstract BRB create(ResourceLocation id); public BRB withRequirement(IRecipeRequirement requirement){ params.recipeRequirements.add(requirement); @@ -64,4 +66,9 @@ public abstract class BaseRecipeBuilder, P extends Bas public void save(RecipeOutput recipeOutput) { save(recipeOutput, params.id); } + + public BRB with(Consumer consummer){ + consummer.accept((BRB) this); + return (BRB) this; + } } diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeParams.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java similarity index 78% rename from src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeParams.java rename to src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java index b0850ac..0d1e116 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/BaseRecipeParams.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java @@ -5,12 +5,12 @@ import net.neoforged.neoforge.common.conditions.ICondition; import java.util.ArrayList; -public abstract class BaseRecipeParams implements IBaseRecipeParams { +public abstract class AbstractMechanicalRecipeParams { public ResourceLocation id; public ArrayList recipeRequirements; protected ArrayList conditions; - protected BaseRecipeParams(ResourceLocation id) { + protected AbstractMechanicalRecipeParams(ResourceLocation id) { this.id = id; recipeRequirements = new ArrayList<>(); conditions = new ArrayList<>(); diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IBaseRecipeParams.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IBaseRecipeParams.java deleted file mode 100644 index f289d27..0000000 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/IBaseRecipeParams.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.oierbravo.mechanicals.foundation.recipe; - -public interface IBaseRecipeParams { - -} diff --git a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/RecipeRequirementsUtils.java b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/RecipeRequirementsUtils.java deleted file mode 100644 index 00fda14..0000000 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/RecipeRequirementsUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.oierbravo.mechanicals.foundation.recipe; - -public class RecipeRequirementsUtils { - /*public static List getMissingRequirements(List pRecipeRequirements, BlockEntity pBlockEntity){ - ArrayList missingRequirements = new ArrayList<>(); - for( IRecipeRequirement requirement : pRecipeRequirements ){ - if(!requirement.test(pBlockEntity.getLevel(), pBlockEntity)){ - missingRequirements.add(requirement.getIdString()); - } - } - return missingRequirements; - }*/ - - /*public static
List> getRequirementsTooltips(BR recipe){ - if(recipe.getRecipeRequirements().isEmpty()) - return List.of(); - return recipe.getRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList(); - }*/ - -} diff --git a/src/main/java/com/oierbravo/mechanicals/jei/CreateRecipeCategoryBuilder.java b/src/main/java/com/oierbravo/mechanicals/jei/CreateRecipeCategoryBuilder.java new file mode 100644 index 0000000..fc1ebd3 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/jei/CreateRecipeCategoryBuilder.java @@ -0,0 +1,4 @@ +package com.oierbravo.mechanicals.jei; + +public class CreateRecipeCategoryBuilder { +} diff --git a/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java b/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java new file mode 100644 index 0000000..2617c56 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanicals/utility/RegistrateLangBuilder.java @@ -0,0 +1,21 @@ +package com.oierbravo.mechanicals.utility; + +import com.simibubi.create.foundation.data.CreateRegistrate; + +public class RegistrateLangBuilder { + private final String namespace; + private final CreateRegistrate registrate; + + public RegistrateLangBuilder(String namespace, CreateRegistrate registrate) { + this.namespace = namespace; + this.registrate = registrate; + } + public RegistrateLangBuilder add(String literal, String defaultTranslation){ + registrate.addRawLang(namespace + "." + literal,defaultTranslation); + return this; + } + public RegistrateLangBuilder addRaw(String literal, String defaultTranslation){ + registrate.addRawLang(literal,defaultTranslation); + return this; + } +} diff --git a/src/main/resources/assets/mechanicals/lang/en_us.json b/src/main/resources/assets/mechanicals/lang/en_us.json index 20b2ef5..f558765 100644 --- a/src/main/resources/assets/mechanicals/lang/en_us.json +++ b/src/main/resources/assets/mechanicals/lang/en_us.json @@ -2,7 +2,7 @@ "mechanicals.ui.progress": "Progress: %d%%", "itemGroup.mechanicals": "Mechanicals", "mechanicals.ui.recipe.requirements.title": "Requirements:", - "mechanicals.ui.recipe_requirement.none.tooltip": "No specific requirement", + "mechanicals.ui.recipe_requirement.none.tooltip": "None", "mechanicals.ui.recipe_requirement.biome.tooltip.title": "Biome:", "mechanicals.ui.recipe_requirement.biome.tooltip.value": "%s", "mechanicals.ui.recipe_requirement.biome_tag.tooltip.title": "Biome Tag:", diff --git a/src/main/resources/assets/mechanicals/textures/jei/widgets.png b/src/main/resources/assets/mechanicals/textures/jei/widgets.png new file mode 100644 index 0000000..cae22ac Binary files /dev/null and b/src/main/resources/assets/mechanicals/textures/jei/widgets.png differ