Advertisement
Guest User

Milchbub

a guest
Sep 2nd, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.98 KB | None | 0 0
  1. package com.creadri.taxfreeregion;
  2.  
  3. import com.creadri.util.Messages;
  4. import com.creadri.util.inventory.InventoryManager;
  5. import com.creadri.util.inventory.SavedInventory;
  6. import com.nijiko.permissions.PermissionHandler;
  7. import com.sk89q.worldedit.bukkit.WorldEditPlugin;
  8. import com.sk89q.worldedit.bukkit.selections.Selection;
  9. import java.io.BufferedReader;
  10. import java.io.EOFException;
  11. import java.io.File;
  12. import java.io.FileInputStream;
  13. import java.io.FileOutputStream;
  14. import java.io.FileReader;
  15. import java.io.IOException;
  16. import java.io.ObjectInputStream;
  17. import java.io.ObjectOutputStream;
  18. import java.util.ArrayList;
  19. import java.util.Collection;
  20. import java.util.Collections;
  21. import java.util.HashMap;
  22. import java.util.Iterator;
  23. import java.util.LinkedList;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.Map.Entry;
  27. import java.util.Set;
  28. import java.util.logging.Level;
  29. import java.util.logging.Logger;
  30. import org.bukkit.Location;
  31. import org.bukkit.Server;
  32. import org.bukkit.World;
  33. import org.bukkit.command.Command;
  34. import org.bukkit.command.CommandSender;
  35. import org.bukkit.entity.Player;
  36. import org.bukkit.event.Event.Priority;
  37. import org.bukkit.event.Event;
  38. import org.bukkit.plugin.PluginDescriptionFile;
  39. import org.bukkit.plugin.PluginManager;
  40. import org.bukkit.plugin.java.JavaPlugin;
  41.  
  42. public class TaxFreeRegion extends JavaPlugin
  43. {
  44.   private final TaxFreeRegionPluginListener pluginListener = new TaxFreeRegionPluginListener(this);
  45.   private final TaxFreeRegionPlayerListener playerListener = new TaxFreeRegionPlayerListener(this);
  46.   public static final Logger log = Logger.getLogger("Minecraft");
  47.   public static Messages messages = new Messages();
  48.   private boolean eventRegistered;
  49.   private WorldEditPlugin worldEdit;
  50.   public static PermissionHandler permissionHandler;
  51.   private HashMap<String, List<Region>> regions;
  52.   private HashMap<String, SavedInventory> inventories;
  53.   private ArrayList<String> blacklistCommands;
  54.   private ArrayList<String> whitelistCommands;
  55.   private File blacklistFile;
  56.   private File whitelistFile;
  57.   private File regionFile;
  58.   private File inventoryFile;
  59.  
  60.   public void onEnable()
  61.   {
  62.     try
  63.     {
  64.       File directory = new File("./plugins/TaxFreeRegion");
  65.       if (!directory.exists()) {
  66.         directory.mkdirs();
  67.       }
  68.  
  69.       this.regionFile = new File(directory, "regions.ser");
  70.       if ((!this.regionFile.exists()) || (!this.regionFile.isFile())) {
  71.         this.regionFile.createNewFile();
  72.       }
  73.  
  74.       this.inventoryFile = new File(directory, "inventories.ser");
  75.       if ((!this.inventoryFile.exists()) || (!this.inventoryFile.isFile())) {
  76.         this.inventoryFile.createNewFile();
  77.       }
  78.  
  79.       this.blacklistFile = new File(directory, "CommandsBlacklist.txt");
  80.       if ((!this.blacklistFile.exists()) || (!this.blacklistFile.isFile())) {
  81.         this.blacklistFile.createNewFile();
  82.       }
  83.  
  84.       this.whitelistFile = new File(directory, "CommandsWhitelist.txt");
  85.       if ((!this.whitelistFile.exists()) || (!this.whitelistFile.isFile())) {
  86.         this.whitelistFile.createNewFile();
  87.       }
  88.  
  89.       File msgFile = new File(directory, "messages.properties");
  90.       if ((!msgFile.exists()) || (!msgFile.isFile())) {
  91.         msgFile.createNewFile();
  92.       }
  93.  
  94.       messages.loadMessages(msgFile);
  95.     }
  96.     catch (IOException ex) {
  97.       log.log(Level.SEVERE, "[TaxFreeRegion] : Error on Region File");
  98.       return;
  99.     }
  100.  
  101.     if (!this.eventRegistered) {
  102.       PluginManager pm = getServer().getPluginManager();
  103.       pm.registerEvent(Event.Type.PLUGIN_ENABLE, this.pluginListener, Event.Priority.Monitor, this);
  104.       pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Event.Priority.Monitor, this);
  105.       pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Event.Priority.Monitor, this);
  106.       pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this.playerListener, Event.Priority.Monitor, this);
  107.    pm.registerEvent(Event.Type.PLAYER_INTERACT, this.playerListener, Event.Priority.Normal, this);
  108.     pm.registerEvent(Event.Type.PLAYER_INTERACT_ENTITY, this.playerListener, Event.Priority.Normal, this);
  109.  
  110.       this.eventRegistered = true;
  111.     }
  112.  
  113.     loadRegions(this.regionFile);
  114.     loadInventories(this.inventoryFile);
  115.     loadCommandsBlackList(this.blacklistFile);
  116.     loadCommandsWhiteList(this.whitelistFile);
  117.  
  118.     log.log(Level.INFO, new StringBuilder().append("[TaxFreeRegion] Version ").append(getDescription().getVersion()).append(" is enabled!").toString());
  119.   }
  120.  
  121.   public void onDisable()
  122.   {
  123.     saveInventories(this.inventoryFile);
  124.  
  125.     log.log(Level.INFO, "[TaxFreeRegion] is disabled!");
  126.   }
  127.  
  128.   public WorldEditPlugin getWorldEdit() {
  129.     return this.worldEdit;
  130.   }
  131.  
  132.   public void setWorldEdit(WorldEditPlugin worldEdit) {
  133.     this.worldEdit = worldEdit;
  134.   }
  135.  
  136.   public boolean isWorldEditSet() {
  137.     return this.worldEdit != null;
  138.   }
  139.  
  140.   public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
  141.   {
  142.     if (args.length < 1) {
  143.       return false;
  144.     }
  145.  
  146.     if ((sender instanceof Player))
  147.     {
  148.       Player player = (Player)sender;
  149.  
  150.       if (
  151.        !player.hasPermission("taxfreeregion.use")
  152.        && !permissionHandler.has(player, "taxfreeregion.use")
  153.       ) {
  154.         player.sendMessage(messages.getMessage("noPermission"));
  155.         return true;
  156.       }
  157.  
  158.       if ((args.length >= 2) && (args[0].equalsIgnoreCase("add")))
  159.       {
  160.         StringBuilder sb = new StringBuilder(args[1]);
  161.         for (int i = 2; i < args.length; i++) {
  162.           sb.append(" ");
  163.           sb.append(args[i]);
  164.         }
  165.         String regionName = sb.toString();
  166.  
  167.         if (this.worldEdit == null) {
  168.           player.sendMessage(messages.getMessage("noWorldEdit"));
  169.           return true;
  170.         }
  171.  
  172.         if (deleteRegionByName(regionName)) {
  173.           player.sendMessage(messages.getMessage("regionOverwriting"));
  174.         }
  175.  
  176.         Selection sel = this.worldEdit.getSelection(player);
  177.  
  178.         if (sel == null) {
  179.           player.sendMessage(messages.getMessage("noSelection"));
  180.           return true;
  181.         }
  182.  
  183.         Location max = sel.getMaximumPoint();
  184.         Location min = sel.getMinimumPoint();
  185.  
  186.         if ((max == null) || (min == null)) {
  187.           player.sendMessage(messages.getMessage("selectionIncomplete"));
  188.           return true;
  189.         }
  190.  
  191.         Region region = new Region();
  192.         region.setName(regionName);
  193.         region.setX1(max.getBlockX());
  194.         region.setX2(min.getBlockX());
  195.         region.setY1(max.getBlockY());
  196.         region.setY2(min.getBlockY());
  197.         region.setZ1(max.getBlockZ());
  198.         region.setZ2(min.getBlockZ());
  199.  
  200.         addRegion(region, sel.getWorld().getName());
  201.  
  202.         saveRegions(this.regionFile);
  203.  
  204.         player.sendMessage(messages.getMessage("regionAdded"));
  205.       }
  206.       else if ((args.length == 1) && (args[0].equalsIgnoreCase("list")))
  207.       {
  208.         if (this.regions.isEmpty()) {
  209.           player.sendMessage(messages.getMessage("noRegion"));
  210.           return true;
  211.         }
  212.  
  213.         String worldColor = messages.getMessage("listWorldColor");
  214.         String regionColor = messages.getMessage("listRegionColor");
  215.  
  216.         Iterator it = this.regions.entrySet().iterator();
  217.         while (it.hasNext()) {
  218.           Map.Entry entry = (Map.Entry)it.next();
  219.  
  220.           player.sendMessage(new StringBuilder().append(worldColor).append((String)entry.getKey()).toString());
  221.  
  222.           Iterator regit = ((List)entry.getValue()).iterator();
  223.           while (regit.hasNext()) {
  224.             player.sendMessage(new StringBuilder().append(regionColor).append(((Region)regit.next()).toString()).toString());
  225.           }
  226.         }
  227.       }
  228.       else if ((args.length > 1) && (args[0].equalsIgnoreCase("delete")))
  229.       {
  230.         StringBuilder sb = new StringBuilder(args[1]);
  231.         for (int i = 2; i < args.length; i++) {
  232.           sb.append(" ");
  233.           sb.append(args[i]);
  234.         }
  235.         String regionName = sb.toString();
  236.  
  237.         if (!deleteRegionByName(regionName)) {
  238.           player.sendMessage(messages.getMessage("noRegion"));
  239.           return true;
  240.         }
  241.  
  242.         player.sendMessage(messages.getMessage("regionDeleted"));
  243.  
  244.         saveRegions(this.regionFile);
  245.       } else if ((args.length == 1) && (args[0].equalsIgnoreCase("reload"))) {
  246.         loadCommandsBlackList(this.blacklistFile);
  247.         loadCommandsWhiteList(this.whitelistFile);
  248.  
  249.         player.sendMessage(messages.getMessage("blackListReloaded"));
  250.         player.sendMessage(messages.getMessage("whiteListReloaded"));
  251.       } else {
  252.         return false;
  253.       }
  254.     }
  255.  
  256.     return true;
  257.   }
  258.  
  259.   private void loadRegions(File file)
  260.   {
  261.     ObjectInputStream ois = null;
  262.     try
  263.     {
  264.       ois = new ObjectInputStream(new FileInputStream(file));
  265.  
  266.       this.regions = ((HashMap)ois.readObject());
  267.     }
  268.     catch (EOFException ex) {
  269.       this.regions = new HashMap();
  270.     } catch (Exception ex) {
  271.       log.log(Level.WARNING, "[TaxFreeRegion] Region file error !");
  272.       this.regions = new HashMap();
  273.     } finally {
  274.       if (ois != null)
  275.         try {
  276.           ois.close();
  277.         } catch (IOException ex) {
  278.           log.log(Level.WARNING, "[TaxFreeRegion] Region file error on close !");
  279.         }
  280.     }
  281.   }
  282.  
  283.   private void saveRegions(File file)
  284.   {
  285.     ObjectOutputStream oos = null;
  286.     try {
  287.       oos = new ObjectOutputStream(new FileOutputStream(file));
  288.  
  289.       oos.writeObject(this.regions);
  290.     } catch (Exception ex) {
  291.       log.log(Level.SEVERE, "[TaxFreeRegion] Region file not saved !");
  292.     } finally {
  293.       if (oos != null)
  294.         try {
  295.           oos.close();
  296.         } catch (IOException ex) {
  297.           log.log(Level.WARNING, "[TaxFreeRegion] Region file error on close !");
  298.         }
  299.     }
  300.   }
  301.  
  302.   private void loadInventories(File file)
  303.   {
  304.     ObjectInputStream ois = null;
  305.     try
  306.     {
  307.       ois = new ObjectInputStream(new FileInputStream(file));
  308.  
  309.       this.inventories = ((HashMap)ois.readObject());
  310.     }
  311.     catch (EOFException ex) {
  312.       this.inventories = new HashMap();
  313.     } catch (Exception ex) {
  314.       log.log(Level.WARNING, "[TaxFreeRegion] Inventories file error !");
  315.       this.inventories = new HashMap();
  316.     } finally {
  317.       if (ois != null)
  318.         try {
  319.           ois.close();
  320.         } catch (IOException ex) {
  321.           log.log(Level.WARNING, "[TaxFreeRegion] Inventory file error on close !");
  322.         }
  323.     }
  324.   }
  325.  
  326.   private void saveInventories(File file)
  327.   {
  328.     ObjectOutputStream oos = null;
  329.     try {
  330.       oos = new ObjectOutputStream(new FileOutputStream(file));
  331.  
  332.       oos.writeObject(this.inventories);
  333.     } catch (Exception ex) {
  334.       log.log(Level.SEVERE, "[TaxFreeRegion] Inventory file not saved !");
  335.     } finally {
  336.       if (oos != null)
  337.         try {
  338.           oos.close();
  339.         } catch (IOException ex) {
  340.           log.log(Level.WARNING, "[TaxFreeRegion] Inventory file error on close !");
  341.         }
  342.     }
  343.   }
  344.  
  345.   private void loadCommandsBlackList(File file)
  346.   {
  347.     BufferedReader br = null;
  348.     try {
  349.       br = new BufferedReader(new FileReader(file));
  350.  
  351.       this.blacklistCommands = new ArrayList();
  352.       String line;
  353.       while ((line = br.readLine()) != null) {
  354.         line = line.trim();
  355.         if ((!line.isEmpty()) || (!line.startsWith("#")))
  356.           this.blacklistCommands.add(line);
  357.       }
  358.     }
  359.     catch (Exception ex)
  360.     {
  361.       log.log(Level.WARNING, "[TaxFreeRegion] Blacklist file error!");
  362.     } finally {
  363.       if (br != null)
  364.         try {
  365.           br.close();
  366.         } catch (IOException ex) {
  367.           log.log(Level.WARNING, "[TaxFreeRegion] Blacklist file error on close !");
  368.         }
  369.     }
  370.   }
  371.  
  372.   private void loadCommandsWhiteList(File file)
  373.   {
  374.     BufferedReader br = null;
  375.     try {
  376.       br = new BufferedReader(new FileReader(file));
  377.  
  378.       this.whitelistCommands = new ArrayList();
  379.       String line;
  380.       while ((line = br.readLine()) != null) {
  381.         line = line.trim();
  382.         if ((!line.isEmpty()) || (!line.startsWith("#")))
  383.           this.whitelistCommands.add(line);
  384.       }
  385.     }
  386.     catch (Exception ex)
  387.     {
  388.       log.log(Level.WARNING, "[TaxFreeRegion] Whitelist file error!");
  389.     } finally {
  390.       if (br != null)
  391.         try {
  392.           br.close();
  393.         } catch (IOException ex) {
  394.           log.log(Level.WARNING, "[TaxFreeRegion] Whitelist file error on close !");
  395.         }
  396.     }
  397.   }
  398.  
  399.   public boolean isCommandBlackListed(String command)
  400.   {
  401.     Iterator it = this.blacklistCommands.iterator();
  402.     while (it.hasNext()) {
  403.      String itEquals = (String)it.next();
  404.      String itWithParams = itEquals + " ";
  405.      if (command.startsWith(itWithParams) || command.equals(itEquals)) {
  406.         return true;
  407.       }
  408.     }
  409.     return false;
  410.   }
  411.  
  412.   public boolean isCommandWhiteListed(String command)
  413.   {
  414.     Iterator it = this.whitelistCommands.iterator();
  415.  
  416.     while (it.hasNext()) {
  417.      String itEquals = (String)it.next();
  418.      String itWithParams = itEquals + " ";
  419.      if (command.startsWith(itWithParams) || command.equals(itEquals)) {
  420.         return true;
  421.       }
  422.     }
  423.     return false;
  424.   }
  425.  
  426.   private void addRegion(Region region, String world) {
  427.     List list = (List)this.regions.get(world);
  428.  
  429.     if (list == null) {
  430.       list = new LinkedList();
  431.       list.add(region);
  432.       this.regions.put(world, list);
  433.     } else {
  434.       list.add(region);
  435.     }
  436.  
  437.     Collections.sort(list);
  438.   }
  439.  
  440.   private boolean deleteRegionByName(String name) {
  441.     Iterator it = this.regions.values().iterator();
  442.     while (it.hasNext()) {
  443.       Iterator regit = ((List)it.next()).iterator();
  444.       while (regit.hasNext()) {
  445.         Region region = (Region)regit.next();
  446.         if (region.getName().equalsIgnoreCase(name)) {
  447.           regit.remove();
  448.           return true;
  449.         }
  450.       }
  451.     }
  452.     return false;
  453.   }
  454.  
  455.   private Region getRegionByName(String name) {
  456.     Iterator it = this.regions.values().iterator();
  457.     while (it.hasNext()) {
  458.       Iterator regit = ((List)it.next()).iterator();
  459.       while (regit.hasNext()) {
  460.         Region region = (Region)regit.next();
  461.         if (region.getName().equalsIgnoreCase(name)) {
  462.           return region;
  463.         }
  464.       }
  465.     }
  466.     return null;
  467.   }
  468.  
  469.   public void RegionCheck(Player player)
  470.   {
  471.     if (
  472.      player.hasPermission("taxfreeregion.noclear")
  473.      || permissionHandler.has(player, "taxfreeregion.noclear")
  474.     ) {
  475.       return;
  476.     }
  477.  
  478.     Location loc = player.getLocation();
  479.  
  480.     List list = (List)this.regions.get(loc.getWorld().getName());
  481.  
  482.     SavedInventory inventory = null;
  483.     String playerName = player.getName();
  484.  
  485.     if (list == null) {
  486.       inventory = (SavedInventory)this.inventories.get(playerName);
  487.       if (inventory != null) {
  488.         InventoryManager.setInventoryContent(inventory, player.getInventory());
  489.         this.inventories.remove(playerName);
  490.  
  491.         player.updateInventory();
  492.       }
  493.  
  494.       return;
  495.     }
  496.  
  497.     int x = loc.getBlockX();
  498.     int y = loc.getBlockY();
  499.     int z = loc.getBlockZ();
  500.  
  501.     Iterator it = list.iterator();
  502.  
  503.     while (it.hasNext()) {
  504.       Region region = (Region)it.next();
  505.  
  506.       if (x > region.getX1())
  507.       {
  508.         break;
  509.       }
  510.  
  511.       if (region.contains(x, y, z)) {
  512.         if (!this.inventories.containsKey(playerName)) {
  513.           this.inventories.put(playerName, InventoryManager.getInventoryContent(player.getInventory()));
  514.           InventoryManager.clearInventory(player.getInventory());
  515.  
  516.           player.updateInventory();
  517.  
  518.         }
  519.  
  520.         return;
  521.       }
  522.  
  523.     }
  524.  
  525.     inventory = (SavedInventory)this.inventories.get(playerName);
  526.     if (inventory != null)
  527.     {
  528.       InventoryManager.setInventoryContent(inventory, player.getInventory());
  529.       this.inventories.remove(playerName);
  530.  
  531.       player.updateInventory();
  532.     }
  533.   }
  534.  
  535.   public boolean isPlayerInsideRegion(Player player) {
  536.     return this.inventories.containsKey(player.getName());
  537.   }
  538. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement