mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 17:53:00 +01:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b700a99c52 | ||
|
|
7294175d9c | ||
|
|
1b17b90f32 | ||
|
|
d27f668a2e | ||
|
|
69dd5769e4 | ||
|
|
7c9d09a878 | ||
|
|
17c64251db | ||
|
|
d728eba5c4 | ||
|
|
429055bae2 | ||
|
|
3f22a8f479 | ||
|
|
aeae60f968 | ||
|
|
a97b889af5 | ||
|
|
0e9953c25b | ||
|
|
869b30fcaa | ||
|
|
44188396b4 | ||
|
|
a7f146a835 |
@@ -7,11 +7,10 @@ Key:
|
|||||||
! Change
|
! Change
|
||||||
- Removal
|
- Removal
|
||||||
|
|
||||||
Version 1.4.03
|
Version 1.4.03-dev
|
||||||
+ 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
|
||||||
@@ -29,10 +28,9 @@ Version 1.4.03
|
|||||||
= 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)
|
||||||
! Changed how Chimaera Wings teleport players to the spawnpoint, will now check if the location is safe
|
! 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 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.
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -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</version>
|
<version>1.4.03-dev1</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>
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ 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 {
|
||||||
@@ -23,8 +21,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 (CommandUtils.noConsoleUsage(sender)) {
|
if (!(sender instanceof Player)) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer((Player) sender);
|
mcMMOPlayer = UserManager.getPlayer((Player) sender);
|
||||||
@@ -40,23 +38,19 @@ public abstract class ChatCommand implements CommandExecutor {
|
|||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if (args[0].equalsIgnoreCase("on")) {
|
if (args[0].equalsIgnoreCase("on")) {
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
if (!(sender instanceof Player)) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer((Player) sender);
|
|
||||||
|
|
||||||
enableChatMode(sender);
|
enableChatMode(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("off")) {
|
if (args[0].equalsIgnoreCase("off")) {
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
if (!(sender instanceof Player)) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer((Player) sender);
|
|
||||||
|
|
||||||
disableChatMode(sender);
|
disableChatMode(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -84,21 +78,11 @@ 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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.mcMMO;
|
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||||
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 = mcMMO.p.getCommand("ptp").getExecutor();
|
private CommandExecutor partyTeleportCommand = new PtpCommand();
|
||||||
private CommandExecutor partyChatCommand = mcMMO.p.getCommand("partychat").getExecutor();
|
private CommandExecutor partyChatCommand = new PartyChatCommand();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
|||||||
@@ -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(createMembersList());
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Members", createMembersList()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
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;
|
||||||
@@ -8,11 +9,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;
|
||||||
@@ -23,15 +24,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());
|
||||||
}
|
}
|
||||||
@@ -94,7 +95,11 @@ 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 ((sender instanceof Player && !Permissions.skillEnabled(sender, skillType)) || skillType.isChildSkill()) {
|
if (skillType.isChildSkill()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sender instanceof Player) && !Permissions.skillEnabled((Player) sender, skillType)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,6 +123,16 @@ public class McrankCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sqlDisplay(CommandSender sender, String playerName) {
|
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...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
flatfileDisplay(page, skill, sender, command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void flatfileDisplay(int page, String skill, CommandSender sender) {
|
private void flatfileDisplay(int page, String skill, CommandSender sender, Command command) {
|
||||||
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,6 +123,17 @@ public class MctopCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sqlDisplay(int page, String query, CommandSender sender) {
|
private void sqlDisplay(int page, String query, CommandSender sender) {
|
||||||
mcMMO.p.getServer().getScheduler().runTaskAsynchronously(mcMMO.p, new MctopCommandAsyncTask(page, query, 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...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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[] data = line.split(":");
|
String[] character = line.split(":");
|
||||||
|
|
||||||
String playerName = data[0];
|
String p = character[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(playerName)) {
|
if (players.contains(p)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
players.add(playerName);
|
players.add(p);
|
||||||
|
|
||||||
if (data.length > 1 && StringUtils.isInt(data[1])) {
|
if (character.length > 1 && StringUtils.isInt(character[1])) {
|
||||||
mining.add(new PlayerStat(playerName, Integer.parseInt(data[1])));
|
mining.add(new PlayerStat(p, Integer.parseInt(character[1])));
|
||||||
powerLevel += Integer.parseInt(data[1]);
|
powerLevel += Integer.parseInt(character[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 5 && StringUtils.isInt(data[5])) {
|
if (character.length > 5 && StringUtils.isInt(character[5])) {
|
||||||
woodcutting.add(new PlayerStat(playerName, Integer.parseInt(data[5])));
|
woodcutting.add(new PlayerStat(p, Integer.parseInt(character[5])));
|
||||||
powerLevel += Integer.parseInt(data[5]);
|
powerLevel += Integer.parseInt(character[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 7 && StringUtils.isInt(data[7])) {
|
if (character.length > 7 && StringUtils.isInt(character[7])) {
|
||||||
repair.add(new PlayerStat(playerName, Integer.parseInt(data[7])));
|
repair.add(new PlayerStat(p, Integer.parseInt(character[7])));
|
||||||
powerLevel += Integer.parseInt(data[7]);
|
powerLevel += Integer.parseInt(character[7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 8 && StringUtils.isInt(data[8])) {
|
if (character.length > 8 && StringUtils.isInt(character[8])) {
|
||||||
unarmed.add(new PlayerStat(playerName, Integer.parseInt(data[8])));
|
unarmed.add(new PlayerStat(p, Integer.parseInt(character[8])));
|
||||||
powerLevel += Integer.parseInt(data[8]);
|
powerLevel += Integer.parseInt(character[8]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 9 && StringUtils.isInt(data[9])) {
|
if (character.length > 9 && StringUtils.isInt(character[9])) {
|
||||||
herbalism.add(new PlayerStat(playerName, Integer.parseInt(data[9])));
|
herbalism.add(new PlayerStat(p, Integer.parseInt(character[9])));
|
||||||
powerLevel += Integer.parseInt(data[9]);
|
powerLevel += Integer.parseInt(character[9]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 10 && StringUtils.isInt(data[10])) {
|
if (character.length > 10 && StringUtils.isInt(character[10])) {
|
||||||
excavation.add(new PlayerStat(playerName, Integer.parseInt(data[10])));
|
excavation.add(new PlayerStat(p, Integer.parseInt(character[10])));
|
||||||
powerLevel += Integer.parseInt(data[10]);
|
powerLevel += Integer.parseInt(character[10]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 11 && StringUtils.isInt(data[11])) {
|
if (character.length > 11 && StringUtils.isInt(character[11])) {
|
||||||
archery.add(new PlayerStat(playerName, Integer.parseInt(data[11])));
|
archery.add(new PlayerStat(p, Integer.parseInt(character[11])));
|
||||||
powerLevel += Integer.parseInt(data[11]);
|
powerLevel += Integer.parseInt(character[11]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 12 && StringUtils.isInt(data[12])) {
|
if (character.length > 12 && StringUtils.isInt(character[12])) {
|
||||||
swords.add(new PlayerStat(playerName, Integer.parseInt(data[12])));
|
swords.add(new PlayerStat(p, Integer.parseInt(character[12])));
|
||||||
powerLevel += Integer.parseInt(data[12]);
|
powerLevel += Integer.parseInt(character[12]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 13 && StringUtils.isInt(data[13])) {
|
if (character.length > 13 && StringUtils.isInt(character[13])) {
|
||||||
axes.add(new PlayerStat(playerName, Integer.parseInt(data[13])));
|
axes.add(new PlayerStat(p, Integer.parseInt(character[13])));
|
||||||
powerLevel += Integer.parseInt(data[13]);
|
powerLevel += Integer.parseInt(character[13]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 14 && StringUtils.isInt(data[14])) {
|
if (character.length > 14 && StringUtils.isInt(character[14])) {
|
||||||
acrobatics.add(new PlayerStat(playerName, Integer.parseInt(data[14])));
|
acrobatics.add(new PlayerStat(p, Integer.parseInt(character[14])));
|
||||||
powerLevel += Integer.parseInt(data[14]);
|
powerLevel += Integer.parseInt(character[14]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 24 && StringUtils.isInt(data[24])) {
|
if (character.length > 24 && StringUtils.isInt(character[24])) {
|
||||||
taming.add(new PlayerStat(playerName, Integer.parseInt(data[24])));
|
taming.add(new PlayerStat(p, Integer.parseInt(character[24])));
|
||||||
powerLevel += Integer.parseInt(data[24]);
|
powerLevel += Integer.parseInt(character[24]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.length > 34 && StringUtils.isInt(data[34])) {
|
if (character.length > 34 && StringUtils.isInt(character[34])) {
|
||||||
fishing.add(new PlayerStat(playerName, Integer.parseInt(data[34])));
|
fishing.add(new PlayerStat(p, Integer.parseInt(character[34])));
|
||||||
powerLevel += Integer.parseInt(data[34]);
|
powerLevel += Integer.parseInt(character[34]);
|
||||||
}
|
}
|
||||||
|
|
||||||
powerLevels.add(new PlayerStat(playerName, powerLevel));
|
powerLevels.add(new PlayerStat(p, powerLevel));
|
||||||
}
|
}
|
||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
@@ -188,22 +188,72 @@ public final class LeaderboardManager {
|
|||||||
statsList = playerStatHash.get(SkillType.getSkill(skillType));
|
statsList = playerStatHash.get(SkillType.getSkill(skillType));
|
||||||
}
|
}
|
||||||
|
|
||||||
int destination = (pageNumber - 1) * 10;
|
int destination;
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
// How many lines to skip through
|
||||||
PlayerStat ps = statsList.get(destination + i);
|
if (pageNumber == 1) {
|
||||||
info[i] = ps.name + ":" + ps.statVal;
|
destination = 0;
|
||||||
|
}
|
||||||
|
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) {
|
||||||
return getPlayerRank(playerName, powerLevels);
|
int currentPos = 1;
|
||||||
|
|
||||||
|
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) {
|
||||||
return getPlayerRank(playerName, playerStatHash.get(skillType));
|
int currentPos = 1;
|
||||||
|
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) {
|
||||||
@@ -265,9 +315,8 @@ 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 && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline() && removeFlatFileUser(stat.name)) {
|
if (stat.statVal == 0 && removeFlatFileUser(stat.name) && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline()) {
|
||||||
purgedUsers++;
|
purgedUsers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,24 +394,6 @@ 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) {
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.database.queuemanager;
|
||||||
|
|
||||||
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.datatypes.skills.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
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 String playerName;
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
|
private String player;
|
||||||
|
|
||||||
public McrankCommandAsyncTask(String playerName, CommandSender sender) {
|
public McRankAsync(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 McrankCommandAsyncTask implements Runnable {
|
|||||||
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 ((sender instanceof Player && !Permissions.skillEnabled(sender, skillType)) || skillType.isChildSkill()) {
|
if (skillType.isChildSkill()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,4 +54,9 @@ public class McrankCommandAsyncTask implements Runnable {
|
|||||||
|
|
||||||
}, 1L);
|
}, 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.database.queuemanager;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -12,16 +12,18 @@ 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 MctopCommandAsyncTask implements Runnable {
|
public class McTopAsync implements Queueable {
|
||||||
|
|
||||||
private CommandSender sender;
|
private CommandSender sender;
|
||||||
private String query;
|
private String query;
|
||||||
private int page;
|
private int page;
|
||||||
|
private String player;
|
||||||
|
|
||||||
public MctopCommandAsyncTask(int page, String query, CommandSender sender) {
|
public McTopAsync(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
|
||||||
@@ -54,4 +56,9 @@ public class MctopCommandAsyncTask implements Runnable {
|
|||||||
}, 1L);
|
}, 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.gmail.nossr50.database.queuemanager;
|
||||||
|
|
||||||
|
public interface Queueable {
|
||||||
|
public void run();
|
||||||
|
public String getPlayer();
|
||||||
|
}
|
||||||
@@ -153,8 +153,6 @@ 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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ 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;
|
||||||
@@ -70,6 +71,7 @@ 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;
|
||||||
@@ -173,6 +175,12 @@ 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()) {
|
||||||
@@ -455,6 +463,11 @@ 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.runTaskAsynchronously(this, queueManager);
|
||||||
|
}
|
||||||
|
|
||||||
// Old & Powerless User remover
|
// Old & Powerless User remover
|
||||||
int purgeInterval = Config.getInstance().getPurgeInterval();
|
int purgeInterval = Config.getInstance().getPurgeInterval();
|
||||||
|
|
||||||
|
|||||||
@@ -232,7 +232,6 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,20 +4,17 @@ 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.Sound;
|
import org.bukkit.block.Block;
|
||||||
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 {
|
||||||
@@ -35,7 +32,7 @@ public final class ChimaeraWing {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Location location = player.getLocation();
|
Block block = player.getLocation().getBlock();
|
||||||
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());
|
||||||
@@ -46,46 +43,36 @@ public final class ChimaeraWing {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)) {
|
if (SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player) && amount >= Config.getInstance().getChimaeraUseCost()) {
|
||||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)));
|
player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost())));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (amount <= Config.getInstance().getChimaeraUseCost()) {
|
if (Config.getInstance().getChimaeraPreventUseUnderground()) {
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", "Chimaera Wings")); //TODO Locale!
|
for (int y = 1; block.getY() + y < player.getWorld().getMaxHeight(); y++) {
|
||||||
return;
|
if (!(block.getRelative(0, y, 0).getType() == Material.AIR)) {
|
||||||
}
|
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail"));
|
||||||
|
player.teleport(block.getRelative(0, y - 1, 0).getLocation());
|
||||||
player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost())));
|
return;
|
||||||
|
}
|
||||||
if (Config.getInstance().getChimaeraPreventUseUnderground()) {
|
}
|
||||||
|
|
||||||
if (location.getY() < player.getWorld().getHighestBlockYAt(location)) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail"));
|
|
||||||
player.setVelocity(new Vector(0, 0.5D, 0));
|
|
||||||
CombatUtils.dealDamage(player, Misc.getRandom().nextInt(player.getHealth() - 10));
|
|
||||||
UserManager.getPlayer(player).actualizeLastChimaeraTeleport();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getBedSpawnLocation() != null) {
|
if (player.getBedSpawnLocation() != null) {
|
||||||
player.teleport(player.getBedSpawnLocation());
|
player.teleport(player.getBedSpawnLocation());
|
||||||
}
|
|
||||||
else {
|
|
||||||
Location spawnLocation = player.getWorld().getSpawnLocation();
|
|
||||||
if (spawnLocation.getBlock().getType() == Material.AIR) {
|
|
||||||
player.teleport(spawnLocation);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
player.teleport(player.getWorld().getHighestBlockAt(spawnLocation).getLocation());
|
player.teleport(player.getWorld().getSpawnLocation());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
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!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ 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() {};
|
||||||
|
|
||||||
|
|||||||
@@ -464,6 +464,7 @@ 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
|
||||||
|
|||||||
Reference in New Issue
Block a user