Advertisement
tahg

Untitled

Aug 6th, 2011
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. package info.arandombukkitbox;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import org.bukkit.Server;
  6. import org.bukkit.World;
  7. import org.bukkit.command.Command;
  8. import org.bukkit.command.CommandSender;
  9. import org.bukkit.event.Event;
  10. import org.bukkit.event.Event.Priority;
  11. import org.bukkit.event.Event.Type;
  12. import org.bukkit.event.world.ChunkLoadEvent;
  13. import org.bukkit.event.world.ChunkUnloadEvent;
  14. import org.bukkit.event.world.WorldListener;
  15. import org.bukkit.plugin.PluginDescriptionFile;
  16. import org.bukkit.plugin.PluginManager;
  17. import org.bukkit.plugin.java.JavaPlugin;
  18.  
  19. public class ChunkManager extends JavaPlugin
  20. {
  21. int count;
  22. int total;
  23. long maxMem;
  24. int maxChunnks;
  25. ChunkListener listener;
  26. HashMap<CommandSender, Registrant> registrants;
  27.  
  28. public ChunkManager()
  29. {
  30. this.count = 0;
  31. this.total = 0;
  32. this.maxMem = 0L;
  33. this.maxChunnks = 0;
  34. this.listener = new ChunkListener();
  35. this.registrants = new HashMap();
  36. }
  37.  
  38. public void onDisable() {
  39. }
  40.  
  41. public void onEnable() {
  42. PluginDescriptionFile pdfFile = getDescription();
  43. System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
  44. getServer().getPluginManager().registerEvent(Type.CHUNK_LOAD, this.listener, Event.Priority.Normal, this);
  45. getServer().getPluginManager().registerEvent(Event.Type.CHUNK_UNLOAD, this.listener, Event.Priority.Normal, this);
  46. this.maxMem = (long)(Runtime.getRuntime().totalMemory() * 0.9D);
  47. this.count = (this.total = ((World)getServer().getWorlds().get(0)).getLoadedChunks().length);
  48. }
  49.  
  50. @Override
  51. public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args)
  52. {
  53. String commandName = command.getName().toLowerCase();
  54.  
  55. if ((commandName.equals("chunk")) &&
  56. (args.length > 0)) {
  57. try {
  58. if (args[0].equals("stats")) {
  59. sender.sendMessage("" + this.count + " active chunks.");
  60. sender.sendMessage("" + this.total + " chunks loaded since server start.");
  61. }
  62. else if (args[0].equals("getchunks")) {
  63. sender.sendMessage("Chunk cutoff set to " + this.maxChunnks + " chunks.");
  64. }
  65. else if (args[0].equals("getmemory")) {
  66. sender.sendMessage("Memory cutoff set to " + this.maxMem / 1024L / 1024L + "MB.");
  67. }
  68. else if ((args[0].equals("setchunks")) && (args.length > 1)) {
  69. this.maxChunnks = Integer.parseInt(args[1]);
  70. }
  71. else if ((args[0].equals("setmemory")) && (args.length > 1)) {
  72. this.maxMem = (Long.parseLong(args[1]) * 1024L * 1024L);
  73. }
  74. else if ((args[0].equals("register")) && (args.length > 1)) {
  75. this.registrants.put(sender, new Registrant(Integer.parseInt(args[1]), sender));
  76. sender.sendMessage("Registered you for chunk updates.");
  77. }
  78. else if (args[0].equals("unregister")) {
  79. this.registrants.remove(sender);
  80. sender.sendMessage("You will no longer get chunk updates.");
  81. }
  82. else {
  83. sender.sendMessage("Bad syntax");
  84. return false;
  85. }
  86. }
  87. catch (Exception e) {
  88. sender.sendMessage("Bad syntax");
  89. }
  90. return true;
  91. }
  92.  
  93. return false;
  94. }
  95.  
  96. private class Registrant
  97. {
  98. public int count;
  99. public int frequency;
  100. public CommandSender sender;
  101.  
  102. Registrant(int frequency, CommandSender sender)
  103. {
  104. this.frequency = frequency;
  105. this.sender = sender;
  106. }
  107. }
  108.  
  109. private class ChunkListener extends WorldListener
  110. {
  111. private ChunkListener()
  112. {
  113. }
  114.  
  115. @Override
  116. public void onChunkLoad(ChunkLoadEvent event)
  117. {
  118. ChunkManager.this.count += 1;
  119. ChunkManager.this.total += 1;
  120. for (ChunkManager.Registrant registrant : ChunkManager.this.registrants.values()) {
  121. registrant.count += 1;
  122. if (registrant.count % registrant.frequency == 0)
  123. registrant.sender.sendMessage("Chunks - Current: " + ChunkManager.this.count + ", Total: " + ChunkManager.this.total);
  124. }
  125. }
  126.  
  127. @Override
  128. public void onChunkUnload(ChunkUnloadEvent event)
  129. {
  130. Runtime runtime = Runtime.getRuntime();
  131. long mem = runtime.totalMemory() - runtime.freeMemory();
  132. if ((ChunkManager.this.count < ChunkManager.this.maxChunnks) && (mem < runtime.totalMemory())) {
  133. event.setCancelled(true);
  134. return;
  135. }
  136. ChunkManager.this.count -= 1;
  137. for (ChunkManager.Registrant registrant : ChunkManager.this.registrants.values()) {
  138. registrant.count += 1;
  139. if (registrant.count % registrant.frequency == 0)
  140. registrant.sender.sendMessage("Chunks - Current: " + ChunkManager.this.count + ", Total: " + ChunkManager.this.total);
  141. }
  142. }
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement