1
0
mirror of https://github.com/mcMMO-Dev/mcMMO.git synced 2026-02-18 01:42:32 +01:00

Compare commits

...

16 Commits

Author SHA1 Message Date
T00thpick1
b700a99c52 NuclearW loves his spacing, also pinging him. 2013-03-11 00:12:31 -04:00
T00thpick1
7294175d9c Messages 2013-03-11 00:08:18 -04:00
NuclearW
1b17b90f32 Diff cleanup 2013-03-10 22:54:47 -04:00
NuclearW
d27f668a2e Fix rebase (see also: me) being dumb 2013-03-10 22:30:20 -04:00
T00thpick1
69dd5769e4 Correct format and comment 2013-03-10 22:30:20 -04:00
T00thpick1
7c9d09a878 Clean queuemanager on disable 2013-03-10 22:30:20 -04:00
T00thpick1
17c64251db Position right 2013-03-10 22:30:19 -04:00
T00thpick1
d728eba5c4 Change not addition 2013-03-10 22:30:19 -04:00
T00thpick1
429055bae2 Update changelog 2013-03-10 22:30:19 -04:00
T00thpick1
3f22a8f479 The sleep didn't actually do much of anything.... 2013-03-10 22:30:19 -04:00
T00thpick1
aeae60f968 check permissions earlier 2013-03-10 22:30:19 -04:00
T00thpick1
a97b889af5 Queue 2013-03-10 22:30:18 -04:00
T00thpick1
0e9953c25b Throttle 2013-03-10 22:30:18 -04:00
T00thpick1
869b30fcaa String wrapper 2013-03-10 22:30:18 -04:00
T00thpick1
44188396b4 One per player 2013-03-10 22:30:18 -04:00
T00thpick1
a7f146a835 queue concept, nowhere near final 2013-03-10 22:30:18 -04:00
8 changed files with 133 additions and 31 deletions

View File

@@ -30,6 +30,7 @@ Version 1.4.03-dev
= Fixed bug where Deflect was calculated based on the attacker, not the defender. (We really did this time!)
! Moved the Salvage unlock level from config.yml to advanced.yml
! Changed how Chimaera Wings are acquired, you need to craft them now. (By default, use 5 feathers in a shapeless recipe)
! Queue mctop and mcrank commands when using mySQL
- Removed option to disable Salvage via the config file. This should be handled via permissions instead.
- Removed the option to use Woodcutting without an axe from the config file.

View File

@@ -1,5 +1,6 @@
package com.gmail.nossr50.commands.player;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -8,11 +9,11 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.LeaderboardManager;
import com.gmail.nossr50.database.queuemanager.McRankAsync;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager;
@@ -122,6 +123,16 @@ public class McrankCommand implements CommandExecutor {
}
private void sqlDisplay(CommandSender sender, String playerName) {
mcMMO.p.getServer().getScheduler().runTaskAsynchronously(mcMMO.p, new McrankCommandAsyncTask(playerName, sender));
//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.YELLOW + "Calculating mcMMO rankings...");
}
}

View File

@@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.LeaderboardManager;
import com.gmail.nossr50.database.queuemanager.McTopAsync;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.skills.SkillUtils;
@@ -79,10 +79,10 @@ public class MctopCommand implements CommandExecutor {
if (sql) {
if (skill.equalsIgnoreCase("all")) {
sqlDisplay(page, "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing", sender, command);
sqlDisplay(page, "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing", sender);
}
else {
sqlDisplay(page, skill, sender, command);
sqlDisplay(page, skill, sender);
}
}
else {
@@ -122,7 +122,18 @@ public class MctopCommand implements CommandExecutor {
sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
}
private void sqlDisplay(int page, String query, CommandSender sender, Command command) {
mcMMO.p.getServer().getScheduler().runTaskAsynchronously(mcMMO.p, new MctopCommandAsyncTask(page, query, sender, command));
private void sqlDisplay(int page, String query, CommandSender sender) {
//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.YELLOW + "Calculating mcMMO rankings...");
}
}

View File

@@ -0,0 +1,63 @@
package com.gmail.nossr50.database.queuemanager;
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;
}
@Override
public void run() {
while(running) {
try {
queue.take().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public boolean queue(Queueable task) {
return queue.offer(task);
}
public boolean contains(String player) {
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;
public EqualString(String player) {
this.player = player;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Queueable) {
return ((Queueable)obj).getPlayer().equalsIgnoreCase(player);
}
return false;
}
}
private class EndThread implements Queueable {
@Override
public void run() { }
@Override
public String getPlayer() { return null; }
}
}

View File

@@ -1,24 +1,24 @@
package com.gmail.nossr50.runnables.commands;
package com.gmail.nossr50.database.queuemanager;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.skills.SkillUtils;
import com.gmail.nossr50.datatypes.skills.SkillType;
public class McrankCommandAsyncTask implements Runnable {
public class McRankAsync implements Queueable {
private final String playerName;
private final CommandSender sender;
private String player;
public McrankCommandAsyncTask(String playerName, CommandSender sender) {
public McRankAsync(String playerName, CommandSender sender) {
this.playerName = playerName;
this.sender = sender;
this.player = sender.getName();
}
@Override
@@ -36,10 +36,6 @@ public class McrankCommandAsyncTask implements Runnable {
continue;
}
if ((sender instanceof Player) && !Permissions.skillEnabled((Player) sender, skillType)) {
continue;
}
if (skills.get(skillType.name()) == null) {
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skillType), LocaleLoader.getString("Commands.mcrank.Unranked")));
}
@@ -58,4 +54,9 @@ public class McrankCommandAsyncTask implements Runnable {
}, 1L);
}
@Override
public String getPlayer() {
return player;
}
}

View File

@@ -1,42 +1,33 @@
package com.gmail.nossr50.runnables.commands;
package com.gmail.nossr50.database.queuemanager;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.StringUtils;
public class MctopCommandAsyncTask implements Runnable {
public class McTopAsync implements Queueable {
private CommandSender sender;
private String query;
private int page;
private Command command;
private String player;
public MctopCommandAsyncTask(int page, String query, CommandSender sender, Command command) {
public McTopAsync(int page, String query, CommandSender sender) {
this.page = page;
this.query = query;
this.sender = sender;
this.command = command;
this.player = sender.getName();
}
@Override
public void run() {
if (!query.equalsIgnoreCase("taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing")) {
if (!Permissions.mctop(sender, SkillType.getSkill(query))) {
sender.sendMessage(command.getPermissionMessage());
return;
}
}
String tablePrefix = Config.getInstance().getMySQLTablePrefix();
final HashMap<Integer, ArrayList<String>> userslist = DatabaseManager.read("SELECT " + query + ", user, NOW() FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON (user_id = id) WHERE " + query + " > 0 ORDER BY " + query + " DESC, user LIMIT " + ((page * 10) - 10) + ",10");
mcMMO.p.getServer().getScheduler().scheduleSyncDelayedTask(mcMMO.p, new Runnable() {
@@ -65,4 +56,9 @@ public class MctopCommandAsyncTask implements Runnable {
}, 1L);
}
@Override
public String getPlayer() {
return player;
}
}

View File

@@ -0,0 +1,6 @@
package com.gmail.nossr50.database.queuemanager;
public interface Queueable {
public void run();
public String getPlayer();
}

View File

@@ -27,6 +27,7 @@ import com.gmail.nossr50.config.spout.SpoutConfig;
import com.gmail.nossr50.config.treasure.TreasureConfig;
import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.database.LeaderboardManager;
import com.gmail.nossr50.database.queuemanager.AsyncQueueManager;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.listeners.BlockListener;
import com.gmail.nossr50.listeners.EntityListener;
@@ -70,6 +71,7 @@ public class mcMMO extends JavaPlugin {
public static ChunkManager placeStore;
public static RepairableManager repairableManager;
public static AsyncQueueManager queueManager;
// Jar Stuff
public static File mcmmo;
@@ -173,6 +175,12 @@ public class mcMMO extends JavaPlugin {
catch (NullPointerException e) {}
getServer().getScheduler().cancelTasks(this); // This removes our tasks
if (Config.getInstance().getUseMySQL()) {
queueManager.disable(); // Disable and stop queue thread
queueManager = null; // null static variable
}
HandlerList.unregisterAll(this); // Cancel event registrations
if (Config.getInstance().getBackupsEnabled()) {
@@ -455,6 +463,11 @@ public class mcMMO extends JavaPlugin {
// Bleed timer (Runs every two seconds)
scheduler.scheduleSyncRepeatingTask(this, new BleedTimerTask(), 40, 40);
if (Config.getInstance().getUseMySQL()) {
queueManager = new AsyncQueueManager();
scheduler.runTaskAsynchronously(this, queueManager);
}
// Old & Powerless User remover
int purgeInterval = Config.getInstance().getPurgeInterval();