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);