1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

optimize: add a switch for limit, set default value to 10

feat: utilize the progress bar to display (dis)enchant failed
This commit is contained in:
StarWishsama 2021-02-03 12:31:42 +08:00
parent f308c60bd1
commit e5deee2bbd
2 changed files with 43 additions and 15 deletions

View File

@ -2,6 +2,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.electric.machine
import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils;
import io.github.thebusybiscuit.slimefun4.api.events.AutoDisenchantEvent;
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
@ -15,6 +16,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
@ -22,6 +24,7 @@ import org.bukkit.inventory.meta.Repairable;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@ -39,12 +42,14 @@ import java.util.Map;
*/
public class AutoDisenchanter extends AContainer {
private final ItemSetting<Boolean> useEnchantLevelLimit = new ItemSetting<>("use-enchant-level-limit", false);
private final IntRangeSetting enchantLevelLimit = new IntRangeSetting("enchant-level-limit", 0, Short.MAX_VALUE, Short.MAX_VALUE);
@ParametersAreNonnullByDefault
public AutoDisenchanter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
addItemSetting(useEnchantLevelLimit);
addItemSetting(enchantLevelLimit);
}
@ -78,16 +83,24 @@ public class AutoDisenchanter extends AContainer {
int amount = 0;
for (Map.Entry<Enchantment, Integer> entry : item.getEnchantments().entrySet()) {
if (enchantLevelLimit.getValue() >= entry.getValue()) {
if (!useEnchantLevelLimit.getValue() || enchantLevelLimit.getValue() >= entry.getValue()) {
enchantments.put(entry.getKey(), entry.getValue());
amount++;
} else if (!menu.toInventory().getViewers().isEmpty()) {
for (HumanEntity viewer : menu.toInventory().getViewers()) {
SlimefunPlugin.getLocalization().sendMessage(viewer, "messages.above-limit-level", true,
(message -> message.replace("%level%", enchantLevelLimit.getValue().toString())
.replace("%item%", item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name())
));
}
String notice = SlimefunPlugin.getLocalization().getMessage("messages.above-limit-level")
.replace("%level%", enchantLevelLimit.getValue().toString())
.replace("%item%", item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name());
ItemStack progressBar = getProgressBar().clone();
progressBar.setType(Material.BARRIER);
ItemMeta im = progressBar.getItemMeta();
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
im.setLore(Collections.singletonList(notice));
progressBar.setItemMeta(im);
menu.replaceExistingItem(22, progressBar);
}
}

View File

@ -1,6 +1,7 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.electric.machines;
import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils;
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
@ -13,21 +14,27 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class AutoEnchanter extends AContainer {
private final ItemSetting<Boolean> useEnchantLevelLimit = new ItemSetting<>("use-enchant-level-limit", false);
private final IntRangeSetting enchantLevelLimit = new IntRangeSetting("enchant-level-limit", 0, Short.MAX_VALUE, Short.MAX_VALUE);
@ParametersAreNonnullByDefault
public AutoEnchanter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
addItemSetting(useEnchantLevelLimit);
addItemSetting(enchantLevelLimit);
}
@ -55,16 +62,24 @@ public class AutoEnchanter extends AContainer {
for (Map.Entry<Enchantment, Integer> e : meta.getStoredEnchants().entrySet()) {
if (e.getKey().canEnchantItem(target)) {
if (enchantLevelLimit.getValue() >= e.getValue()) {
if (!useEnchantLevelLimit.getValue() || enchantLevelLimit.getValue() >= e.getValue()) {
amount++;
enchantments.put(e.getKey(), e.getValue());
} else if (!menu.toInventory().getViewers().isEmpty()) {
for (HumanEntity viewer : menu.toInventory().getViewers()) {
SlimefunPlugin.getLocalization().sendMessage(viewer, "messages.above-limit-level", true,
(message -> message.replace("%level%", enchantLevelLimit.getValue().toString())
.replace("%item%", item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name())
));
}
String notice = SlimefunPlugin.getLocalization().getMessage("messages.above-limit-level")
.replace("%level%", enchantLevelLimit.getValue().toString())
.replace("%item%", item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name());
ItemStack progressBar = getProgressBar().clone();
progressBar.setType(Material.BARRIER);
ItemMeta im = progressBar.getItemMeta();
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
im.setLore(Collections.singletonList(notice));
progressBar.setItemMeta(im);
menu.replaceExistingItem(22, progressBar);
}
}
}