From 8705b5c9f7da60712e14c52d61ee6df05f47cb3b Mon Sep 17 00:00:00 2001 From: garbagemule Date: Sat, 19 Mar 2016 23:37:08 +0100 Subject: [PATCH] Add support for off-hand items. --- .../java/com/garbagemule/MobArena/ArenaClass.java | 11 ++++++++++- src/main/java/com/garbagemule/MobArena/ArenaImpl.java | 9 +++++++++ .../com/garbagemule/MobArena/ArenaMasterImpl.java | 9 +++++++++ .../MobArena/util/inventory/InventoryManager.java | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/garbagemule/MobArena/ArenaClass.java b/src/main/java/com/garbagemule/MobArena/ArenaClass.java index 2793760..e27348a 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaClass.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaClass.java @@ -13,7 +13,7 @@ import org.bukkit.permissions.PermissionAttachment; public class ArenaClass { private String configName, lowercaseName; - private ItemStack helmet, chestplate, leggings, boots; + private ItemStack helmet, chestplate, leggings, boots, offhand; private List items, armor; private Map perms; private Map lobbyperms; @@ -100,6 +100,14 @@ public class ArenaClass this.boots = boots; } + /** + * Set the off-hand slot for the class. + * @param offHand + */ + public void setOffHand(ItemStack offHand) { + this.offhand = offHand; + } + /** * Add an item to the items list. * @param stack an item @@ -182,6 +190,7 @@ public class ArenaClass if (chestplate != null) inv.setChestplate(chestplate); if (leggings != null) inv.setLeggings(leggings); if (boots != null) inv.setBoots(boots); + if (offhand != null) inv.setItemInOffHand(offhand); } /** diff --git a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java index 5da9ed4..ee239fb 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java @@ -1124,6 +1124,7 @@ public class ArenaImpl implements Arena ItemStack chestplate = null; ItemStack leggings = null; ItemStack boots = null; + ItemStack offhand = null; // Check the very last slot to see if it'll work as a helmet int last = contents.length-1; @@ -1147,6 +1148,13 @@ public class ArenaImpl implements Arena contents[i] = null; } + // Equip the fifth last slot as the off-hand + ItemStack fifth = contents[contents.length - 5]; + if (fifth != null) { + offhand = fifth.clone(); + contents[contents.length - 5] = null; + } + // Check the remaining slots for weapons if (arenaClass.hasUnbreakableWeapons()) { for (ItemStack stack : contents) { @@ -1162,6 +1170,7 @@ public class ArenaImpl implements Arena inv.setChestplate(chestplate); inv.setLeggings(leggings); inv.setBoots(boots); + inv.setItemInOffHand(offhand); PermissionAttachment pa = arenaClass.grantLobbyPermissions(plugin, p); replacePermissions(p, pa); diff --git a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java index e9196dd..fbb7f85 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java @@ -338,18 +338,21 @@ public class ArenaMasterImpl implements ArenaMaster String chest = section.getString("chestplate", null); String legs = section.getString("leggings", null); String feet = section.getString("boots", null); + String off = section.getString("offhand", null); // Parse to ItemStacks ItemStack helmet = ItemParser.parseItem(head); ItemStack chestplate = ItemParser.parseItem(chest); ItemStack leggings = ItemParser.parseItem(legs); ItemStack boots = ItemParser.parseItem(feet); + ItemStack offhand = ItemParser.parseItem(off); // Set in ArenaClass arenaClass.setHelmet(helmet); arenaClass.setChestplate(chestplate); arenaClass.setLeggings(leggings); arenaClass.setBoots(boots); + arenaClass.setOffHand(offhand); // Per-class permissions loadClassPermissions(arenaClass, section); @@ -420,6 +423,12 @@ public class ArenaMasterImpl implements ArenaMaster section.set("helmet", ItemParser.parseString(helmet)); } + // Include the off-hand + ItemStack offhand = inv.getItemInOffHand(); + if (offhand != null) { + section.set("offhand", ItemParser.parseString(offhand)); + } + // Save changes. plugin.saveConfig(); diff --git a/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java b/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java index 2d6620e..213b4a1 100644 --- a/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java +++ b/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java @@ -94,6 +94,7 @@ public class InventoryManager inv.setChestplate(null); inv.setLeggings(null); inv.setBoots(null); + inv.setItemInOffHand(null); InventoryView view = p.getOpenInventory(); if (view != null) { view.setCursor(null);