mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 02:53:43 +01:00 
			
		
		
		
	Redesign
This commit is contained in:
		@@ -123,16 +123,15 @@ public class McrankCommand implements CommandExecutor {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void sqlDisplay(CommandSender sender, String playerName) {
 | 
			
		||||
        //TODO: Localize messages
 | 
			
		||||
        // TODO: Localize messages
 | 
			
		||||
        if (mcMMO.queueManager.contains(sender.getName())) {
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Please wait for your previous command to process");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!mcMMO.queueManager.queue(new McRankAsync(playerName, sender))) {
 | 
			
		||||
            // This will only run if for some reason it is unable to add to the queue
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Unable to add to queue.");
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Queue is full");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sender.sendMessage(ChatColor.YELLOW + "Calculating mcMMO rankings...");
 | 
			
		||||
        sender.sendMessage(ChatColor.YELLOW + "Calculating rankings...");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -123,17 +123,15 @@ public class MctopCommand implements CommandExecutor {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void sqlDisplay(int page, String query, CommandSender sender) {
 | 
			
		||||
        //TODO: Localize messages
 | 
			
		||||
        // TODO: Localize messages
 | 
			
		||||
        if (mcMMO.queueManager.contains(sender.getName())) {
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Please wait for your previous command to process");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!mcMMO.queueManager.queue(new McTopAsync(page, query, sender))) {
 | 
			
		||||
            // This will only run if for some reason it is unable to add to the queue
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Unable to add to queue.");
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Queue is full");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sender.sendMessage(ChatColor.YELLOW + "Calculating mcMMO rankings...");
 | 
			
		||||
        sender.sendMessage(ChatColor.YELLOW + "Calculating leaderboards...");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,28 @@
 | 
			
		||||
package com.gmail.nossr50.database.queuemanager;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.concurrent.LinkedBlockingQueue;
 | 
			
		||||
 | 
			
		||||
public class AsyncQueueManager implements Runnable {
 | 
			
		||||
    private LinkedBlockingQueue<Queueable> queue;
 | 
			
		||||
    private boolean running;
 | 
			
		||||
    
 | 
			
		||||
    public AsyncQueueManager() {
 | 
			
		||||
        this.queue = new LinkedBlockingQueue<Queueable>();
 | 
			
		||||
        this.running = true;
 | 
			
		||||
    }
 | 
			
		||||
import org.bukkit.scheduler.BukkitScheduler;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void run() {
 | 
			
		||||
        while(running) {
 | 
			
		||||
            try {
 | 
			
		||||
                queue.take().run();
 | 
			
		||||
            } catch (InterruptedException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
 | 
			
		||||
public class AsyncQueueManager {
 | 
			
		||||
 | 
			
		||||
    private List<Queue> queues;
 | 
			
		||||
    protected LinkedBlockingQueue<Queueable> queue;;
 | 
			
		||||
 | 
			
		||||
    public AsyncQueueManager(BukkitScheduler scheduler, int number) {
 | 
			
		||||
        this.queues = new ArrayList<Queue>();
 | 
			
		||||
 | 
			
		||||
        for (int i = 1; i <= number; i++) {
 | 
			
		||||
            Queue queue = new Queue();
 | 
			
		||||
            scheduler.runTaskAsynchronously(mcMMO.p, queue);
 | 
			
		||||
            this.queues.add(queue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.queue = new LinkedBlockingQueue<Queueable>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean queue(Queueable task) {
 | 
			
		||||
@@ -30,12 +33,6 @@ public class AsyncQueueManager implements Runnable {
 | 
			
		||||
        return queue.contains(new EqualString(player));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void disable() {
 | 
			
		||||
        running = false;
 | 
			
		||||
        // Throw one more Queueable into queue to unblock take()
 | 
			
		||||
        queue.add(new EndThread());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private class EqualString {
 | 
			
		||||
        private String player;
 | 
			
		||||
 | 
			
		||||
@@ -46,18 +43,30 @@ public class AsyncQueueManager implements Runnable {
 | 
			
		||||
        @Override
 | 
			
		||||
        public boolean equals(Object obj) {
 | 
			
		||||
            if (obj instanceof Queueable) {
 | 
			
		||||
                return ((Queueable)obj).getPlayer().equalsIgnoreCase(player);
 | 
			
		||||
                return ((Queueable) obj).getPlayer().equalsIgnoreCase(player);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private class EndThread implements Queueable {
 | 
			
		||||
    public void disable() {
 | 
			
		||||
        for (Queue queueThread : queues) {
 | 
			
		||||
            queueThread.kill();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < queues.size(); i++) {
 | 
			
		||||
            queue.offer(new KillQueue());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class KillQueue implements Queueable {
 | 
			
		||||
        @Override
 | 
			
		||||
        public void run() { }
 | 
			
		||||
        public void run() {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public String getPlayer() { return null; }     
 | 
			
		||||
        public String getPlayer() {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,25 @@
 | 
			
		||||
package com.gmail.nossr50.database.queuemanager;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
 | 
			
		||||
public class Queue implements Runnable {
 | 
			
		||||
    private boolean running;
 | 
			
		||||
 | 
			
		||||
    public Queue() {
 | 
			
		||||
        this.running = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void run() {
 | 
			
		||||
        while (running) {
 | 
			
		||||
            try {
 | 
			
		||||
                mcMMO.queueManager.queue.take().run();
 | 
			
		||||
            } catch (InterruptedException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void kill() {
 | 
			
		||||
        this.running = false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -464,8 +464,7 @@ public class mcMMO extends JavaPlugin {
 | 
			
		||||
        scheduler.scheduleSyncRepeatingTask(this, new BleedTimerTask(), 40, 40);
 | 
			
		||||
 | 
			
		||||
        if (Config.getInstance().getUseMySQL()) {
 | 
			
		||||
            queueManager = new AsyncQueueManager();
 | 
			
		||||
            scheduler.runTaskAsynchronously(this, queueManager);
 | 
			
		||||
            queueManager = new AsyncQueueManager(scheduler, Config.getInstance().getQueueNumber());
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Old & Powerless User remover
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user