diff --git a/war/src/main/java/bukkit/tommytony/war/War.java b/war/src/main/java/bukkit/tommytony/war/War.java index 1708a6e..f3ffc92 100644 --- a/war/src/main/java/bukkit/tommytony/war/War.java +++ b/war/src/main/java/bukkit/tommytony/war/War.java @@ -38,6 +38,7 @@ import com.tommytony.war.mappers.VolumeMapper; import com.tommytony.war.mappers.WarMapper; import com.tommytony.war.mappers.WarzoneMapper; import com.tommytony.war.utils.ChatFixUtil; +import com.tommytony.war.utils.InventoryStash; /** * @@ -61,6 +62,7 @@ public class War extends JavaPlugin { private final List incompleteZones = new ArrayList(); private final List zoneMakerNames = new ArrayList(); private final List zoneMakersImpersonatingPlayers = new ArrayList(); + private HashMap disconnected = new HashMap(); private final HashMap wandBearers = new HashMap(); // playername to zonename private final HashMap defaultLoadout = new HashMap(); private int defaultLifepool = 21; @@ -100,6 +102,8 @@ public class War extends JavaPlugin { if(warHub != null) { warHub.getVolume().resetBlocks(); } + // To save the disconnected users state + //WarMapper.saveDisconnected(this); this.logInfo("Done. War v" + desc.getVersion() + " is off."); } @@ -1513,5 +1517,13 @@ public class War extends JavaPlugin { public boolean isDefaultNoCreatures() { return defaultNoCreatures; } + + public void setDisconnected(HashMap disconnected) { + this.disconnected = disconnected; + } + + public HashMap getDisconnected() { + return disconnected; + } } diff --git a/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java b/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java index c748126..d97892c 100644 --- a/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java +++ b/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java @@ -40,7 +40,7 @@ public class WarPlayerListener extends PlayerListener { private final War war; private Random random = null; - private HashMap disconnected = new HashMap(); + public WarPlayerListener(War war) { this.war = war; @@ -50,39 +50,39 @@ public class WarPlayerListener extends PlayerListener { public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); // Disconnected - if(disconnected.containsKey(player.getName())) { - // restore the disconnected player's inventory - InventoryStash originalContents = disconnected.remove(player.getName()); - PlayerInventory playerInv = player.getInventory(); - playerInv.clear(playerInv.getSize() + 0); - playerInv.clear(playerInv.getSize() + 1); - playerInv.clear(playerInv.getSize() + 2); - playerInv.clear(playerInv.getSize() + 3); // helmet/blockHead - if(originalContents != null) { - playerInv.clear(); - - for(ItemStack item : originalContents.getContents()) { - if(item != null && item.getTypeId() != 0) { - playerInv.addItem(item); - } - } - - if(originalContents.getHelmet() != null && originalContents.getHelmet().getType() != Material.AIR) { - playerInv.setHelmet(originalContents.getHelmet()); - } - if(originalContents.getChest() != null && originalContents.getHelmet().getType() != Material.AIR) { - playerInv.setChestplate(originalContents.getChest()); - } - if(originalContents.getLegs() != null && originalContents.getHelmet().getType() != Material.AIR) { - playerInv.setLeggings(originalContents.getLegs()); - } - if(originalContents.getFeet() != null && originalContents.getHelmet().getType() != Material.AIR) { - playerInv.setBoots(originalContents.getFeet()); - } - } - - war.msg(player, "You were disconnected while playing War. Here's your inventory from last time."); - } +// if(war.getDisconnected().containsKey(player.getName())) { +// // restore the disconnected player's inventory +// InventoryStash originalContents = war.getDisconnected().remove(player.getName()); +// PlayerInventory playerInv = player.getInventory(); +// playerInv.clear(playerInv.getSize() + 0); +// playerInv.clear(playerInv.getSize() + 1); +// playerInv.clear(playerInv.getSize() + 2); +// playerInv.clear(playerInv.getSize() + 3); // helmet/blockHead +// if(originalContents != null) { +// playerInv.clear(); +// +// for(ItemStack item : originalContents.getContents()) { +// if(item != null && item.getTypeId() != 0) { +// playerInv.addItem(item); +// } +// } +// +// if(originalContents.getHelmet() != null && originalContents.getHelmet().getType() != Material.AIR) { +// playerInv.setHelmet(originalContents.getHelmet()); +// } +// if(originalContents.getChest() != null && originalContents.getHelmet().getType() != Material.AIR) { +// playerInv.setChestplate(originalContents.getChest()); +// } +// if(originalContents.getLegs() != null && originalContents.getHelmet().getType() != Material.AIR) { +// playerInv.setLeggings(originalContents.getLegs()); +// } +// if(originalContents.getFeet() != null && originalContents.getHelmet().getType() != Material.AIR) { +// playerInv.setBoots(originalContents.getFeet()); +// } +// } +// +// war.msg(player, "You were disconnected while playing War. Here's your inventory from last time."); +// } } public void onPlayerQuit(PlayerQuitEvent event) { @@ -91,9 +91,9 @@ public class WarPlayerListener extends PlayerListener { if(team != null) { Warzone zone = war.getPlayerTeamWarzone(player.getName()); if(zone != null) { - if(zone.hasPlayerInventory(player.getName())) { - disconnected.put(player.getName(), zone.getPlayerInventory(player.getName())); - } +// if(zone.hasPlayerInventory(player.getName())) { +// war.getDisconnected().put(player.getName(), zone.getPlayerInventory(player.getName())); +// } zone.handlePlayerLeave(player, zone.getTeleport(), true); } if(war.isWandBearer(player)) { @@ -243,7 +243,6 @@ public class WarPlayerListener extends PlayerListener { } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { setter.placeCorner2(event.getClickedBlock()); event.setUseItemInHand(Result.ALLOW); - //player.getInventory().addItem(new ItemStack(Material.WOOD_SWORD)); } } diff --git a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java index 8b72ff9..a910885 100644 --- a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java +++ b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java @@ -1,9 +1,17 @@ package com.tommytony.war.mappers; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.material.MaterialData; import bukkit.tommytony.war.War; @@ -12,6 +20,7 @@ import com.tommytony.war.WarHub; import com.tommytony.war.Warzone; import com.tommytony.war.jobs.RestoreWarhubJob; import com.tommytony.war.jobs.RestoreWarzonesJob; +import com.tommytony.war.utils.InventoryStash; /** * @@ -152,6 +161,8 @@ public class WarMapper { } warConfig.close(); + + //loadDisconnected(war); } public static void save(War war) { @@ -248,4 +259,108 @@ public class WarMapper { warConfig.save(); warConfig.close(); } + +// private static void loadDisconnected(War war) { +// BufferedReader in = null; +// try { +// in = new BufferedReader(new FileReader(new File(war.getDataFolder().getPath() + +// "/dat/disconnected.dat"))); +// String blockLine = in.readLine(); +// while(blockLine != null && !blockLine.equals("")) { +// String[] blockSplit = blockLine.split(","); +// if(blockLine != null && !blockLine.equals("") && blockSplit.length > 1) { +// String playerName = blockSplit[0]; +// List items = new ArrayList(); +// if(blockSplit.length > 1) { +// String itemsStr = blockSplit[1]; +// String[] itemsStrSplit = itemsStr.split(";;"); +// for(String itemStr : itemsStrSplit) { +// String[] itemStrSplit = itemStr.split(";"); +// if(itemStrSplit.length == 4) { +// ItemStack stack = new ItemStack(Integer.parseInt(itemStrSplit[0]), +// Integer.parseInt(itemStrSplit[1])); +// stack.setData(new MaterialData(stack.getTypeId(),Byte.parseByte(itemStrSplit[3]))); +// short durability = (short)Integer.parseInt(itemStrSplit[2]); +// stack.setDurability(durability); +// items.add(stack); +// } else if(itemStrSplit.length == 3) { +// ItemStack stack = new ItemStack(Integer.parseInt(itemStrSplit[0]), +// Integer.parseInt(itemStrSplit[1])); +// short durability = (short)Integer.parseInt(itemStrSplit[2]); +// stack.setDurability(durability); +// items.add(stack); +// } else { +// items.add(new ItemStack(Integer.parseInt(itemStrSplit[0]), +// Integer.parseInt(itemStrSplit[1]))); +// } +// } +// } +// war.getDisconnected().put(playerName, new InventoryStash(items)); +// } +// +// } +// } catch (IOException e) { +// war.logWarn("Failed to read volume file " + volume.getName() + +// " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage()); +// e.printStackTrace(); +// } catch (Exception e) { +// war.logWarn("Unexpected error caused failure to read volume file " + zoneName + +// " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage()); +// e.printStackTrace(); +// } finally { +// if(in != null) +// try { +// in.close(); +// } catch (IOException e) { +// war.logWarn("Failed to close file reader for volume " + volume.getName() + +// " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage()); +// e.printStackTrace(); +// } +// } +// } +// +// public static void saveDisconnected(War war) { +// BufferedWriter out = null; +// try { +// out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() + "/dat/disconnected.dat"))); +// HashMap disconnected = war.getDisconnected(); +// for(String key : disconnected.keySet()){ +// String userString = key + ","; +// InventoryStash userInv = disconnected.get(userString); +// for(ItemStack item : userInv.getContents()) { +// String extra = ""; +// if(item != null) { +// extra += item.getTypeId() + ";" +// + item.getAmount() + ";" +// + item.getDurability(); +// if(item.getData() != null) +// extra += ";" + item.getData().getData() ; +// extra += ";;"; +// } +// userString += extra; +// } +// if(userInv.getHelmet() != null) { +// +// } +// +// out.write(userString); +// out.newLine(); +// } +// } catch (IOException e) { +// war.logWarn("Failed while writing disconnected user inventories. " + e.getMessage()); +// e.printStackTrace(); +// } catch (Exception e) { +// war.logWarn("Unexpected error caused failure while writing disconnected user inventories. " + e.getClass().getName() + " " + e.getMessage()); +// e.printStackTrace(); +// } +// finally { +// if(out != null) +// try { +// out.close(); +// } catch (IOException e) { +// war.logWarn("Failed to close file writer for disconnected user inventories. " + e.getMessage()); +// e.printStackTrace(); +// } +// } +// } }