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

Compare commits

..

13 Commits

Author SHA1 Message Date
GJ
23719ace47 1.4.03 Bugfix Release 2013-03-14 22:27:24 -04:00
TfT_02
33882983e9 Update the changelog 2013-03-14 22:32:35 +01:00
TfT_02
5aecedc074 Damage the player when ChimaeraWing use failed 2013-03-14 22:31:44 +01:00
TfT_02
69bf17a619 Added Bat takeoff sound when using a Chimaera Wing 2013-03-14 22:26:02 +01:00
TfT_02
0292d3eefb Cleanup ChimaeraWing 2013-03-14 22:24:38 +01:00
TfT_02
0cd3e4ed84 Teleport to save spawn locations
Changed underground usage check.
2013-03-14 22:13:23 +01:00
GJ
3a26194a71 Optimized a few things with our FFS leaderboards. 2013-03-14 10:25:54 -04:00
GJ
1313e3fe4b Fix CraftBukkit / Bukkit bug regarding event.getCurrentItem() throwing
an ArrayIndexOutOfBounds error.
2013-03-13 15:44:26 -04:00
TfT_02
b2f400f61a "Splinter the axe into dozens of pieces" 2013-03-12 23:31:44 +01:00
GJ
9aa676cee1 We don't need to have two different executors for these commands. 2013-03-11 22:51:44 -04:00
GJ
eabf0f7f82 No need to use an empty locale string for this. 2013-03-11 21:06:56 -04:00
GJ
d0171809ec Fixed bug with '/party chat (on|off)' and '/partychat (on|off)' not
working
2013-03-11 21:06:26 -04:00
GJ
410c946faf Tidying up Permission checks for /mcrank and /mctop 2013-03-11 12:48:00 -04:00
20 changed files with 164 additions and 315 deletions

View File

@@ -7,10 +7,11 @@ Key:
! Change ! Change
- Removal - Removal
Version 1.4.03-dev Version 1.4.03
+ Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker + Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker
+ Improved stats display for child skills + Improved stats display for child skills
+ Added cooldown between using Chimaera Wings + Added cooldown between using Chimaera Wings
= Fixed bug with '/party chat (on|off)' and '/partychat (on|off)' not working
= Fixed bug with Repair not decreasing enchanting levels properly = Fixed bug with Repair not decreasing enchanting levels properly
= Fixed bug with Smelting not properly tracking furnaces = Fixed bug with Smelting not properly tracking furnaces
= Fixed bug with Blast Mining not dropping blocks correctly = Fixed bug with Blast Mining not dropping blocks correctly
@@ -28,9 +29,10 @@ Version 1.4.03-dev
= Fixed bug where the 'mcmmo.commands.ptp.world.all' was registered twice = Fixed bug where the 'mcmmo.commands.ptp.world.all' was registered twice
= Fixed bug where Beast Lore wouldn't work on friendly pets = Fixed bug where Beast Lore wouldn't work on friendly pets
= Fixed bug where Deflect was calculated based on the attacker, not the defender. (We really did this time!) = Fixed bug where Deflect was calculated based on the attacker, not the defender. (We really did this time!)
= Fixed bug where Treefeller would not deal durability damage when the axe "splinters into dozens of pieces"
! Moved the Salvage unlock level from config.yml to advanced.yml ! 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) ! 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 ! Changed how Chimaera Wings teleport players to the spawnpoint, will now check if the location is safe
- Removed option to disable Salvage via the config file. This should be handled via permissions instead. - 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. - Removed the option to use Woodcutting without an axe from the config file.

View File

@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.gmail.nossr50.mcMMO</groupId> <groupId>com.gmail.nossr50.mcMMO</groupId>
<artifactId>mcMMO</artifactId> <artifactId>mcMMO</artifactId>
<version>1.4.03-dev1</version> <version>1.4.03</version>
<name>mcMMO</name> <name>mcMMO</name>
<url>https://github.com/mcMMO-Dev/mcMMO</url> <url>https://github.com/mcMMO-Dev/mcMMO</url>
<issueManagement> <issueManagement>

View File

@@ -7,6 +7,8 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.chat.ChatMode; import com.gmail.nossr50.chat.ChatMode;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;
public abstract class ChatCommand implements CommandExecutor { public abstract class ChatCommand implements CommandExecutor {
@@ -21,8 +23,8 @@ public abstract class ChatCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) { switch (args.length) {
case 0: case 0:
if (!(sender instanceof Player)) { if (CommandUtils.noConsoleUsage(sender)) {
return false; return true;
} }
mcMMOPlayer = UserManager.getPlayer((Player) sender); mcMMOPlayer = UserManager.getPlayer((Player) sender);
@@ -38,19 +40,23 @@ public abstract class ChatCommand implements CommandExecutor {
case 1: case 1:
if (args[0].equalsIgnoreCase("on")) { if (args[0].equalsIgnoreCase("on")) {
if (!(sender instanceof Player)) { if (CommandUtils.noConsoleUsage(sender)) {
return false; return true;
} }
mcMMOPlayer = UserManager.getPlayer((Player) sender);
enableChatMode(sender); enableChatMode(sender);
return true; return true;
} }
if (args[0].equalsIgnoreCase("off")) { if (args[0].equalsIgnoreCase("off")) {
if (!(sender instanceof Player)) { if (CommandUtils.noConsoleUsage(sender)) {
return false; return true;
} }
mcMMOPlayer = UserManager.getPlayer((Player) sender);
disableChatMode(sender); disableChatMode(sender);
return true; return true;
} }
@@ -78,11 +84,21 @@ public abstract class ChatCommand implements CommandExecutor {
protected abstract void handleChatSending(CommandSender sender, String[] args); protected abstract void handleChatSending(CommandSender sender, String[] args);
private void enableChatMode(CommandSender sender) { private void enableChatMode(CommandSender sender) {
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return;
}
chatMode.enable(mcMMOPlayer); chatMode.enable(mcMMOPlayer);
sender.sendMessage(chatMode.getEnabledMessage()); sender.sendMessage(chatMode.getEnabledMessage());
} }
private void disableChatMode(CommandSender sender) { private void disableChatMode(CommandSender sender) {
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return;
}
chatMode.disable(mcMMOPlayer); chatMode.disable(mcMMOPlayer);
sender.sendMessage(chatMode.getDisabledMessage()); sender.sendMessage(chatMode.getDisabledMessage());
} }

View File

@@ -5,7 +5,7 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.gmail.nossr50.commands.chat.PartyChatCommand; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Permissions;
@@ -31,8 +31,8 @@ public class PartyCommand implements CommandExecutor {
private CommandExecutor partyRenameCommand = new PartyRenameCommand(); private CommandExecutor partyRenameCommand = new PartyRenameCommand();
private CommandExecutor partyInfoCommand = new PartyInfoCommand(); private CommandExecutor partyInfoCommand = new PartyInfoCommand();
private CommandExecutor partyHelpCommand = new PartyHelpCommand(); private CommandExecutor partyHelpCommand = new PartyHelpCommand();
private CommandExecutor partyTeleportCommand = new PtpCommand(); private CommandExecutor partyTeleportCommand = mcMMO.p.getCommand("ptp").getExecutor();
private CommandExecutor partyChatCommand = new PartyChatCommand(); private CommandExecutor partyChatCommand = mcMMO.p.getCommand("partychat").getExecutor();
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

View File

@@ -97,6 +97,6 @@ public class PartyInfoCommand implements CommandExecutor {
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header")); player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", membersNear, membersOnline)); player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", membersNear, membersOnline));
player.sendMessage(LocaleLoader.getString("Commands.Party.Members", createMembersList())); player.sendMessage(createMembersList());
} }
} }

View File

@@ -1,6 +1,5 @@
package com.gmail.nossr50.commands.player; package com.gmail.nossr50.commands.player;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -9,11 +8,11 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.LeaderboardManager; 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.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;
@@ -24,15 +23,15 @@ public class McrankCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) { switch (args.length) {
case 0: case 0:
if (!(sender instanceof Player)) {
return false;
}
if (!Permissions.mcrank(sender)) { if (!Permissions.mcrank(sender)) {
sender.sendMessage(command.getPermissionMessage()); sender.sendMessage(command.getPermissionMessage());
return true; return true;
} }
if (!(sender instanceof Player)) {
return false;
}
if (Config.getInstance().getUseMySQL()) { if (Config.getInstance().getUseMySQL()) {
sqlDisplay(sender, sender.getName()); sqlDisplay(sender, sender.getName());
} }
@@ -95,11 +94,7 @@ public class McrankCommand implements CommandExecutor {
for (SkillType skillType : SkillType.values()) { for (SkillType skillType : SkillType.values()) {
int[] rankInts = LeaderboardManager.getPlayerRank(playerName, skillType); int[] rankInts = LeaderboardManager.getPlayerRank(playerName, skillType);
if (skillType.isChildSkill()) { if ((sender instanceof Player && !Permissions.skillEnabled(sender, skillType)) || skillType.isChildSkill()) {
continue;
}
if ((sender instanceof Player) && !Permissions.skillEnabled((Player) sender, skillType)) {
continue; continue;
} }
@@ -123,17 +118,6 @@ public class McrankCommand implements CommandExecutor {
} }
private void sqlDisplay(CommandSender sender, String playerName) { private void sqlDisplay(CommandSender sender, String playerName) {
// TODO: Localize messages mcMMO.p.getServer().getScheduler().runTaskAsynchronously(mcMMO.p, new McrankCommandAsyncTask(playerName, sender));
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.mcMMO;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.LeaderboardManager; import com.gmail.nossr50.database.LeaderboardManager;
import com.gmail.nossr50.database.queuemanager.McTopAsync;
import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask;
import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.skills.SkillUtils; import com.gmail.nossr50.util.skills.SkillUtils;
@@ -86,11 +86,11 @@ public class MctopCommand implements CommandExecutor {
} }
} }
else { else {
flatfileDisplay(page, skill, sender, command); flatfileDisplay(page, skill, sender);
} }
} }
private void flatfileDisplay(int page, String skill, CommandSender sender, Command command) { private void flatfileDisplay(int page, String skill, CommandSender sender) {
LeaderboardManager.updateLeaderboards(); // Make sure we have the latest information LeaderboardManager.updateLeaderboards(); // Make sure we have the latest information
String[] info = LeaderboardManager.retrieveInfo(skill, page); String[] info = LeaderboardManager.retrieveInfo(skill, page);
@@ -123,17 +123,6 @@ public class MctopCommand implements CommandExecutor {
} }
private void sqlDisplay(int page, String query, CommandSender sender) { private void sqlDisplay(int page, String query, CommandSender sender) {
// TODO: Localize messages mcMMO.p.getServer().getScheduler().runTaskAsynchronously(mcMMO.p, new MctopCommandAsyncTask(page, query, sender));
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,7 +59,6 @@ public class Config extends AutoUpdateConfigLoader {
public String getMySQLUserName() { return getStringIncludingInts(config, "MySQL.Database.User_Name"); } public String getMySQLUserName() { return getStringIncludingInts(config, "MySQL.Database.User_Name"); }
public int getMySQLServerPort() { return config.getInt("MySQL.Server.Port", 3306); } public int getMySQLServerPort() { return config.getInt("MySQL.Server.Port", 3306); }
public String getMySQLServerName() { return config.getString("MySQL.Server.Address", "localhost"); } public String getMySQLServerName() { return config.getString("MySQL.Server.Address", "localhost"); }
public int getQueueNumber() { return config.getInt("MySQL.ConcurrentQueues", 2); }
public String getMySQLUserPassword() { public String getMySQLUserPassword() {
if (getStringIncludingInts(config, "MySQL.Database.User_Password") != null) { if (getStringIncludingInts(config, "MySQL.Database.User_Password") != null) {

View File

@@ -60,79 +60,79 @@ public final class LeaderboardManager {
ArrayList<String> players = new ArrayList<String>(); ArrayList<String> players = new ArrayList<String>();
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
String[] character = line.split(":"); String[] data = line.split(":");
String p = character[0]; String playerName = data[0];
int powerLevel = 0; int powerLevel = 0;
// Prevent the same player from being added multiple times (I'd like to note that this shouldn't happen...) // Prevent the same player from being added multiple times (I'd like to note that this shouldn't happen...)
if (players.contains(p)) { if (players.contains(playerName)) {
continue; continue;
} }
players.add(p); players.add(playerName);
if (character.length > 1 && StringUtils.isInt(character[1])) { if (data.length > 1 && StringUtils.isInt(data[1])) {
mining.add(new PlayerStat(p, Integer.parseInt(character[1]))); mining.add(new PlayerStat(playerName, Integer.parseInt(data[1])));
powerLevel += Integer.parseInt(character[1]); powerLevel += Integer.parseInt(data[1]);
} }
if (character.length > 5 && StringUtils.isInt(character[5])) { if (data.length > 5 && StringUtils.isInt(data[5])) {
woodcutting.add(new PlayerStat(p, Integer.parseInt(character[5]))); woodcutting.add(new PlayerStat(playerName, Integer.parseInt(data[5])));
powerLevel += Integer.parseInt(character[5]); powerLevel += Integer.parseInt(data[5]);
} }
if (character.length > 7 && StringUtils.isInt(character[7])) { if (data.length > 7 && StringUtils.isInt(data[7])) {
repair.add(new PlayerStat(p, Integer.parseInt(character[7]))); repair.add(new PlayerStat(playerName, Integer.parseInt(data[7])));
powerLevel += Integer.parseInt(character[7]); powerLevel += Integer.parseInt(data[7]);
} }
if (character.length > 8 && StringUtils.isInt(character[8])) { if (data.length > 8 && StringUtils.isInt(data[8])) {
unarmed.add(new PlayerStat(p, Integer.parseInt(character[8]))); unarmed.add(new PlayerStat(playerName, Integer.parseInt(data[8])));
powerLevel += Integer.parseInt(character[8]); powerLevel += Integer.parseInt(data[8]);
} }
if (character.length > 9 && StringUtils.isInt(character[9])) { if (data.length > 9 && StringUtils.isInt(data[9])) {
herbalism.add(new PlayerStat(p, Integer.parseInt(character[9]))); herbalism.add(new PlayerStat(playerName, Integer.parseInt(data[9])));
powerLevel += Integer.parseInt(character[9]); powerLevel += Integer.parseInt(data[9]);
} }
if (character.length > 10 && StringUtils.isInt(character[10])) { if (data.length > 10 && StringUtils.isInt(data[10])) {
excavation.add(new PlayerStat(p, Integer.parseInt(character[10]))); excavation.add(new PlayerStat(playerName, Integer.parseInt(data[10])));
powerLevel += Integer.parseInt(character[10]); powerLevel += Integer.parseInt(data[10]);
} }
if (character.length > 11 && StringUtils.isInt(character[11])) { if (data.length > 11 && StringUtils.isInt(data[11])) {
archery.add(new PlayerStat(p, Integer.parseInt(character[11]))); archery.add(new PlayerStat(playerName, Integer.parseInt(data[11])));
powerLevel += Integer.parseInt(character[11]); powerLevel += Integer.parseInt(data[11]);
} }
if (character.length > 12 && StringUtils.isInt(character[12])) { if (data.length > 12 && StringUtils.isInt(data[12])) {
swords.add(new PlayerStat(p, Integer.parseInt(character[12]))); swords.add(new PlayerStat(playerName, Integer.parseInt(data[12])));
powerLevel += Integer.parseInt(character[12]); powerLevel += Integer.parseInt(data[12]);
} }
if (character.length > 13 && StringUtils.isInt(character[13])) { if (data.length > 13 && StringUtils.isInt(data[13])) {
axes.add(new PlayerStat(p, Integer.parseInt(character[13]))); axes.add(new PlayerStat(playerName, Integer.parseInt(data[13])));
powerLevel += Integer.parseInt(character[13]); powerLevel += Integer.parseInt(data[13]);
} }
if (character.length > 14 && StringUtils.isInt(character[14])) { if (data.length > 14 && StringUtils.isInt(data[14])) {
acrobatics.add(new PlayerStat(p, Integer.parseInt(character[14]))); acrobatics.add(new PlayerStat(playerName, Integer.parseInt(data[14])));
powerLevel += Integer.parseInt(character[14]); powerLevel += Integer.parseInt(data[14]);
} }
if (character.length > 24 && StringUtils.isInt(character[24])) { if (data.length > 24 && StringUtils.isInt(data[24])) {
taming.add(new PlayerStat(p, Integer.parseInt(character[24]))); taming.add(new PlayerStat(playerName, Integer.parseInt(data[24])));
powerLevel += Integer.parseInt(character[24]); powerLevel += Integer.parseInt(data[24]);
} }
if (character.length > 34 && StringUtils.isInt(character[34])) { if (data.length > 34 && StringUtils.isInt(data[34])) {
fishing.add(new PlayerStat(p, Integer.parseInt(character[34]))); fishing.add(new PlayerStat(playerName, Integer.parseInt(data[34])));
powerLevel += Integer.parseInt(character[34]); powerLevel += Integer.parseInt(data[34]);
} }
powerLevels.add(new PlayerStat(p, powerLevel)); powerLevels.add(new PlayerStat(playerName, powerLevel));
} }
in.close(); in.close();
} }
@@ -188,72 +188,22 @@ public final class LeaderboardManager {
statsList = playerStatHash.get(SkillType.getSkill(skillType)); statsList = playerStatHash.get(SkillType.getSkill(skillType));
} }
int destination; int destination = (pageNumber - 1) * 10;
// How many lines to skip through for (int i = 0; i < 10; i++) {
if (pageNumber == 1) { PlayerStat ps = statsList.get(destination + i);
destination = 0; info[i] = ps.name + ":" + ps.statVal;
}
else {
destination = (pageNumber * 10) - 9;
}
int currentPos = 0;
for (PlayerStat ps : statsList) {
if (currentPos == 10) {
break;
}
if (destination > 1) {
destination--;
continue;
}
info[currentPos] = ps.name + ":" + ps.statVal;
currentPos++;
} }
return info; return info;
} }
public static int[] getPlayerRank(String playerName) { public static int[] getPlayerRank(String playerName) {
int currentPos = 1; return getPlayerRank(playerName, powerLevels);
if (powerLevels != null) {
for (PlayerStat stat : powerLevels) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
continue;
}
return new int[] {0, 0};
}
return new int[] {0, 0};
} }
public static int[] getPlayerRank(String playerName, SkillType skillType) { public static int[] getPlayerRank(String playerName, SkillType skillType) {
int currentPos = 1; return getPlayerRank(playerName, playerStatHash.get(skillType));
List<PlayerStat> statsList = playerStatHash.get(skillType);
if (statsList != null) {
for (PlayerStat stat : statsList) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
continue;
}
return new int[] {0, 0};
}
return new int[] {0, 0};
} }
public static boolean removeFlatFileUser(String playerName) { public static boolean removeFlatFileUser(String playerName) {
@@ -315,8 +265,9 @@ public final class LeaderboardManager {
mcMMO.p.getLogger().info("Purging powerless users..."); mcMMO.p.getLogger().info("Purging powerless users...");
int purgedUsers = 0; int purgedUsers = 0;
for (PlayerStat stat : powerLevels) { for (PlayerStat stat : powerLevels) {
if (stat.statVal == 0 && removeFlatFileUser(stat.name) && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline()) { if (stat.statVal == 0 && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline() && removeFlatFileUser(stat.name)) {
purgedUsers++; purgedUsers++;
} }
} }
@@ -394,6 +345,24 @@ public final class LeaderboardManager {
return removedPlayers; return removedPlayers;
} }
private static int[] getPlayerRank(String playerName, List<PlayerStat> statsList) {
int currentPos = 1;
if (statsList == null) {
return new int[] {0, 0};
}
for (PlayerStat stat : statsList) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
}
return new int[] {0, 0};
}
private static class SkillComparator implements Comparator<PlayerStat> { private static class SkillComparator implements Comparator<PlayerStat> {
@Override @Override
public int compare(PlayerStat o1, PlayerStat o2) { public int compare(PlayerStat o1, PlayerStat o2) {

View File

@@ -1,72 +0,0 @@
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,25 +0,0 @@
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

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

View File

@@ -153,6 +153,8 @@ public class InventoryListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onInventoryClickEvent(InventoryClickEvent event) { public void onInventoryClickEvent(InventoryClickEvent event) {
if (event.getSlot() >= 0) {
SkillUtils.removeAbilityBuff(event.getCurrentItem()); SkillUtils.removeAbilityBuff(event.getCurrentItem());
} }
} }
}

View File

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

View File

@@ -1,24 +1,24 @@
package com.gmail.nossr50.database.queuemanager; package com.gmail.nossr50.runnables.commands;
import java.util.Map; import java.util.Map;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.database.DatabaseManager; import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.skills.SkillUtils;
import com.gmail.nossr50.datatypes.skills.SkillType; 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;
public class McRankAsync implements Queueable { public class McrankCommandAsyncTask implements Runnable {
private final String playerName; private final String playerName;
private final CommandSender sender; private final CommandSender sender;
private String player;
public McRankAsync(String playerName, CommandSender sender) { public McrankCommandAsyncTask(String playerName, CommandSender sender) {
this.playerName = playerName; this.playerName = playerName;
this.sender = sender; this.sender = sender;
this.player = sender.getName();
} }
@Override @Override
@@ -32,7 +32,7 @@ public class McRankAsync implements Queueable {
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Player", playerName)); sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Player", playerName));
for (SkillType skillType : SkillType.values()) { for (SkillType skillType : SkillType.values()) {
if (skillType.isChildSkill()) { if ((sender instanceof Player && !Permissions.skillEnabled(sender, skillType)) || skillType.isChildSkill()) {
continue; continue;
} }
@@ -54,9 +54,4 @@ public class McRankAsync implements Queueable {
}, 1L); }, 1L);
} }
@Override
public String getPlayer() {
return player;
}
} }

View File

@@ -1,4 +1,4 @@
package com.gmail.nossr50.database.queuemanager; package com.gmail.nossr50.runnables.commands;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -12,18 +12,16 @@ import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.StringUtils;
public class McTopAsync implements Queueable { public class MctopCommandAsyncTask implements Runnable {
private CommandSender sender; private CommandSender sender;
private String query; private String query;
private int page; private int page;
private String player;
public McTopAsync(int page, String query, CommandSender sender) { public MctopCommandAsyncTask(int page, String query, CommandSender sender) {
this.page = page; this.page = page;
this.query = query; this.query = query;
this.sender = sender; this.sender = sender;
this.player = sender.getName();
} }
@Override @Override
@@ -56,9 +54,4 @@ public class McTopAsync implements Queueable {
}, 1L); }, 1L);
} }
@Override
public String getPlayer() {
return player;
}
} }

View File

@@ -232,6 +232,7 @@ public final class Woodcutting {
short maxDurability = ModUtils.isCustomTool(inHand) ? ModUtils.getToolFromItemStack(inHand).getDurability() : inHandMaterial.getMaxDurability(); short maxDurability = ModUtils.isCustomTool(inHand) ? ModUtils.getToolFromItemStack(inHand).getDurability() : inHandMaterial.getMaxDurability();
if (finalDurability >= maxDurability) { if (finalDurability >= maxDurability) {
inHand.setDurability(maxDurability);
return false; return false;
} }

View File

@@ -4,17 +4,20 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.ShapelessRecipe;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.metrics.MetricsManager; import com.gmail.nossr50.metrics.MetricsManager;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.skills.CombatUtils;
import com.gmail.nossr50.util.skills.SkillUtils; import com.gmail.nossr50.util.skills.SkillUtils;
public final class ChimaeraWing { public final class ChimaeraWing {
@@ -32,7 +35,7 @@ public final class ChimaeraWing {
return; return;
} }
Block block = player.getLocation().getBlock(); Location location = player.getLocation();
int amount = inHand.getAmount(); int amount = inHand.getAmount();
long recentlyHurt = UserManager.getPlayer(player).getRecentlyHurt(); long recentlyHurt = UserManager.getPlayer(player).getRecentlyHurt();
long lastChimaeraWing = (UserManager.getPlayer(player).getLastChimaeraTeleport()); long lastChimaeraWing = (UserManager.getPlayer(player).getLastChimaeraTeleport());
@@ -43,37 +46,47 @@ public final class ChimaeraWing {
return; return;
} }
if (SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player) && amount >= Config.getInstance().getChimaeraUseCost()) { if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)) {
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)));
return;
}
if (amount <= Config.getInstance().getChimaeraUseCost()) {
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", "Chimaera Wings")); //TODO Locale!
return;
}
player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost()))); player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost())));
if (Config.getInstance().getChimaeraPreventUseUnderground()) { if (Config.getInstance().getChimaeraPreventUseUnderground()) {
for (int y = 1; block.getY() + y < player.getWorld().getMaxHeight(); y++) {
if (!(block.getRelative(0, y, 0).getType() == Material.AIR)) { if (location.getY() < player.getWorld().getHighestBlockYAt(location)) {
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail")); player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail"));
player.teleport(block.getRelative(0, y - 1, 0).getLocation()); player.setVelocity(new Vector(0, 0.5D, 0));
CombatUtils.dealDamage(player, Misc.getRandom().nextInt(player.getHealth() - 10));
UserManager.getPlayer(player).actualizeLastChimaeraTeleport();
return; return;
} }
} }
}
if (player.getBedSpawnLocation() != null) { if (player.getBedSpawnLocation() != null) {
player.teleport(player.getBedSpawnLocation()); player.teleport(player.getBedSpawnLocation());
} }
else { else {
player.teleport(player.getWorld().getSpawnLocation()); Location spawnLocation = player.getWorld().getSpawnLocation();
if (spawnLocation.getBlock().getType() == Material.AIR) {
player.teleport(spawnLocation);
}
else {
player.teleport(player.getWorld().getHighestBlockAt(spawnLocation).getLocation());
}
} }
UserManager.getPlayer(player).actualizeLastChimaeraTeleport(); UserManager.getPlayer(player).actualizeLastChimaeraTeleport();
MetricsManager.chimeraWingUsed(); MetricsManager.chimeraWingUsed();
player.playSound(location, Sound.BAT_TAKEOFF, Misc.BAT_VOLUME, Misc.BAT_PITCH);
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Pass")); player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Pass"));
} }
else if (!SkillUtils.cooldownOver(recentlyHurt, 60 * Misc.TIME_CONVERSION_FACTOR, player) && amount >= Config.getInstance().getChimaeraUseCost()) {
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt, 60, player)));
}
else if (amount <= Config.getInstance().getChimaeraUseCost()) {
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", "Chimaera Wings")); //TODO Locale!
}
}
} }
public static ItemStack getChimaeraWing(int amount) { public static ItemStack getChimaeraWing(int amount) {

View File

@@ -26,6 +26,8 @@ public final class Misc {
public static final float FIZZ_VOLUME = 0.5F; public static final float FIZZ_VOLUME = 0.5F;
public static final float POP_PITCH = ((getRandom().nextFloat() - getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F; public static final float POP_PITCH = ((getRandom().nextFloat() - getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F;
public static final float POP_VOLUME = 0.2F; public static final float POP_VOLUME = 0.2F;
public static final float BAT_VOLUME = 1.0F;
public static final float BAT_PITCH = 0.6F;
private Misc() {}; private Misc() {};

View File

@@ -464,7 +464,6 @@ Commands.Party.AlreadyExists=[[DARK_RED]]Party {0} already exists!
Commands.Party.Kick=[[RED]]You were kicked from party {0}! Commands.Party.Kick=[[RED]]You were kicked from party {0}!
Commands.Party.Leave=[[RED]]You have left that party Commands.Party.Leave=[[RED]]You have left that party
Commands.Party.Members.Header=[[RED]]-----[][[GREEN]]MEMBERS[[RED]][]----- Commands.Party.Members.Header=[[RED]]-----[][[GREEN]]MEMBERS[[RED]][]-----
Commands.Party.Members={0}
Commands.Party.None=[[RED]]You are not in a party. Commands.Party.None=[[RED]]You are not in a party.
Commands.Party.Quit=[[RED]]- Leave your current party Commands.Party.Quit=[[RED]]- Leave your current party
Commands.Party.Teleport=<player> [[RED]]- Teleport to party member Commands.Party.Teleport=<player> [[RED]]- Teleport to party member