diff --git a/src/main/java/com/garbagemule/MobArena/ArenaClass.java b/src/main/java/com/garbagemule/MobArena/ArenaClass.java index a516d92..b9b195b 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaClass.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaClass.java @@ -26,7 +26,8 @@ public class ArenaClass { private String configName, lowercaseName; private ItemStack helmet, chestplate, leggings, boots, offhand; - private List items, armor; + private List armor; + private List items; private Map perms; private Map lobbyperms; private boolean unbreakableWeapons, unbreakableArmor; @@ -68,18 +69,6 @@ public class ArenaClass return lowercaseName; } - /** - * Get the Material type of the first item in the items list. - * If the items list is empty, the method returns Material.STONE - * @return the type of the first item, or STONE if the list is empty - */ - public Material getLogo() { - if (items.isEmpty()) { - return Material.STONE; - } - return items.get(0).getType(); - } - /** * Set the helmet slot for the class. * @param helmet an item @@ -122,30 +111,22 @@ public class ArenaClass /** * Add an item to the items list. - * @param stack an item + * @param item a Thing */ - public void addItem(ItemStack stack) { - if (stack == null) return; - - if (stack.getAmount() > 64) { - while (stack.getAmount() > 64) { - items.add(new ItemStack(stack.getType(), 64)); - stack.setAmount(stack.getAmount() - 64); - } + public void addItem(Thing item) { + if (item != null) { + items.add(item); } - items.add(stack); } /** * Replace the current items list with a new list of all the items in the given list. * This method uses the addItem() method for each item to ensure consistency. - * @param stacks a list of items + * @param items a list of Things */ - public void setItems(List stacks) { - this.items = new ArrayList<>(stacks.size()); - for (ItemStack stack : stacks) { - addItem(stack); - } + public void setItems(List items) { + this.items = new ArrayList<>(items.size()); + items.forEach(this::addItem); } /** @@ -168,9 +149,7 @@ public class ArenaClass PlayerInventory inv = p.getInventory(); // Fork over the items. - for (ItemStack stack : items) { - inv.addItem(stack); - } + items.forEach(item -> item.giveTo(p)); // Check for legacy armor-node items if (!armor.isEmpty()) { diff --git a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java index 4481bcf..23c7f91 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java @@ -24,12 +24,15 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; public class ArenaMasterImpl implements ArenaMaster { @@ -324,22 +327,8 @@ public class ArenaMasterImpl implements ArenaMaster ? new ArenaClass.MyItems(price, weps, arms, this) : new ArenaClass(classname, price, weps, arms); - // Parse the items-node - List items = section.getStringList("items"); - if (items == null || items.isEmpty()) { - String str = section.getString("items", ""); - List stacks = ItemParser.parseItems(str); - arenaClass.setItems(stacks); - } else { - List stacks = new ArrayList<>(); - for (String item : items) { - ItemStack stack = ItemParser.parseItem(item); - if (stack != null) { - stacks.add(stack); - } - } - arenaClass.setItems(stacks); - } + // Load items + loadClassItems(section, arenaClass); // And the legacy armor-node String armor = section.getString("armor", ""); @@ -385,6 +374,22 @@ public class ArenaMasterImpl implements ArenaMaster return arenaClass; } + private void loadClassItems(ConfigurationSection section, ArenaClass arenaClass) { + List items = section.getStringList("items"); + if (items == null || items.isEmpty()) { + String value = section.getString("items", ""); + items = Arrays.asList(value.split(",")); + } + + List things = items.stream() + .map(String::trim) + .map(plugin.getThingManager()::parse) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + arenaClass.setItems(things); + } + private void loadClassPermissions(ArenaClass arenaClass, ConfigurationSection section) { List perms = section.getStringList("permissions"); if (perms.isEmpty()) return;