/[projects]/miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/chests/SnitchingChest.java
ViewVC logotype

Diff of /miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/chests/SnitchingChest.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1769 by torben, Tue Apr 3 20:23:59 2012 UTC revision 1779 by torben, Thu Apr 5 14:27:24 2012 UTC
# Line 2  package dk.thoerup.bukkit.hoeruputils; Line 2  package dk.thoerup.bukkit.hoeruputils;
2    
3    
4  import java.util.HashMap;  import java.util.HashMap;
5    import java.util.List;
6  import java.util.Set;  import java.util.Set;
7  import java.util.TreeMap;  import java.util.TreeMap;
8  import java.util.TreeSet;  import java.util.TreeSet;
9    
10  import org.bukkit.Location;  import org.bukkit.Location;
11  import org.bukkit.Material;  import org.bukkit.Material;
12    import org.bukkit.OfflinePlayer;
13    import org.bukkit.Server;
14  import org.bukkit.World;  import org.bukkit.World;
15  import org.bukkit.block.Block;  import org.bukkit.block.Block;
16  import org.bukkit.block.Chest;  import org.bukkit.block.Chest;
# Line 23  import org.bukkit.event.inventory.Invent Line 26  import org.bukkit.event.inventory.Invent
26  import org.bukkit.event.inventory.InventoryOpenEvent;  import org.bukkit.event.inventory.InventoryOpenEvent;
27  import org.bukkit.inventory.InventoryHolder;  import org.bukkit.inventory.InventoryHolder;
28  import org.bukkit.inventory.ItemStack;  import org.bukkit.inventory.ItemStack;
29  import org.bukkit.plugin.Plugin;  
30    
31  public class SnitchingChest  implements Listener, CommandExecutor{  public class SnitchingChest  implements Listener, CommandExecutor{
32                    
# Line 33  public class SnitchingChest  implements Line 36  public class SnitchingChest  implements
36                    
37          HashMap<String, ItemCount> contentMap = new HashMap<String, ItemCount>();          HashMap<String, ItemCount> contentMap = new HashMap<String, ItemCount>();
38                    
39          HashMap<Location,String> chestMap = new HashMap<Location, String>();          HashMap<Location,SnitchingChestBean> chestMap = new HashMap<Location, SnitchingChestBean>();
40    
41                    
42          Plugin plugin;          HoerupUtilsPlugin plugin;
43            Server server;
44                    
45          public SnitchingChest(Plugin plugin) {          public SnitchingChest(HoerupUtilsPlugin plugin, Runnable r) {
46                  this.plugin = plugin;                  this.plugin = plugin;
47                                    server = plugin.getServer();
48                  loadChests();                  try {
49                            loadChests();
50                    } catch (Exception e) {
51                            e.printStackTrace();
52                            //r.run();
53                            loadChests();
54                    }
55          }          }
56                    
57    
# Line 65  public class SnitchingChest  implements Line 75  public class SnitchingChest  implements
75                                    
76                  Location loc2 = getNeighborChest(loc);                  Location loc2 = getNeighborChest(loc);
77                                    
78                  String owner = chestMap.get(loc);                  SnitchingChestBean chest = chestMap.get(loc);
79                  if (owner != null) {                  if (chest != null) {
80                          if (owner.equals(player.getName())) {                          if (chest.getOwner().equals(player.getName())) {
81                                  player.sendMessage("[SnitchingChest] Removing surveillance from chest");                                  player.sendMessage("[SnitchingChest] Removing surveillance from chest");
82                                  chestMap.remove(loc);                                  removeChest(loc);
83                                  if (loc2 != null) {                                  if (loc2 != null) {
84                                          chestMap.remove(loc2);                                                                            removeChest(loc2);                                      
85                                  }                                  }
                                 saveChests();  
86                          } else {                          } else {
87                                  player.sendMessage("[SnitchingChest] Chest is already under surveillance");                                  player.sendMessage("[SnitchingChest] Chest is already under surveillance");
88                          }                          }
# Line 81  public class SnitchingChest  implements Line 90  public class SnitchingChest  implements
90                          return true;                          return true;
91                  }                  }
92                                    
93                  chestMap.put(loc, player.getName() );                  SnitchingChestBean chest1 = createChest(player.getName(), "", loc);
94                    addChest(loc, chest1);
95                  if (loc2 != null) {                  if (loc2 != null) {
96                          chestMap.put(loc2, player.getName() );                          
97                            SnitchingChestBean chest2 = createChest (player.getName(), "", loc2);
98                            addChest(loc, chest2);
99                  }                  }
100                    
101                  player.sendMessage("[SnitchingChest] Chest is now under surveillance");                  player.sendMessage("[SnitchingChest] Chest is now under surveillance");
102                  saveChests();                  
103                                    
104                  return true;                  return true;
105          }          }
# Line 95  public class SnitchingChest  implements Line 107  public class SnitchingChest  implements
107          @EventHandler          @EventHandler
108          public void onBlockBreak(BlockBreakEvent event) {          public void onBlockBreak(BlockBreakEvent event) {
109                  Location loc = event.getBlock().getLocation();                  Location loc = event.getBlock().getLocation();
110                  String owner = chestMap.get(loc);                  SnitchingChestBean chest = chestMap.get(loc);
111                  if (owner != null) {                  if (chest != null) {
112                          if (owner.equals(event.getPlayer().getName())) {                          if (chest.getOwner().equals(event.getPlayer().getName())) {
113                                  chestMap.remove(loc);                                  removeChest(loc);
                                 saveChests();                            
114                                  event.getPlayer().sendMessage("[SnitchingChest] The destroyed chest was under surveillance");                                  event.getPlayer().sendMessage("[SnitchingChest] The destroyed chest was under surveillance");
115                          } else {                          } else {
116                                  event.setCancelled(true);                                  event.setCancelled(true);
# Line 107  public class SnitchingChest  implements Line 118  public class SnitchingChest  implements
118                          }                          }
119                  }                  }
120          }          }
121            public void addChest(Location loc, SnitchingChestBean chest) {
122                    chestMap.put(loc, chest);
123                    plugin.getDatabase().save(chest);
124            }
125            
126            void removeChest(Location loc) {
127                    SnitchingChestBean chest = chestMap.remove(loc);
128                    if (chest != null) {
129                            plugin.getDatabase().delete(chest);
130                    }
131            }
132                    
133          void loadChests() {          void loadChests() {            
134                    List<SnitchingChestBean> chestlist = plugin.getDatabase().find( SnitchingChestBean.class).findList();
135                    for (SnitchingChestBean chest : chestlist) {
136                            Location loc = getChestLocation(server, chest);
137                            chestMap.put(loc, chest);      
138                    }
139                                    
140                    plugin.getLogger().info("[SnitchingChest] loaded " + chestMap.size() + " chests");
141          }          }
142                    
143          void saveChests() {          
144            public SnitchingChestBean createChest(String owner, String description, Location loc) {
145                                    
146                    SnitchingChestBean chest = new SnitchingChestBean();
147                    chest.setOwner(owner);
148                    chest.setDescription(description);
149                    setChestLocation(chest, loc);
150    
151                    return chest;
152            }
153            
154            
155            public void setChestLocation(SnitchingChestBean chest, Location loc) {
156                    chest.setWorld( loc.getWorld().getName() );
157                    chest.setX( loc.getBlockX() );
158                    chest.setY( loc.getBlockY() );
159                    chest.setZ( loc.getBlockZ() );          
160          }          }
161                    
162            public Location getChestLocation(Server server, SnitchingChestBean chest) {
163                    World wrld = server.getWorld(chest.getWorld());
164                    return new Location(wrld,chest.getX(),chest.getY(),chest.getZ());              
165            }
166            
167    
168            /*
169            void saveChests() {
170                    
171            }*/
172            
173          Location getNeighborChest(Location loc) {          Location getNeighborChest(Location loc) {
174                  World world = loc.getWorld();                  World world = loc.getWorld();
175                                    
# Line 146  public class SnitchingChest  implements Line 200  public class SnitchingChest  implements
200                  } else {                  } else {
201                          loc =  ( (DoubleChest)holder).getLocation();                          loc =  ( (DoubleChest)holder).getLocation();
202                  }                  }
203                    
204                    loc.setX( loc.getBlockX() ); //round to integer, since double chests apparently are placed at pos + 0.5
205                    loc.setZ( loc.getBlockZ() ); // -- // --
206                    
207                  return loc;                  return loc;
208          }          }
209                    
# Line 161  public class SnitchingChest  implements Line 219  public class SnitchingChest  implements
219                  if (holder instanceof Chest || holder instanceof DoubleChest) {                  if (holder instanceof Chest || holder instanceof DoubleChest) {
220                          Location loc = getChestLocation(holder);                          Location loc = getChestLocation(holder);
221                                                    
222                          String owner = chestMap.get( loc );                          SnitchingChestBean chest = chestMap.get( loc );
223                          if (owner == null) {                                                      if (chest == null) {                            
224                                  return; //chest not surveyed by this plugin                                  return; //chest not surveyed by this plugin
225                          }                          }
226                                    
227                                                                                                    
228                          Player player = (Player) event.getPlayer();                          Player player = (Player) event.getPlayer();
229                          if (player.getName().equals(owner)) {                          if (player.getName().equals(chest.getOwner() )) {
230                                  return; //chest is owned by it's own player                                  return; //chest is owned by it's own player
231                          }                                                }                      
232                                                    
# Line 188  public class SnitchingChest  implements Line 246  public class SnitchingChest  implements
246                  InventoryHolder holder = event.getInventory().getHolder();                  InventoryHolder holder = event.getInventory().getHolder();
247                  if (holder instanceof Chest || holder instanceof DoubleChest) {                  if (holder instanceof Chest || holder instanceof DoubleChest) {
248                          Location loc = getChestLocation(holder);                          Location loc = getChestLocation(holder);
249                          String owner = chestMap.get(loc);                          SnitchingChestBean chest = chestMap.get(loc);
250                            
251                            if (chest == null) { //chest was not a snitching chest
252                                    return;
253                            }
254                            
255                            OfflinePlayer owner = server.getOfflinePlayer( chest.getOwner() );
256                                                    
257                                                    
258                          Player player = (Player) event.getPlayer();                          Player player = (Player) event.getPlayer();
# Line 217  public class SnitchingChest  implements Line 281  public class SnitchingChest  implements
281                                                                    
282                                                                    
283                                  int diff = Math.abs( savedcount - count);                                  int diff = Math.abs( savedcount - count);
284                                                                    String msg = null;
285                                  if (count > savedcount) {                                  if (count > savedcount) {
286                                          String msg = player.getName() + " added " + diff + " units of " + item + " to " + owner + "'s chest";                                          msg = player.getName() + " added " + diff + " units of " + item + " to " + owner + "'s chest";
                                         plugin.getLogger().info(msg);  
287                                  }                                  }
288                                  if (count < savedcount) {                                  if (count < savedcount) {
289                                          String msg = player.getName() + " removed " + diff + " units of " + item + " from " + owner + "'s chest";                                          msg = player.getName() + " removed " + diff + " units of " + item + " from " + owner + "'s chest";
290                                    }
291                                    
292                                    if (msg != null) {
293                                          plugin.getLogger().info(msg);                                          plugin.getLogger().info(msg);
294                                            plugin.getMessageWrapper().sendMessage(owner, msg);
295                                  }                                  }
296                                                                    
297                          }                          }

Legend:
Removed from v.1769  
changed lines
  Added in v.1779

  ViewVC Help
Powered by ViewVC 1.1.20