From b504b5b014f2d1234fdef3da20a599a061d22696 Mon Sep 17 00:00:00 2001 From: taoneill Date: Tue, 19 Jun 2012 23:00:37 -0400 Subject: [PATCH] New playerloadoutasdefault:true/false setting Closes gh-491. Players can now safely bring their own inventories in the warzone. They still get it back after leaving, but now thei own items can be used to replace the default loadout. You *need* to have a loadout named "default" available in your warzone. --- war/src/main/java/com/tommytony/war/War.java | 2 ++ .../main/java/com/tommytony/war/Warzone.java | 30 ++++++++++++++++++- .../com/tommytony/war/config/TeamConfig.java | 1 + 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 2b9e39c..6105f15 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -180,11 +180,13 @@ public class War extends JavaPlugin { teamDefaultConfig.put(TeamConfig.LIFEPOOL, 7); teamDefaultConfig.put(TeamConfig.MAXSCORE, 10); teamDefaultConfig.put(TeamConfig.NOHUNGER, false); + teamDefaultConfig.put(TeamConfig.PLAYERLOADOUTASDEFAULT, false); teamDefaultConfig.put(TeamConfig.RESPAWNTIMER, 0); teamDefaultConfig.put(TeamConfig.SATURATION, 10); teamDefaultConfig.put(TeamConfig.SPAWNSTYLE, TeamSpawnStyle.SMALL); teamDefaultConfig.put(TeamConfig.TEAMSIZE, 10); + this.getDefaultInventories().getLoadouts().clear(); HashMap defaultLoadout = new HashMap(); diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 45afed4..868d92b 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -1337,7 +1337,13 @@ public class Warzone { while (it.hasNext()) { String name = (String)it.next(); if (i == currentIndex) { - this.resetInventory(playerTeam, player, loadouts.get(name)); + if (playerTeam.getTeamConfig().resolveBoolean(TeamConfig.PLAYERLOADOUTASDEFAULT) && name.equals("default")) { + // Use player's own inventory as loadout + this.resetInventory(playerTeam, player, this.getPlayerInventoryFromSavedState(player)); + } else { + // Use the loadout from the list in the settings + this.resetInventory(playerTeam, player, loadouts.get(name)); + } if (isFirstRespawn && playerTeam.getInventories().resolveLoadouts().keySet().size() > 1) { War.war.msg(player, "Equipped " + name + " loadout (sneak to switch)."); } else if (isToggle) { @@ -1349,6 +1355,28 @@ public class Warzone { } } + private HashMap getPlayerInventoryFromSavedState(Player player) { + HashMap playerItems = new HashMap(); + PlayerState originalState = this.playerStates.get(player.getName()); + + if (originalState != null) { + int invIndex = 0; + playerItems = new HashMap(); + for (ItemStack item : originalState.getContents()) { + if (item != null && item.getTypeId() != 0) { + playerItems.put(invIndex, item); + } + invIndex++; + } + + if (War.war.isSpoutServer()) { + SpoutManager.getPlayer(player).setTitle(originalState.getPlayerTitle()); + } + } + + return playerItems; + } + public WarzoneConfigBag getWarzoneConfig() { return this.warzoneConfig; } diff --git a/war/src/main/java/com/tommytony/war/config/TeamConfig.java b/war/src/main/java/com/tommytony/war/config/TeamConfig.java index 86ef09e..7dab45c 100644 --- a/war/src/main/java/com/tommytony/war/config/TeamConfig.java +++ b/war/src/main/java/com/tommytony/war/config/TeamConfig.java @@ -8,6 +8,7 @@ public enum TeamConfig { LIFEPOOL (Integer.class), MAXSCORE (Integer.class), NOHUNGER (Boolean.class), + PLAYERLOADOUTASDEFAULT (Boolean.class), RESPAWNTIMER (Integer.class), SATURATION (Integer.class), SPAWNSTYLE (TeamSpawnStyle.class),