From fec901dddb04f575e9b446231b0ee4793b707791 Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Wed, 26 Mar 2025 13:19:32 +0100 Subject: [PATCH] Cycle & DynamicCycle, recipes --- gradle.properties | 2 +- .../blockEntity/behaviour/CycleBehavior.java | 1 + .../behaviour/DynamicCycleBehavior.java | 117 ++++++++---------- .../RecipeRequirementsBehaviour.java | 2 +- .../recipe/AbstractMechanicalRecipe.java | 4 +- .../AbstractMechanicalRecipeBuilder.java | 28 +++-- .../AbstractMechanicalRecipeParams.java | 6 +- 7 files changed, 80 insertions(+), 80 deletions(-) diff --git a/gradle.properties b/gradle.properties index b6c283e..317c307 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.4 +mod_version=0.1.14 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/CycleBehavior.java b/src/main/java/com/oierbravo/mechanicals/foundation/blockEntity/behaviour/CycleBehavior.java index a9e1a30..482a125 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 @@ -179,4 +179,5 @@ public class CycleBehavior extends BlockEntityBehaviour { public int getRunningTicks() { return runningTicks; } + } 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 dda94ce..1a34c39 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 @@ -10,65 +10,53 @@ import net.minecraft.world.level.Level; public class DynamicCycleBehavior extends BlockEntityBehaviour { + private int cycleTime; public static final BehaviourType TYPE = new BehaviourType<>(); public DynamicCycleBehaviorSpecifics specifics; private int prevRunningTicks; private int runningTicks; - private int processingTime; - private int currentTime; private boolean running; private boolean finished; public interface DynamicCycleBehaviorSpecifics { - void onCycleCompleted(); + void onOperationCompleted(); float getKineticSpeed(); - int getProcessingTime(); boolean tryProcess(boolean simulate); - void playSound(); - void setWorking(boolean value); + void playCompletionSound(); + int getProcessingTime(); } public DynamicCycleBehavior(T te) { super(te); this.specifics = te; - processingTime = 0; - currentTime = 0; } @Override 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); + prevRunningTicks = runningTicks = compound.getInt("Ticks"); + cycleTime = compound.getInt("CycleTime"); + super.read(compound,registries, clientPacket); } @Override public void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) { - compound.putInt("CurrentTime", currentTime); - compound.putInt("ProcessingTime", processingTime); compound.putBoolean("Running", running); compound.putBoolean("Finished", finished); + compound.putInt("Ticks", runningTicks); + compound.putInt("CycleTime", cycleTime); super.write(compound, registries, clientPacket); } public void start() { running = true; - currentTime = 0; - processingTime = specifics.getProcessingTime(); - specifics.setWorking(true); - blockEntity.sendData(); - } - public void stop(){ - running = false; - finished = true; - currentTime = 0; - processingTime = 0; - specifics.setWorking(false); + prevRunningTicks = 0; + runningTicks = 0; + cycleTime = specifics.getProcessingTime(); blockEntity.sendData(); + } @Override @@ -92,57 +80,47 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { } return; } - if(!specifics.tryProcess(true)){ - running = false; - blockEntity.sendData(); - return; - } - if (level.isClientSide && runningTicks == -processingTime) { - prevRunningTicks = currentTime; + + + if (level.isClientSide && runningTicks == -cycleTime) { + prevRunningTicks = cycleTime; return; } - if (runningTicks == processingTime && specifics.getKineticSpeed() != 0) { + if (runningTicks >= cycleTime && specifics.getKineticSpeed() != 0) { apply(); - specifics.playSound(); + specifics.playCompletionSound(); if (!level.isClientSide) blockEntity.sendData(); } - specifics.setWorking(true); - running = true; - currentTime += getRunningTickSpeed(); - - - if (!level.isClientSide && runningTicks > processingTime) { - specifics.onCycleCompleted(); - stop(); - + if (!level.isClientSide && runningTicks > cycleTime) { + finished = true; + running = false; + specifics.onOperationCompleted(); blockEntity.sendData(); return; - } - prevRunningTicks = runningTicks; runningTicks += getRunningTickSpeed(); - if (prevRunningTicks < processingTime && runningTicks >= processingTime) { - runningTicks = processingTime / 2; + if (prevRunningTicks < cycleTime && runningTicks >= cycleTime) { + runningTicks = cycleTime; // Pause the ticks until a packet is received if (level.isClientSide && !blockEntity.isVirtual()) - runningTicks = -(processingTime / 2); + runningTicks = -(cycleTime); } } public float getProgress(float partialTicks){ + if (!running) + return 0; int runningTicks = Math.abs(this.runningTicks); float ticks = Mth.lerp(partialTicks, prevRunningTicks, runningTicks); - return ticks/ getProccessingTime() * 100; - } - public int getProccessingTime(){ - return processingTime; + return ticks/ cycleTime * 100; } + protected void apply() { Level level = getWorld(); @@ -157,32 +135,39 @@ public class DynamicCycleBehavior extends BlockEntityBehaviour { float speed = specifics.getKineticSpeed(); if (speed == 0) return 0; - return (int) Mth.lerp(Mth.clamp(Math.abs(speed) / 512f, 0, 1), 1, 30); + return (int) Mth.lerp(Mth.clamp(Math.abs(speed) / 512f, 0, 1), 1, 60); } + public boolean isRunning(){ + return running; + } + public int getTotalProgressPercent() { + return Mth.clamp(runningTicks * 100 / cycleTime, 0,100); + } + public int getCycleTime(){ + return cycleTime; + } + + public int getPrevRunningTicks() { + return prevRunningTicks; + } + public int getRunningTicks() { + return runningTicks; + } + public int getProgressPercent() { if(!running) return 0; - return Mth.clamp(runningTicks * 100 / (getProccessingTime()), 0,100); + return Mth.clamp(runningTicks * 100 / (getCycleTime()), 0,100); } public float getProgressPercentFloat() { if(!running) return 0; - return (float) runningTicks / getProccessingTime(); + return (float) runningTicks / getCycleTime(); } public float getProcessingRemainingPercentFloat() { if(!running) return 1; - return 1 - (float) (processingTime - runningTicks) / processingTime; - } - public int getCurrentTime(){ - return runningTicks; - } - - public boolean isRunning(){ - return running; - } - public boolean isFinished(){ - return finished; + return 1 - (float) (getCycleTime() - runningTicks) / getCycleTime(); } } 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 1cb3813..d4a18b7 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 @@ -38,7 +38,7 @@ public class RecipeRequirementsBehaviour exte return !missingRequirements.isEmpty(); } - public boolean checkRequirements(R pRecipe) { + public boolean checkRequirements(R pRecipe) { missingRequirements = new ArrayList<>(); if(!specifics.matchesIngredients(pRecipe)){ 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 da9563a..e7758e7 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipe.java @@ -21,9 +21,9 @@ public abstract class AbstractMechanicalRecipe conditions; public AbstractMechanicalRecipe(P params){ - this.id = params.id; + id = params.id; recipeRequirements = params.recipeRequirements; - this.conditions = params.conditions; + conditions = params.conditions; } public List getConditions(){ 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 23a5697..f10441f 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeBuilder.java @@ -19,14 +19,9 @@ 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 ArrayList recipeRequirements; - protected ArrayList recipeConditions; public AbstractMechanicalRecipeBuilder(){ - recipeRequirements = new ArrayList<>(); - recipeConditions = new ArrayList<>(); } public abstract R build(); @@ -44,15 +39,19 @@ public abstract class AbstractMechanicalRecipeBuilder conditions) { + params.conditions.addAll(conditions); + return (BRB) this; + } + public void save(RecipeOutput recipeOutput, ResourceLocation resourceLocation) { Advancement.Builder advancement = recipeOutput.advancement() .addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(resourceLocation)) @@ -63,10 +62,25 @@ public abstract class AbstractMechanicalRecipeBuilder consummer){ consummer.accept((BRB) this); return (BRB) this; 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 0d1e116..f910fe2 100644 --- a/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java +++ b/src/main/java/com/oierbravo/mechanicals/foundation/recipe/AbstractMechanicalRecipeParams.java @@ -8,11 +8,11 @@ import java.util.ArrayList; public abstract class AbstractMechanicalRecipeParams { public ResourceLocation id; public ArrayList recipeRequirements; - protected ArrayList conditions; + public ArrayList conditions; protected AbstractMechanicalRecipeParams(ResourceLocation id) { this.id = id; - recipeRequirements = new ArrayList<>(); - conditions = new ArrayList<>(); + this.recipeRequirements = new ArrayList<>(); + this.conditions = new ArrayList<>(); } }