diff --git a/CHANGELOG.md b/CHANGELOG.md index e92549c4d..5da066f17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ * Fixed a threading issue related to BlockStates and persistent data * Fixed an error when the server was shutting down * Fixed #2721 +* Fixed #2662 +* Fixed #2728 * Fixed Infused Hopper picking up items with a max pickup delay ## Release Candidate 19 (11 Jan 2021) diff --git a/pom.xml b/pom.xml index cf2dacbce..d86cf5324 100644 --- a/pom.xml +++ b/pom.xml @@ -349,7 +349,7 @@ com.github.TheBusyBiscuit CS-CoreLib2 - 0.29.2 + 0.29.3 compile diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java index 7b73eafe8..c79ec0b6a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java @@ -16,6 +16,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import io.github.thebusybiscuit.slimefun4.utils.itemstack.ItemStackWrapper; @@ -310,7 +311,15 @@ final class CargoUtils { } @Nullable - private static ItemStack insertIntoVanillaInventory(ItemStack stack, Inventory inv) { + private static ItemStack insertIntoVanillaInventory(@Nonnull ItemStack stack, @Nonnull Inventory inv) { + /* + * If the Inventory does not accept this Item Type, bounce the item back. + * Example: Shulker boxes within shulker boxes (fixes #2662) + */ + if (!InvUtils.isItemAllowed(stack.getType(), inv.getType())) { + return stack; + } + ItemStack[] contents = inv.getContents(); int[] range = getInputSlotRange(inv, stack); int minSlot = range[0]; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java index 99744102d..1e1a5c3ab 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java @@ -1,5 +1,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.magical; +import javax.annotation.ParametersAreNonnullByDefault; + import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -22,6 +24,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; */ public class KnowledgeFlask extends SimpleSlimefunItem { + @ParametersAreNonnullByDefault public KnowledgeFlask(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { super(category, item, recipeType, recipe, recipeOutput); } @@ -33,7 +36,13 @@ public class KnowledgeFlask extends SimpleSlimefunItem { if (p.getLevel() >= 1 && (!e.getClickedBlock().isPresent() || !(e.getClickedBlock().get().getType().isInteractable()))) { p.setLevel(p.getLevel() - 1); - p.getInventory().addItem(SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE.clone()); + + ItemStack item = SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE.clone(); + + if (!p.getInventory().addItem(item).isEmpty()) { + // The Item could not be added, let's drop it to the ground (fixes #2728) + p.getWorld().dropItemNaturally(p.getLocation(), item); + } p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1F, 0.5F);