From b3a54a78bcbd6aef015454d09756a6e452ae71a0 Mon Sep 17 00:00:00 2001 From: Joe Hirschfeld Date: Fri, 4 Oct 2019 22:24:01 -0700 Subject: [PATCH] Save materials in unlimited by name There was a mistake where materials in unlimited would instead be saved as a bukkit Material instead of its name. Instead, save it by the name. --- .../src/com/earth2me/essentials/UserData.java | 26 ++++++++++++------- .../essentials/commands/Commandunlimited.java | 14 +++++----- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index d23a30528..439913322 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -17,6 +17,7 @@ import java.math.BigDecimal; import java.util.*; import java.util.Map.Entry; import java.util.regex.Pattern; +import java.util.stream.Collectors; import static com.earth2me.essentials.I18n.tl; @@ -234,10 +235,10 @@ public abstract class UserData extends PlayerExtension implements IConf { config.save(); } - private List unlimited; + private Set unlimited; - private List _getUnlimited() { - List retlist = new ArrayList<>(); + private Set _getUnlimited() { + Set retlist = new HashSet<>(); List configList = config.getStringList("unlimited"); for(String s : configList) { Material mat = Material.matchMaterial(s); @@ -249,7 +250,7 @@ public abstract class UserData extends PlayerExtension implements IConf { return retlist; } - public List getUnlimited() { + public Set getUnlimited() { return unlimited; } @@ -258,13 +259,20 @@ public abstract class UserData extends PlayerExtension implements IConf { } public void setUnlimited(ItemStack stack, boolean state) { - if (unlimited.contains(stack.getType())) { - unlimited.remove(stack.getType()); - } + boolean wasUpdated; if (state) { - unlimited.add(stack.getType()); + wasUpdated = unlimited.add(stack.getType()); + } else { + wasUpdated = unlimited.remove(stack.getType()); } - config.setProperty("unlimited", unlimited); + + if (wasUpdated) { + applyUnlimited(); + } + } + + private void applyUnlimited() { + config.setProperty("unlimited", unlimited.stream().map(Enum::name).collect(Collectors.toList())); config.save(); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java index 36b34ca27..7856b67c0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java @@ -5,8 +5,10 @@ import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import static com.earth2me.essentials.I18n.tl; @@ -32,14 +34,10 @@ public class Commandunlimited extends EssentialsCommand { final String list = getList(target); user.sendMessage(list); } else if (args[0].equalsIgnoreCase("clear")) { - final List itemList = target.getUnlimited(); + final Set itemList = new HashSet<>(target.getUnlimited()); - int index = 0; - while (itemList.size() > index) { - final Material item = itemList.get(index); - if (!toggleUnlimited(user, target, item.toString())) { - index++; - } + for (Material m : itemList) { + toggleUnlimited(user, target, m.toString()); } } else { toggleUnlimited(user, target, args[0]); @@ -50,7 +48,7 @@ public class Commandunlimited extends EssentialsCommand { final StringBuilder output = new StringBuilder(); output.append(tl("unlimitedItems")).append(" "); boolean first = true; - final List items = target.getUnlimited(); + final Set items = target.getUnlimited(); if (items.isEmpty()) { output.append(tl("none")); }