diff --git a/CHANGELOG.md b/CHANGELOG.md index c38e7199f..371004a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ #### Fixes * Fixed #1824 +* Fixed #1833 ## Release Candidate 11 (25 Apr 2020) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/MagicianTalisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/MagicianTalisman.java index 36fe2a6e4..2b9738f26 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/MagicianTalisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/MagicianTalisman.java @@ -29,9 +29,9 @@ public class MagicianTalisman extends Talisman { addItemSetting(enchantments.toArray(new ItemSetting[0])); } - public TalismanEnchantment getRandomEnchantment() { - List enabled = enchantments.stream().filter(TalismanEnchantment::getValue).collect(Collectors.toList()); - return enabled.get(ThreadLocalRandom.current().nextInt(enabled.size())); + public TalismanEnchantment getRandomEnchantment(ItemStack item) { + List enabled = enchantments.stream().filter(e -> e.getEnchantment().canEnchantItem(item)).filter(TalismanEnchantment::getValue).collect(Collectors.toList()); + return enabled.isEmpty() ? null : enabled.get(ThreadLocalRandom.current().nextInt(enabled.size())); } /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index f457ce52f..c9da7a3fc 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -185,8 +185,10 @@ public class TalismanListener implements Listener { if (Talisman.checkFor(e, SlimefunItems.TALISMAN_MAGICIAN)) { MagicianTalisman talisman = (MagicianTalisman) SlimefunItems.TALISMAN_MAGICIAN.getItem(); - TalismanEnchantment enchantment = talisman.getRandomEnchantment(); - e.getEnchantsToAdd().put(enchantment.getEnchantment(), enchantment.getLevel()); + TalismanEnchantment enchantment = talisman.getRandomEnchantment(e.getItem()); + if (enchantment != null) { + e.getEnchantsToAdd().put(enchantment.getEnchantment(), enchantment.getLevel()); + } } if (!e.getEnchantsToAdd().containsKey(Enchantment.SILK_TOUCH) && Enchantment.LOOT_BONUS_BLOCKS.canEnchantItem(e.getItem()) && Talisman.checkFor(e, SlimefunItems.TALISMAN_WIZARD)) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java index 8658241c1..15e66eb50 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -641,6 +641,10 @@ public class BlockStorage { } public BlockMenu loadInventory(Location l, BlockMenuPreset preset) { + if (preset == null) { + return null; + } + BlockMenu menu = new BlockMenu(preset, l); inventories.put(l, menu); return menu;