--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/chests/AdvancedChest.java 2012/06/05 09:30:32 1811 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/chests/AdvancedChest.java 2012/11/05 21:46:57 1868 @@ -24,6 +24,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.inventory.InventoryCloseEvent; @@ -76,7 +77,7 @@ if (args.length == 0) { player.sendMessage("Usage:"); - player.sendMessage("/chest (status|lock|snitch|remove|addplayer|removeplayer) [player]"); + player.sendMessage("/chest (status|lock|snitch|remove|addplayer|removeplayer|setowner) [player]"); return true; } @@ -140,12 +141,42 @@ } if (cmd.equals("remove")) { - if (chest != null) { - player.sendMessage("[LockedChest] Removing protection from chest"); - removeChest(loc); - } else { - player.sendMessage("This chest is not protected"); + if (chest == null) { + player.sendMessage("This chest is not protected"); + return true; + } + if (! chest.getOwner().equals( player.getName() ) ) { + player.sendMessage("You can not remove lock from a chest you don't own"); + return true; + } + + player.sendMessage("[LockedChest] Removing protection from chest"); + removeChest(loc); + + return true; + } + + if (cmd.equals("setowner")) { + if (chest == null) { + player.sendMessage("This chest is not protected"); + return true; + } + if (! chest.getOwner().equals( player.getName() ) ) { + player.sendMessage("You can not set new owner of a chest you dont own"); + return true; } + if (args.length != 2) { + player.sendMessage("You need to specify which player should own this chest"); + return true; + } + OfflinePlayer p2 = server.getOfflinePlayer(args[1]); + if ( p2.hasPlayedBefore() == false && p2.isOnline() == false) { + player.sendMessage("Unknown user: " + args[1] ); + return true; + } + chest.setOwner( p2.getName() ); + plugin.getDatabase().save( chest ); + player.sendMessage("ok"); return true; } @@ -154,6 +185,10 @@ player.sendMessage("This chest is not protected"); return true; } + if (! chest.getOwner().equals( player.getName() ) ) { + player.sendMessage("You can not add/remove players from a chest you don't own"); + return true; + } if (args.length != 2) { player.sendMessage("You need to specify which player to add or remove"); return true; @@ -265,7 +300,7 @@ void loadChests() { int count = loadChestsWorker(); - plugin.getLogger().info("[AdvancedChest] loaded " + count + " chests"); + server.getLogger().info("[AdvancedChest] loaded " + count + " chests"); } @@ -371,7 +406,16 @@ return; } } - } + } + + @EventHandler + public void onChestBurn(BlockBurnEvent event) { + ChestBean chest = chestMap.get( event.getBlock().getLocation() ); + if (chest != null) { + server.getLogger().info( "[AdvancedChest] prevented a fire from destrying chest owned by " + chest.getOwner() ); + event.setCancelled( true); + } + } // prevent a user from opening a chest @EventHandler @@ -513,7 +557,7 @@ } - plugin.getLogger().info(msg); + server.getLogger().info( "[AdvancedChest]" + msg); plugin.getMessageWrapper().sendMessage("system", owner, msg); }