|
1 | 1 | package com.sk89q.craftbook.util; |
2 | 2 |
|
3 | 3 | import org.bukkit.Material; |
| 4 | +import org.bukkit.block.BlastFurnace; |
4 | 5 | import org.bukkit.block.Block; |
5 | 6 | import org.bukkit.block.BrewingStand; |
6 | 7 | import org.bukkit.block.Chest; |
7 | 8 | import org.bukkit.block.ChiseledBookshelf; |
8 | 9 | import org.bukkit.block.Crafter; |
9 | 10 | import org.bukkit.block.Furnace; |
10 | 11 | import org.bukkit.block.ShulkerBox; |
| 12 | +import org.bukkit.block.Smoker; |
11 | 13 | import org.bukkit.entity.Player; |
12 | 14 | import org.bukkit.inventory.BrewerInventory; |
13 | 15 | import org.bukkit.inventory.DoubleChestInventory; |
@@ -89,12 +91,12 @@ public static List<ItemStack> addItemsToFurnace(Furnace furnace, ItemStack ... s |
89 | 91 | if(!ItemUtil.isStackValid(stack)) |
90 | 92 | continue; |
91 | 93 |
|
92 | | - if (ItemUtil.isFurnaceable(stack) && fitsInSlot(stack, furnace.getInventory().getSmelting())) { |
| 94 | + if (((furnace instanceof Smoker && ItemUtil.isCookable(stack)) || (furnace instanceof BlastFurnace && ItemUtil.isBlastSmeltable(stack)) || (furnace instanceof Furnace && !(furnace instanceof Smoker) && !(furnace instanceof BlastFurnace) && ItemUtil.isSmeltable(stack))) && fitsPartiallyInSlot(stack, furnace.getInventory().getSmelting())) { |
93 | 95 | if (furnace.getInventory().getSmelting() == null) |
94 | 96 | furnace.getInventory().setSmelting(stack); |
95 | 97 | else |
96 | 98 | leftovers.add(ItemUtil.addToStack(furnace.getInventory().getSmelting(), stack)); |
97 | | - } else if (ItemUtil.isAFuel(stack) && fitsInSlot(stack, furnace.getInventory().getFuel())) { |
| 99 | + } else if (ItemUtil.isAFuel(stack) && fitsPartiallyInSlot(stack, furnace.getInventory().getFuel())) { |
98 | 100 | if (furnace.getInventory().getFuel() == null) |
99 | 101 | furnace.getInventory().setFuel(stack); |
100 | 102 | else |
@@ -123,13 +125,13 @@ public static List<ItemStack> addItemsToBrewingStand(BrewingStand brewingStand, |
123 | 125 |
|
124 | 126 | for(ItemStack stack : stacks) { |
125 | 127 | BrewerInventory inv = brewingStand.getInventory(); |
126 | | - if (ItemUtil.isAPotionIngredient(stack) && InventoryUtil.fitsInSlot(stack, inv.getIngredient())) { |
| 128 | + if (ItemUtil.isAPotionIngredient(stack) && InventoryUtil.fitsPartiallyInSlot(stack, inv.getIngredient())) { |
127 | 129 | if (inv.getIngredient() == null) { |
128 | 130 | inv.setIngredient(stack); |
129 | 131 | } else { |
130 | 132 | leftovers.add(ItemUtil.addToStack(inv.getIngredient(), stack)); |
131 | 133 | } |
132 | | - } else if (stack.getType() == Material.BLAZE_POWDER && InventoryUtil.fitsInSlot(stack, inv.getFuel())) { |
| 134 | + } else if (stack.getType() == Material.BLAZE_POWDER && InventoryUtil.fitsPartiallyInSlot(stack, inv.getFuel())) { |
133 | 135 | if (inv.getFuel() == null) { |
134 | 136 | inv.setFuel(stack); |
135 | 137 | } else { |
@@ -330,6 +332,18 @@ public static boolean fitsInSlot(ItemStack stack, ItemStack slot) { |
330 | 332 | return slot == null || ItemUtil.areItemsIdentical(stack, slot) && stack.getAmount() + slot.getAmount() <= stack.getMaxStackSize(); |
331 | 333 | } |
332 | 334 |
|
| 335 | + /** |
| 336 | + * Checks whether the itemstack can partially stack onto the other itemstack. |
| 337 | + * |
| 338 | + * @param stack The stack to add. |
| 339 | + * @param slot The base stack. |
| 340 | + * @return whether it can be added or not. |
| 341 | + */ |
| 342 | + public static boolean fitsPartiallyInSlot(ItemStack stack, ItemStack slot) { |
| 343 | + |
| 344 | + return slot == null || (ItemUtil.areItemsIdentical(stack, slot) && slot.getAmount() < stack.getMaxStackSize()); |
| 345 | + } |
| 346 | + |
333 | 347 | /** |
334 | 348 | * Checks whether the block has an inventory. |
335 | 349 | * |
|
0 commit comments