From 6ed0bb18596836b2277b5cffec8a446a76cd6449 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 28 Aug 2022 18:00:28 +0200 Subject: [PATCH] Fixed trait merging recipe and botched gems appearing when they shouldn't --- .../spell/crafting/SpellEnhancingRecipe.java | 2 +- .../container/SpellbookScreenHandler.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java index c2ac5316..71a8629e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java @@ -37,7 +37,7 @@ public class SpellEnhancingRecipe implements SpellbookRecipe { @Override public boolean matches(SpellbookInventory inventory, World world) { ItemStack stack = inventory.getItemToModify(); - return !stack.isEmpty() && stack.getItem() == UItems.GEMSTONE && GemstoneItem.isEnchanted(stack); + return material.test(stack) && GemstoneItem.isEnchanted(stack); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java b/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java index 2895f3ce..5712d455 100644 --- a/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java @@ -153,7 +153,7 @@ public class SpellbookScreenHandler extends ScreenHandler { .findFirst() .filter(recipe -> result.shouldCraftRecipe(world, (ServerPlayerEntity)this.inventory.player, recipe)) .map(recipe -> recipe.craft(input)) - .orElse(UItems.BOTCHED_GEM.getDefaultStack())); + .orElse(!input.hasIngredients() ? ItemStack.EMPTY : input.getTraits().applyTo(UItems.BOTCHED_GEM.getDefaultStack()))); ((ServerPlayerEntity)this.inventory.player).networkHandler.sendPacket(new ScreenHandlerSlotUpdateS2CPacket(syncId, nextRevision(), outputSlot.id, outputSlot.getStack())); } @@ -331,6 +331,15 @@ public class SpellbookScreenHandler extends ScreenHandler { return gemSlot.getStack(); } + public boolean hasIngredients() { + for (int i = 0; i < GEM_SLOT_INDEX; i++) { + if (!getStack(i).isEmpty()) { + return true; + } + } + return false; + } + public int getRing(int slot) { Slot s = slots.get(slot); return s instanceof SpellbookSlot ? ((SpellbookSlot)s).getRing() : 0; @@ -432,10 +441,10 @@ public class SpellbookScreenHandler extends ScreenHandler { @Override public void setStack(ItemStack stack) { - super.setStack(stack); - if (!stack.isEmpty()) { + if (!stack.isEmpty() && !ItemStack.areEqual(stack, getStack())) { player.playSound(stack.getItem() == UItems.BOTCHED_GEM ? USounds.GUI_ABILITY_FAIL : USounds.GUI_SPELL_CRAFT_SUCCESS, SoundCategory.MASTER, 1, 0.3F); } + super.setStack(stack); } @Override @@ -454,6 +463,7 @@ public class SpellbookScreenHandler extends ScreenHandler { InventoryUtil.iterate(input).forEach(s -> { pony.getDiscoveries().unlock(s.getItem()); }); + //gemSlot.setStack(ItemStack.EMPTY); super.onTakeItem(player, stack); } }