From c4619ecbaa21ff4204bea4adaabadf97bc3dfe40 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 30 Nov 2020 15:13:53 +0100 Subject: [PATCH] Fixes #2574 --- CHANGELOG.md | 1 + ...rafter.java => AbstractCraftingTable.java} | 34 ++++++++++++++----- .../items/multiblocks/ArmorForge.java | 2 +- .../multiblocks/EnhancedCraftingTable.java | 2 +- .../items/multiblocks/MagicWorkbench.java | 2 +- 5 files changed, 29 insertions(+), 12 deletions(-) rename src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/{BackpackCrafter.java => AbstractCraftingTable.java} (79%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fa543509..53ed9b71e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -79,6 +79,7 @@ * Fixed Sword of Beheading dropping Zombie/Skeleton Skulls from Zombie/Skeleton subvariants * Fixed #2518 * Fixed #2421 +* Fixed #2574 ## Release Candidate 17 (17 Oct 2020) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/BackpackCrafter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java similarity index 79% rename from src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/BackpackCrafter.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java index baf52187a..e5349c7e0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/BackpackCrafter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java @@ -4,6 +4,10 @@ import java.util.List; import java.util.Optional; import java.util.UUID; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.BlockFace; @@ -20,6 +24,7 @@ import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.SlimefunBackpack; import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; +import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; @@ -35,20 +40,24 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; * @see ArmorForge * */ -abstract class BackpackCrafter extends MultiBlockMachine { +abstract class AbstractCraftingTable extends MultiBlockMachine { - BackpackCrafter(Category category, SlimefunItemStack item, ItemStack[] recipe, BlockFace trigger) { + @ParametersAreNonnullByDefault + AbstractCraftingTable(Category category, SlimefunItemStack item, ItemStack[] recipe, BlockFace trigger) { super(category, item, recipe, trigger); } - protected Inventory createVirtualInventory(Inventory inv) { + @Nonnull + protected Inventory createVirtualInventory(@Nonnull Inventory inv) { Inventory fakeInv = Bukkit.createInventory(null, 9, "Fake Inventory"); for (int j = 0; j < inv.getContents().length; j++) { ItemStack stack = inv.getContents()[j]; - // Fixes #2103 - Properly simulating the consumption - // (which may leave behind empty buckets or glass bottles) + /** + * Fixes #2103 - Properly simulating the consumption + * (which may leave behind empty buckets or glass bottles) + */ if (stack != null) { stack = stack.clone(); ItemUtils.consumeItem(stack, true); @@ -60,18 +69,24 @@ abstract class BackpackCrafter extends MultiBlockMachine { return fakeInv; } + @ParametersAreNonnullByDefault protected void upgradeBackpack(Player p, Inventory inv, SlimefunBackpack backpack, ItemStack output) { - ItemStack backpackItem = null; + ItemStack input = null; for (int j = 0; j < 9; j++) { if (inv.getContents()[j] != null && inv.getContents()[j].getType() != Material.AIR && SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { - backpackItem = inv.getContents()[j]; + input = inv.getContents()[j]; break; } } + // Fixes #2574 - Carry over the Soulbound status + if (SlimefunUtils.isSoulbound(input)) { + SlimefunUtils.setSoulbound(output, true); + } + int size = backpack.getSize(); - Optional id = retrieveID(backpackItem, size); + Optional id = retrieveID(input, size); if (id.isPresent()) { for (int line = 0; line < output.getItemMeta().getLore().size(); line++) { @@ -100,7 +115,8 @@ abstract class BackpackCrafter extends MultiBlockMachine { } } - private Optional retrieveID(ItemStack backpack, int size) { + @Nonnull + private Optional retrieveID(@Nullable ItemStack backpack, int size) { if (backpack != null) { for (String line : backpack.getItemMeta().getLore()) { if (line.startsWith(ChatColors.color("&7ID: ")) && line.contains("#")) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java index 608a0e2f5..ff68a91e1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java @@ -24,7 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class ArmorForge extends BackpackCrafter { +public class ArmorForge extends AbstractCraftingTable { public ArmorForge(Category category, SlimefunItemStack item) { super(category, item, new ItemStack[] { null, null, null, null, new ItemStack(Material.ANVIL), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), null }, BlockFace.SELF); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java index b03a4f182..a55a804c2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java @@ -23,7 +23,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class EnhancedCraftingTable extends BackpackCrafter { +public class EnhancedCraftingTable extends AbstractCraftingTable { public EnhancedCraftingTable(Category category, SlimefunItemStack item) { super(category, item, new ItemStack[] { null, null, null, null, new ItemStack(Material.CRAFTING_TABLE), null, null, new ItemStack(Material.DISPENSER), null }, BlockFace.SELF); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java index c3ffd22df..fd0056e6a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java @@ -24,7 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class MagicWorkbench extends BackpackCrafter { +public class MagicWorkbench extends AbstractCraftingTable { public MagicWorkbench(Category category, SlimefunItemStack item) { super(category, item, new ItemStack[] { null, null, null, null, null, null, new ItemStack(Material.BOOKSHELF), new ItemStack(Material.CRAFTING_TABLE), new ItemStack(Material.DISPENSER) }, BlockFace.UP);