Skip to content

Commit

Permalink
fix: fix machine menus displaying wrong crafting cost
Browse files Browse the repository at this point in the history
  • Loading branch information
Elenterius committed Sep 15, 2023
1 parent 3c64278 commit 430d54e
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 124 deletions.
Original file line number Diff line number Diff line change
@@ -1,48 +1,18 @@
package com.github.elenterius.biomancy.block.biolab;

import com.github.elenterius.biomancy.block.state.RecipeCraftingStateData;
import com.github.elenterius.biomancy.block.state.FuelConsumingRecipeCraftingStateData;
import com.github.elenterius.biomancy.recipe.BioLabRecipe;
import com.github.elenterius.biomancy.util.fuel.IFuelHandler;

public class BioLabStateData extends RecipeCraftingStateData<BioLabRecipe> {

public static final int FUEL_INDEX = 2;
public final IFuelHandler fuelHandler;
public class BioLabStateData extends FuelConsumingRecipeCraftingStateData<BioLabRecipe> {

public BioLabStateData(IFuelHandler fuelHandler) {
this.fuelHandler = fuelHandler;
super(fuelHandler);
}

@Override
protected Class<BioLabRecipe> getRecipeType() {
return BioLabRecipe.class;
}

@Override
public int getFuelCost() {
return fuelHandler.getFuelCost(timeForCompletion);
}

@Override
public int get(int index) {
validateIndex(index);
if (index == TIME_INDEX) return timeElapsed;
else if (index == TIME_FOR_COMPLETION_INDEX) return timeForCompletion;
else if (index == FUEL_INDEX) return fuelHandler.getFuelAmount();
return 0;
}

@Override
public void set(int index, int value) {
validateIndex(index);
if (index == TIME_INDEX) timeElapsed = value;
else if (index == TIME_FOR_COMPLETION_INDEX) timeForCompletion = value;
else if (index == FUEL_INDEX) fuelHandler.setFuelAmount(value);
}

@Override
public int getCount() {
return 3;
}

}
Original file line number Diff line number Diff line change
@@ -1,54 +1,18 @@
package com.github.elenterius.biomancy.block.decomposer;

import com.github.elenterius.biomancy.block.state.RecipeCraftingStateData;
import com.github.elenterius.biomancy.block.state.FuelConsumingRecipeCraftingStateData;
import com.github.elenterius.biomancy.recipe.DecomposerRecipe;
import com.github.elenterius.biomancy.util.fuel.IFuelHandler;

public class DecomposerStateData extends RecipeCraftingStateData<DecomposerRecipe> {

public static final int FUEL_INDEX = 2;

public final IFuelHandler fuelHandler;
public class DecomposerStateData extends FuelConsumingRecipeCraftingStateData<DecomposerRecipe> {

public DecomposerStateData(IFuelHandler fuelHandler) {
this.fuelHandler = fuelHandler;
super(fuelHandler);
}

@Override
protected Class<DecomposerRecipe> getRecipeType() {
return DecomposerRecipe.class;
}

@Override
public int getFuelCost() {
return fuelHandler.getFuelCost(timeForCompletion);
}

@Override
public int get(int index) {
validateIndex(index);
return switch (index) {
case TIME_INDEX -> timeElapsed;
case TIME_FOR_COMPLETION_INDEX -> timeForCompletion;
case FUEL_INDEX -> fuelHandler.getFuelAmount();
default -> 0;
};
}

@Override
public void set(int index, int value) {
validateIndex(index);
switch (index) {
case TIME_INDEX -> timeElapsed = value;
case TIME_FOR_COMPLETION_INDEX -> timeForCompletion = value;
case FUEL_INDEX -> fuelHandler.setFuelAmount(value);
default -> throw new IllegalStateException("Unexpected value: " + index);
}
}

@Override
public int getCount() {
return 3;
}

}
Original file line number Diff line number Diff line change
@@ -1,54 +1,18 @@
package com.github.elenterius.biomancy.block.digester;

import com.github.elenterius.biomancy.block.state.RecipeCraftingStateData;
import com.github.elenterius.biomancy.block.state.FuelConsumingRecipeCraftingStateData;
import com.github.elenterius.biomancy.recipe.DigesterRecipe;
import com.github.elenterius.biomancy.util.fuel.IFuelHandler;

public class DigesterStateData extends RecipeCraftingStateData<DigesterRecipe> {

public static final int FUEL_AMOUNT_INDEX = 2;

public final IFuelHandler fuelHandler;
public class DigesterStateData extends FuelConsumingRecipeCraftingStateData<DigesterRecipe> {

public DigesterStateData(IFuelHandler fuelHandler) {
this.fuelHandler = fuelHandler;
super(fuelHandler);
}

@Override
protected Class<DigesterRecipe> getRecipeType() {
return DigesterRecipe.class;
}

@Override
public int getFuelCost() {
return fuelHandler.getFuelCost(timeForCompletion);
}

@Override
public int get(int index) {
validateIndex(index);
return switch (index) {
case TIME_INDEX -> timeElapsed;
case TIME_FOR_COMPLETION_INDEX -> timeForCompletion;
case FUEL_AMOUNT_INDEX -> fuelHandler.getFuelAmount();
default -> 0;
};
}

@Override
public void set(int index, int value) {
validateIndex(index);
switch (index) {
case TIME_INDEX -> timeElapsed = value;
case TIME_FOR_COMPLETION_INDEX -> timeForCompletion = value;
case FUEL_AMOUNT_INDEX -> fuelHandler.setFuelAmount(value);
default -> throw new IllegalStateException("Unexpected value: " + index);
}
}

@Override
public int getCount() {
return 3;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.github.elenterius.biomancy.block.state;

import com.github.elenterius.biomancy.recipe.ProcessingRecipe;
import com.github.elenterius.biomancy.util.fuel.IFuelHandler;

public abstract class FuelConsumingRecipeCraftingStateData<T extends ProcessingRecipe> extends RecipeCraftingStateData<T> {

public static final int FUEL_INDEX = 3;

public final IFuelHandler fuelHandler;

protected FuelConsumingRecipeCraftingStateData(IFuelHandler fuelHandler) {
this.fuelHandler = fuelHandler;
}

@Override
public int getFuelCost() {
return fuelHandler.getFuelCost(nutrientsCost);
}

@Override
public int get(int index) {
if (index == FUEL_INDEX) return fuelHandler.getFuelAmount();
return super.get(index);
}

@Override
public void set(int index, int value) {
if (index == FUEL_INDEX) {
fuelHandler.setFuelAmount(value);
return;
}
super.set(index, value);
}

@Override
public int getCount() {
return 4;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@

public abstract class RecipeCraftingStateData<T extends ProcessingRecipe> implements ContainerData {

public static final String NBT_KEY_RECIPE_ID = "RecipeId";
public static final String NBT_KEY_TIME_ELAPSED = "TimeElapsed";
public static final String NBT_KEY_TIME_FOR_COMPLETION = "TimeForCompletion";
public static final String RECIPE_ID_KEY = "RecipeId";
public static final String TIME_ELAPSED_KEY = "TimeElapsed";
public static final String TIME_FOR_COMPLETION_KEY = "TimeForCompletion";
public static final String NUTRIENTS_COST_KEY = "NutrientsCost";

public static final int TIME_INDEX = 0;
public static final int TIME_FOR_COMPLETION_INDEX = 1;
public static final int NUTRIENTS_COST_INDEX = 2;

public int timeElapsed;
public int timeForCompletion;
public int nutrientsCost;

private CraftingState craftingState = CraftingState.NONE;
private ResourceLocation recipeId;
Expand Down Expand Up @@ -63,6 +66,7 @@ public Optional<T> getCraftingGoalRecipe(Level world) {
public void setCraftingGoalRecipe(T recipe) {
recipeId = recipe.getId();
timeForCompletion = recipe.getCraftingTimeTicks();
nutrientsCost = recipe.getCraftingCostNutrients();
}

public abstract int getFuelCost();
Expand All @@ -71,26 +75,29 @@ public void clear() {
recipeId = null;
timeElapsed = 0;
timeForCompletion = 0;
nutrientsCost = 0;
}

public void serialize(CompoundTag tag) {
CraftingState.toNBT(tag, craftingState);
if (recipeId != null) {
tag.putString(NBT_KEY_RECIPE_ID, recipeId.toString());
tag.putString(RECIPE_ID_KEY, recipeId.toString());
}
tag.putInt(NBT_KEY_TIME_ELAPSED, timeElapsed);
tag.putInt(NBT_KEY_TIME_FOR_COMPLETION, timeForCompletion);
tag.putInt(TIME_ELAPSED_KEY, timeElapsed);
tag.putInt(TIME_FOR_COMPLETION_KEY, timeForCompletion);
tag.putInt(NUTRIENTS_COST_KEY, nutrientsCost);
}

public void deserialize(CompoundTag tag) {
craftingState = CraftingState.fromNBT(tag);
if (tag.contains(NBT_KEY_RECIPE_ID)) {
String id = tag.getString(NBT_KEY_RECIPE_ID);
if (tag.contains(RECIPE_ID_KEY)) {
String id = tag.getString(RECIPE_ID_KEY);
recipeId = ResourceLocation.tryParse(id);
}
else recipeId = null;
timeElapsed = tag.getInt(NBT_KEY_TIME_ELAPSED);
timeForCompletion = tag.getInt(NBT_KEY_TIME_FOR_COMPLETION);
timeElapsed = tag.getInt(TIME_ELAPSED_KEY);
timeForCompletion = tag.getInt(TIME_FOR_COMPLETION_KEY);
nutrientsCost = tag.getInt(NUTRIENTS_COST_KEY);
}

protected void validateIndex(int index) {
Expand All @@ -102,6 +109,7 @@ public int get(int index) {
validateIndex(index);
if (index == TIME_INDEX) return timeElapsed;
else if (index == TIME_FOR_COMPLETION_INDEX) return timeForCompletion;
else if (index == NUTRIENTS_COST_INDEX) return nutrientsCost;
return 0;
}

Expand All @@ -110,11 +118,12 @@ public void set(int index, int value) {
validateIndex(index);
if (index == TIME_INDEX) timeElapsed = value;
else if (index == TIME_FOR_COMPLETION_INDEX) timeForCompletion = value;
else if (index == NUTRIENTS_COST_INDEX) nutrientsCost = value;
}

@Override
public int getCount() {
return 2;
return 3;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ protected void renderTooltip(PoseStack poseStack, int mouseX, int mouseY) {
}

private void drawFuelTooltip(PoseStack poseStack, int mouseX, int mouseY) {
int maxFuel = menu.getMAxFuelAmount();
int maxFuel = menu.getMaxFuelAmount();
int fuelAmount = menu.getFuelAmount();
int totalFuelCost = menu.getFuelCost();
GuiRenderUtil.drawFuelTooltip(this, poseStack, mouseX, mouseY, maxFuel, fuelAmount, totalFuelCost);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public int getFuelAmount() {
return stateData.fuelHandler.getFuelAmount();
}

public int getMAxFuelAmount() {
public int getMaxFuelAmount() {
return stateData.fuelHandler.getMaxFuelAmount();
}

Expand Down

0 comments on commit 430d54e

Please sign in to comment.