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

Compare commits

...

20 Commits

Author SHA1 Message Date
t00thpick1
4cbcbd2462 Here too 2013-03-11 17:08:12 -03:00
t00thpick1
29b300ca49 Remember to return. 2013-03-11 17:07:30 -03:00
T00thpick1
6700ead160 Config 2013-03-11 00:24:19 -04:00
T00thpick1
d59954d0f1 Redesign 2013-03-11 00:22:38 -04:00
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
10 changed files with 168 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,17 @@ 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");
return;
}
if (!mcMMO.queueManager.queue(new McRankAsync(playerName, sender))) {
sender.sendMessage(ChatColor.RED + "Unable to add to queue");
return;
}
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))) {
sender.sendMessage(ChatColor.RED + "Unable to add to queue");
return;
}
sender.sendMessage(ChatColor.YELLOW + "Calculating mcMMO leaderboards...");
}
}

View File

@@ -59,6 +59,7 @@ public class Config extends AutoUpdateConfigLoader {
public String getMySQLUserName() { return getStringIncludingInts(config, "MySQL.Database.User_Name"); }
public int getMySQLServerPort() { return config.getInt("MySQL.Server.Port", 3306); }
public String getMySQLServerName() { return config.getString("MySQL.Server.Address", "localhost"); }
public int getQueueNumber() { return config.getInt("MySQL.ConcurrentQueues", 2); }
public String getMySQLUserPassword() {
if (getStringIncludingInts(config, "MySQL.Database.User_Password") != null) {

View File

@@ -0,0 +1,72 @@
package com.gmail.nossr50.database.queuemanager;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.scheduler.BukkitScheduler;
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) {
return queue.offer(task);
}
public boolean contains(String player) {
return queue.contains(new EqualString(player));
}
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;
}
}
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() {
}
@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,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;
}
}

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,10 @@ 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, Config.getInstance().getQueueNumber());
}
// Old & Powerless User remover
int purgeInterval = Config.getInstance().getPurgeInterval();