Fixed trait merging recipe and botched gems appearing when they shouldn't

This commit is contained in:
Sollace 2022-08-28 18:00:28 +02:00
parent 99effcfd8f
commit 6ed0bb1859
2 changed files with 14 additions and 4 deletions

View file

@ -37,7 +37,7 @@ public class SpellEnhancingRecipe implements SpellbookRecipe {
@Override @Override
public boolean matches(SpellbookInventory inventory, World world) { public boolean matches(SpellbookInventory inventory, World world) {
ItemStack stack = inventory.getItemToModify(); ItemStack stack = inventory.getItemToModify();
return !stack.isEmpty() && stack.getItem() == UItems.GEMSTONE && GemstoneItem.isEnchanted(stack); return material.test(stack) && GemstoneItem.isEnchanted(stack);
} }
@Override @Override

View file

@ -153,7 +153,7 @@ public class SpellbookScreenHandler extends ScreenHandler {
.findFirst() .findFirst()
.filter(recipe -> result.shouldCraftRecipe(world, (ServerPlayerEntity)this.inventory.player, recipe)) .filter(recipe -> result.shouldCraftRecipe(world, (ServerPlayerEntity)this.inventory.player, recipe))
.map(recipe -> recipe.craft(input)) .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())); ((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(); 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) { public int getRing(int slot) {
Slot s = slots.get(slot); Slot s = slots.get(slot);
return s instanceof SpellbookSlot ? ((SpellbookSlot)s).getRing() : 0; return s instanceof SpellbookSlot ? ((SpellbookSlot)s).getRing() : 0;
@ -432,10 +441,10 @@ public class SpellbookScreenHandler extends ScreenHandler {
@Override @Override
public void setStack(ItemStack stack) { public void setStack(ItemStack stack) {
super.setStack(stack); if (!stack.isEmpty() && !ItemStack.areEqual(stack, getStack())) {
if (!stack.isEmpty()) {
player.playSound(stack.getItem() == UItems.BOTCHED_GEM ? USounds.GUI_ABILITY_FAIL : USounds.GUI_SPELL_CRAFT_SUCCESS, SoundCategory.MASTER, 1, 0.3F); 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 @Override
@ -454,6 +463,7 @@ public class SpellbookScreenHandler extends ScreenHandler {
InventoryUtil.iterate(input).forEach(s -> { InventoryUtil.iterate(input).forEach(s -> {
pony.getDiscoveries().unlock(s.getItem()); pony.getDiscoveries().unlock(s.getItem());
}); });
//gemSlot.setStack(ItemStack.EMPTY);
super.onTakeItem(player, stack); super.onTakeItem(player, stack);
} }
} }