mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Merge pull request #2757 from StarWishsama/magician-talisman-fix
Fixes #2679
This commit is contained in:
commit
b4d1894d8f
@ -1,5 +1,18 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.settings.TalismanEnchantment;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@ -7,20 +20,6 @@ import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.settings.TalismanEnchantment;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
|
||||
/**
|
||||
* The {@link MagicianTalisman} is a special kind of {@link Talisman} which awards a {@link Player}
|
||||
* with an extra {@link Enchantment} when they enchant their {@link ItemStack}.
|
||||
@ -30,12 +29,16 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
*/
|
||||
public class MagicianTalisman extends Talisman {
|
||||
|
||||
private final ItemSetting<Boolean> allowEnchantmentBooks = new ItemSetting<>("allow-enchantment-books", false);
|
||||
|
||||
private final Set<TalismanEnchantment> enchantments = new HashSet<>();
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
public MagicianTalisman(SlimefunItemStack item, ItemStack[] recipe) {
|
||||
super(item, recipe, false, false, "magician", 80);
|
||||
|
||||
addItemSetting(allowEnchantmentBooks);
|
||||
|
||||
for (Enchantment enchantment : Enchantment.values()) {
|
||||
try {
|
||||
for (int i = 1; i <= enchantment.getMaxLevel(); i++) {
|
||||
@ -70,7 +73,7 @@ public class MagicianTalisman extends Talisman {
|
||||
|
||||
// @formatter:off
|
||||
List<TalismanEnchantment> enabled = enchantments.stream()
|
||||
.filter(e -> e.getEnchantment().canEnchantItem(item))
|
||||
.filter(e -> (isEnchantmentBookAllowed() && item.getType() == Material.BOOK) || e.getEnchantment().canEnchantItem(item))
|
||||
.filter(e -> hasConflicts(existingEnchantments, e))
|
||||
.filter(TalismanEnchantment::getValue)
|
||||
.collect(Collectors.toList());
|
||||
@ -90,4 +93,13 @@ public class MagicianTalisman extends Talisman {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether enchantment books
|
||||
* can be given an extra {@link Enchantment} or not.
|
||||
*
|
||||
* @return Whether enchantment books can receive an extra {@link Enchantment}
|
||||
*/
|
||||
public boolean isEnchantmentBookAllowed() {
|
||||
return allowEnchantmentBooks.getValue();
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.MagicianTalisman;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.Talisman;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.settings.TalismanEnchantment;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@ -41,13 +38,14 @@ import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.MagicianTalisman;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.Talisman;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.settings.TalismanEnchantment;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
public class TalismanListener implements Listener {
|
||||
|
||||
@ -235,13 +233,19 @@ public class TalismanListener implements Listener {
|
||||
Map<Enchantment, Integer> enchantments = e.getEnchantsToAdd();
|
||||
|
||||
// Magician Talisman
|
||||
if (Talisman.checkFor(e, SlimefunItems.TALISMAN_MAGICIAN)) {
|
||||
MagicianTalisman talisman = (MagicianTalisman) SlimefunItems.TALISMAN_MAGICIAN.getItem();
|
||||
TalismanEnchantment enchantment = talisman.getRandomEnchantment(e.getItem(), enchantments.keySet());
|
||||
MagicianTalisman talisman = (MagicianTalisman) SlimefunItems.TALISMAN_MAGICIAN.getItem();
|
||||
TalismanEnchantment enchantment = talisman.getRandomEnchantment(e.getItem(), enchantments.keySet());
|
||||
|
||||
if (enchantment != null) {
|
||||
enchantments.put(enchantment.getEnchantment(), enchantment.getLevel());
|
||||
}
|
||||
if (enchantment != null && Talisman.checkFor(e, SlimefunItems.TALISMAN_MAGICIAN)) {
|
||||
/*
|
||||
* Fix #2679
|
||||
* By default, the Bukkit API doesn't allow us to give enchantment books extra enchantments.
|
||||
*/
|
||||
if (talisman.isEnchantmentBookAllowed() && e.getItem().getType() == Material.BOOK) {
|
||||
e.getItem().addUnsafeEnchantment(enchantment.getEnchantment(), enchantment.getLevel());
|
||||
} else {
|
||||
enchantments.put(enchantment.getEnchantment(), enchantment.getLevel());
|
||||
}
|
||||
}
|
||||
|
||||
// Wizard Talisman
|
||||
|
Loading…
Reference in New Issue
Block a user