Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package info.arandombukkitbox;
- import java.util.HashMap;
- import org.bukkit.Server;
- import org.bukkit.World;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.event.Event;
- import org.bukkit.event.Event.Priority;
- import org.bukkit.event.Event.Type;
- import org.bukkit.event.world.ChunkLoadEvent;
- import org.bukkit.event.world.ChunkUnloadEvent;
- import org.bukkit.event.world.WorldListener;
- import org.bukkit.plugin.PluginDescriptionFile;
- import org.bukkit.plugin.PluginManager;
- import org.bukkit.plugin.java.JavaPlugin;
- public class ChunkManager extends JavaPlugin
- {
- int count;
- int total;
- long maxMem;
- int maxChunnks;
- ChunkListener listener;
- HashMap<CommandSender, Registrant> registrants;
- public ChunkManager()
- {
- this.count = 0;
- this.total = 0;
- this.maxMem = 0L;
- this.maxChunnks = 0;
- this.listener = new ChunkListener();
- this.registrants = new HashMap();
- }
- public void onDisable() {
- }
- public void onEnable() {
- PluginDescriptionFile pdfFile = getDescription();
- System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
- getServer().getPluginManager().registerEvent(Type.CHUNK_LOAD, this.listener, Event.Priority.Normal, this);
- getServer().getPluginManager().registerEvent(Event.Type.CHUNK_UNLOAD, this.listener, Event.Priority.Normal, this);
- this.maxMem = (long)(Runtime.getRuntime().totalMemory() * 0.9D);
- this.count = (this.total = ((World)getServer().getWorlds().get(0)).getLoadedChunks().length);
- }
- @Override
- public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args)
- {
- String commandName = command.getName().toLowerCase();
- if ((commandName.equals("chunk")) &&
- (args.length > 0)) {
- try {
- if (args[0].equals("stats")) {
- sender.sendMessage("" + this.count + " active chunks.");
- sender.sendMessage("" + this.total + " chunks loaded since server start.");
- }
- else if (args[0].equals("getchunks")) {
- sender.sendMessage("Chunk cutoff set to " + this.maxChunnks + " chunks.");
- }
- else if (args[0].equals("getmemory")) {
- sender.sendMessage("Memory cutoff set to " + this.maxMem / 1024L / 1024L + "MB.");
- }
- else if ((args[0].equals("setchunks")) && (args.length > 1)) {
- this.maxChunnks = Integer.parseInt(args[1]);
- }
- else if ((args[0].equals("setmemory")) && (args.length > 1)) {
- this.maxMem = (Long.parseLong(args[1]) * 1024L * 1024L);
- }
- else if ((args[0].equals("register")) && (args.length > 1)) {
- this.registrants.put(sender, new Registrant(Integer.parseInt(args[1]), sender));
- sender.sendMessage("Registered you for chunk updates.");
- }
- else if (args[0].equals("unregister")) {
- this.registrants.remove(sender);
- sender.sendMessage("You will no longer get chunk updates.");
- }
- else {
- sender.sendMessage("Bad syntax");
- return false;
- }
- }
- catch (Exception e) {
- sender.sendMessage("Bad syntax");
- }
- return true;
- }
- return false;
- }
- private class Registrant
- {
- public int count;
- public int frequency;
- public CommandSender sender;
- Registrant(int frequency, CommandSender sender)
- {
- this.frequency = frequency;
- this.sender = sender;
- }
- }
- private class ChunkListener extends WorldListener
- {
- private ChunkListener()
- {
- }
- @Override
- public void onChunkLoad(ChunkLoadEvent event)
- {
- ChunkManager.this.count += 1;
- ChunkManager.this.total += 1;
- for (ChunkManager.Registrant registrant : ChunkManager.this.registrants.values()) {
- registrant.count += 1;
- if (registrant.count % registrant.frequency == 0)
- registrant.sender.sendMessage("Chunks - Current: " + ChunkManager.this.count + ", Total: " + ChunkManager.this.total);
- }
- }
- @Override
- public void onChunkUnload(ChunkUnloadEvent event)
- {
- Runtime runtime = Runtime.getRuntime();
- long mem = runtime.totalMemory() - runtime.freeMemory();
- if ((ChunkManager.this.count < ChunkManager.this.maxChunnks) && (mem < runtime.totalMemory())) {
- event.setCancelled(true);
- return;
- }
- ChunkManager.this.count -= 1;
- for (ChunkManager.Registrant registrant : ChunkManager.this.registrants.values()) {
- registrant.count += 1;
- if (registrant.count % registrant.frequency == 0)
- registrant.sender.sendMessage("Chunks - Current: " + ChunkManager.this.count + ", Total: " + ChunkManager.this.total);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement