Fixed issues causing pie crafting to stop or consume additional ingredients

This commit is contained in:
Alex Page 2025-03-25 09:48:27 +00:00 committed by Ryan
parent 63f8ec3cbf
commit 47ac5e93d6
2 changed files with 13 additions and 8 deletions

View file

@ -44,29 +44,30 @@ public final class CookingRecipePlugin extends UseWithHandler {
@Override @Override
public boolean handle(NodeUsageEvent event) { public boolean handle(NodeUsageEvent event) {
Recipe recipe = null; Recipe recipe = null;
Item part = null;
// TODO: Transitioning to a Listener would save an O(n) pass through the recipes list on every use-with // TODO: Transitioning to a Listener would save an O(n) pass through the recipes list on every use-with
recipeloop:
for (Recipe temp : Recipe.RECIPES) { for (Recipe temp : Recipe.RECIPES) {
if (temp.isSingular()) { if (temp.isSingular()) {
if (temp.getBase().getId() == event.getUsedItem().getId() || temp.getBase().getId() == event.getBaseItem().getId()) { if (temp.getBase().getId() == event.getUsedItem().getId() || temp.getBase().getId() == event.getBaseItem().getId()) {
for (Item ingredient : temp.getIngredients()) { for (Item ingredient : temp.getIngredients()) {
if (ingredient.getId() == event.getBaseItem().getId() || ingredient.getId() == event.getUsedItem().getId()) { if (ingredient.getId() == event.getBaseItem().getId() || ingredient.getId() == event.getUsedItem().getId()) {
recipe = temp; recipe = temp;
break; break recipeloop;
} }
} }
} }
} else { } else {
Item part = null;
Item ingredient = null;
for (int k = 0; k < temp.getParts().length; k++) { for (int k = 0; k < temp.getParts().length; k++) {
for (int i = 0; i < temp.getIngredients().length; i++) { for (int i = 0; i < temp.getIngredients().length; i++) {
part = temp.getParts()[k]; Item tempPart = temp.getParts()[k];
ingredient = temp.getIngredients()[i]; Item ingredient = temp.getIngredients()[i];
if (part.getId() == event.getUsedItem().getId() && ingredient.getId() == event.getBaseItem().getId() || part.getId() == event.getBaseItem().getId() && ingredient.getId() == event.getUsedItem().getId()) { if (tempPart.getId() == event.getUsedItem().getId() && ingredient.getId() == event.getBaseItem().getId() || tempPart.getId() == event.getBaseItem().getId() && ingredient.getId() == event.getUsedItem().getId()) {
if (k == i) {// represents that this ingredient can if (k == i) {// represents that this ingredient can
// mix with the other. // mix with the other.
recipe = temp; recipe = temp;
break; part = tempPart;
break recipeloop;
} }
} }
} }
@ -76,6 +77,7 @@ public final class CookingRecipePlugin extends UseWithHandler {
if (recipe != null) { if (recipe != null) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
final Recipe recipe_ = recipe; final Recipe recipe_ = recipe;
final Item part_ = part;
SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, recipe.getProduct()) { SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, recipe.getProduct()) {
@Override @Override
public void create(final int amount, int index) { public void create(final int amount, int index) {
@ -91,7 +93,7 @@ public final class CookingRecipePlugin extends UseWithHandler {
@Override @Override
public int getAll(int index) { public int getAll(int index) {
return player.getInventory().getAmount(recipe_.getBase()); return player.getInventory().getAmount(part_ != null ? part_ : recipe_.getBase());
} }
}; };
if (player.getInventory().getAmount(recipe.getBase()) == 1) { if (player.getInventory().getAmount(recipe.getBase()) == 1) {

View file

@ -119,6 +119,9 @@ public abstract class Recipe {
} }
} }
if (index != -1) { if (index != -1) {
if (!player.getInventory().containItems(event.getBaseItem().getId(), event.getUsedItem().getId())) {
return;
}
if (player.getInventory().remove(event.getBaseItem()) && player.getInventory().remove(event.getUsedItem())) { if (player.getInventory().remove(event.getBaseItem()) && player.getInventory().remove(event.getUsedItem())) {
player.getInventory().add(getParts()[index + 1]); player.getInventory().add(getParts()[index + 1]);
String message = getMixMessage(event); String message = getMixMessage(event);