mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-19 18:33:00 +01:00
Compare commits
269 Commits
1.4.05
...
dev-partym
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
663d54d31f | ||
|
|
9a5f4b638f | ||
|
|
9aa49a09da | ||
|
|
bf8945ac59 | ||
|
|
d9926bab4e | ||
|
|
38ba2c21e5 | ||
|
|
a48fb30edf | ||
|
|
92ec04bd46 | ||
|
|
0b6372a6ea | ||
|
|
4f8b66f94d | ||
|
|
0c52b3016c | ||
|
|
a2f80569e3 | ||
|
|
87df536a1f | ||
|
|
12e70490d8 | ||
|
|
23b1518dc0 | ||
|
|
6dbf2e0d95 | ||
|
|
60304e9643 | ||
|
|
614557e2fa | ||
|
|
e312e95aed | ||
|
|
2ee919b51f | ||
|
|
22f6ae858b | ||
|
|
3c3b4af2c4 | ||
|
|
feb0d1fe5d | ||
|
|
2d66b8ed12 | ||
|
|
483f348403 | ||
|
|
a8a5100f58 | ||
|
|
1f9dc70bb1 | ||
|
|
7f1ef61657 | ||
|
|
2e74c079b0 | ||
|
|
ce4295289a | ||
|
|
7fde04851d | ||
|
|
71d030e5ad | ||
|
|
b08649d0a4 | ||
|
|
0a11a9a2c8 | ||
|
|
068f47b523 | ||
|
|
79aab57abc | ||
|
|
2cf58f1b5b | ||
|
|
9678875b4b | ||
|
|
d1a7ce827a | ||
|
|
9b2f4b7bde | ||
|
|
24e5147a2a | ||
|
|
0423a7831d | ||
|
|
feea22b3a4 | ||
|
|
7f40a9f284 | ||
|
|
bc706109e0 | ||
|
|
a25bddba5e | ||
|
|
ab897724d3 | ||
|
|
a7861fc54b | ||
|
|
936bec8ff5 | ||
|
|
01d10971a1 | ||
|
|
12e388a392 | ||
|
|
fb450671d6 | ||
|
|
fca5f9ec98 | ||
|
|
c9ae6436bd | ||
|
|
b6c4d2b4ad | ||
|
|
27ab2f5b12 | ||
|
|
9b08062a58 | ||
|
|
401bdfa9ac | ||
|
|
68d8d6dd30 | ||
|
|
2a57d7007d | ||
|
|
fd675ac291 | ||
|
|
41f020bbb7 | ||
|
|
00dee500e0 | ||
|
|
36bdb8a63e | ||
|
|
aa9eb0868c | ||
|
|
48aafa9834 | ||
|
|
78f53f294a | ||
|
|
3158c7e3eb | ||
|
|
47d27ebf31 | ||
|
|
bc3773ae75 | ||
|
|
d8ddd27d71 | ||
|
|
8d5696507a | ||
|
|
9ec376a228 | ||
|
|
a05a0da9fb | ||
|
|
5029ad9d93 | ||
|
|
1444be665c | ||
|
|
3dedb94bdc | ||
|
|
c0f6c15a80 | ||
|
|
00626a4893 | ||
|
|
b416a59bb7 | ||
|
|
bf96fb2214 | ||
|
|
2e79c8d770 | ||
|
|
6c9d1c4953 | ||
|
|
df8df192d3 | ||
|
|
e5f43462c8 | ||
|
|
1867a3e040 | ||
|
|
6818f98de3 | ||
|
|
f910c76248 | ||
|
|
975cbf0bf8 | ||
|
|
f10b3cef01 | ||
|
|
ad39c94773 | ||
|
|
f189ab30e5 | ||
|
|
0ad18ee971 | ||
|
|
501f5de55a | ||
|
|
0b18ae8ff2 | ||
|
|
de12970486 | ||
|
|
7550b99aaa | ||
|
|
ed5a43966d | ||
|
|
95ea6703f1 | ||
|
|
55f9092aa6 | ||
|
|
5f50a46603 | ||
|
|
c5e6704530 | ||
|
|
8552192894 | ||
|
|
0261d16140 | ||
|
|
2b414526e5 | ||
|
|
c0b7eb526a | ||
|
|
7b7196a8c4 | ||
|
|
f648289035 | ||
|
|
8a0b1d548d | ||
|
|
1f17d5d11e | ||
|
|
18efd09421 | ||
|
|
18d3b30647 | ||
|
|
7f0243b2df | ||
|
|
33610c8997 | ||
|
|
8e0a1f4f70 | ||
|
|
b07cf6bdde | ||
|
|
7ed218ee7f | ||
|
|
3aedeea220 | ||
|
|
4f9b7b2609 | ||
|
|
09abab1b5d | ||
|
|
499713c8e7 | ||
|
|
cb953a1619 | ||
|
|
3ab4938f3d | ||
|
|
f6e9fd9f3a | ||
|
|
8dab75f3cb | ||
|
|
b36096e54d | ||
|
|
0574de4a29 | ||
|
|
6d6bc3de76 | ||
|
|
5c4c3cf59c | ||
|
|
0033c8864e | ||
|
|
e7c749ee3a | ||
|
|
5c026be0cd | ||
|
|
c465546871 | ||
|
|
3322677d32 | ||
|
|
76cf0ebb01 | ||
|
|
d34a0cca30 | ||
|
|
a77a916fcc | ||
|
|
e1ebb96545 | ||
|
|
d85a6bec43 | ||
|
|
78eb7787e9 | ||
|
|
b55ce30b2d | ||
|
|
14050cf096 | ||
|
|
5930128b7f | ||
|
|
08be78fa35 | ||
|
|
88f43d9a91 | ||
|
|
6cbf960dea | ||
|
|
374d34f76d | ||
|
|
cc486c2dc7 | ||
|
|
724dce07a9 | ||
|
|
1486e2063b | ||
|
|
50c9649b23 | ||
|
|
339a54b0ac | ||
|
|
b97afb85a1 | ||
|
|
15da9d580b | ||
|
|
62aed496cc | ||
|
|
fba131936a | ||
|
|
70601a4560 | ||
|
|
83604ecb6d | ||
|
|
b912f7072c | ||
|
|
7e7e468408 | ||
|
|
748c97f6c1 | ||
|
|
a3aab57cf8 | ||
|
|
5548e26dd9 | ||
|
|
89d2f07c03 | ||
|
|
f42a28f34f | ||
|
|
bdc753f03c | ||
|
|
68a7b540c5 | ||
|
|
b2dd820507 | ||
|
|
612308eb9a | ||
|
|
98dc7b853a | ||
|
|
a2fefd6fb6 | ||
|
|
17a0382283 | ||
|
|
eea5784527 | ||
|
|
1aff2cf9eb | ||
|
|
4fc6349824 | ||
|
|
7a3921eace | ||
|
|
e99599c377 | ||
|
|
e1f6366a00 | ||
|
|
182b01ac2f | ||
|
|
18f3914428 | ||
|
|
bd0a045da3 | ||
|
|
9a4bed8c67 | ||
|
|
ae0cf692cd | ||
|
|
2ca7d139fe | ||
|
|
7e67505dfb | ||
|
|
21100de85d | ||
|
|
d8f799f8b4 | ||
|
|
cb03a98113 | ||
|
|
4b36a11dda | ||
|
|
8099490213 | ||
|
|
6cb2843707 | ||
|
|
e831f0561a | ||
|
|
d57c253b19 | ||
|
|
c8c68ea7d9 | ||
|
|
150fe730bd | ||
|
|
8af425d067 | ||
|
|
c3845abd2a | ||
|
|
eba6820ec6 | ||
|
|
822e40bc1f | ||
|
|
3ffcaae122 | ||
|
|
42a30b4521 | ||
|
|
377ed9e8e5 | ||
|
|
be76fe61d8 | ||
|
|
07ba7a8d9e | ||
|
|
2be3e3b43c | ||
|
|
49bf190895 | ||
|
|
c9a53bdaca | ||
|
|
3a76a111d3 | ||
|
|
e59c7ac34a | ||
|
|
f05b9ae365 | ||
|
|
c60e5a65d6 | ||
|
|
1b4eda713f | ||
|
|
cb133ced80 | ||
|
|
062a3028f4 | ||
|
|
682c2631f0 | ||
|
|
faecb9a439 | ||
|
|
5dc40f3c03 | ||
|
|
569e87847f | ||
|
|
b448315f20 | ||
|
|
2c87ce06eb | ||
|
|
875091a1ce | ||
|
|
5ad7716137 | ||
|
|
8c97399cec | ||
|
|
27e0a9d3b6 | ||
|
|
07f9b287e7 | ||
|
|
fbee4f1b37 | ||
|
|
26542f3d6e | ||
|
|
14630fe956 | ||
|
|
30f5c761d9 | ||
|
|
365abaaa8f | ||
|
|
f4681a282c | ||
|
|
8a14d9ac26 | ||
|
|
0ab1986202 | ||
|
|
e11dc680de | ||
|
|
71249334c3 | ||
|
|
fa41dbce16 | ||
|
|
4246e6c900 | ||
|
|
1b421a24b0 | ||
|
|
9cc9eead52 | ||
|
|
8b21aea9c7 | ||
|
|
4f87cb6446 | ||
|
|
7525de1a72 | ||
|
|
78d2fa7520 | ||
|
|
7fe8122499 | ||
|
|
532c2e7450 | ||
|
|
b391a53c6b | ||
|
|
f3c6346b95 | ||
|
|
dd8984314f | ||
|
|
b82c3f41d3 | ||
|
|
7d6eb65776 | ||
|
|
dc0800e7e1 | ||
|
|
c151366952 | ||
|
|
212137ec3e | ||
|
|
31f36935d3 | ||
|
|
a14fc3e3c9 | ||
|
|
158b3c43f8 | ||
|
|
e31c1e33d9 | ||
|
|
25dfa6d34d | ||
|
|
431429a29c | ||
|
|
d4c8cc28a1 | ||
|
|
ce08405c00 | ||
|
|
da29185b7d | ||
|
|
87feb8c250 | ||
|
|
12797893df | ||
|
|
6d47e43ba9 | ||
|
|
f6b1643378 | ||
|
|
f1c16df63b | ||
|
|
c16e5231f4 | ||
|
|
2365c253dd |
@@ -7,6 +7,60 @@ Key:
|
|||||||
! Change
|
! Change
|
||||||
- Removal
|
- Removal
|
||||||
|
|
||||||
|
Version 1.4.06-dev
|
||||||
|
+ Added "Ice Fishing" ability to Fishing
|
||||||
|
+ Added global scoreboards to track skill rankings (display using /mctop)
|
||||||
|
+ Added per-player scoreboard displays for the /inspect, /mcrank, /mcstats, and /<skillname> commands
|
||||||
|
+ Added tab-complete support for all commands
|
||||||
|
+ Added ability to configure drops from Shake in treasures.yml
|
||||||
|
+ Added "Master Angler" ability to Fishing.
|
||||||
|
+ Added health display for mobs during combat.
|
||||||
|
+ Added new API method to McMMOPlayerLevelUpEvent to set levels gained
|
||||||
|
+ Added new permission node for /ptp; mcmmo.commands.ptp.send (enabled by default)
|
||||||
|
+ Added configurable cooldown and warmup times when using /ptp
|
||||||
|
+ Added a new Party item share category "Misc" which contains a list of configurable items. (By default all tools and armor)
|
||||||
|
+ Added fishing exploit prevention
|
||||||
|
+ Added permission node to bypass the fishing exploit prevention
|
||||||
|
+ Added boosts to Fishing chance depending on conditions
|
||||||
|
+ Added McMMOAbilityActivateEvent and McMMOAbilityDeactivateEvent
|
||||||
|
+ Added config option to toggle the size of fireworks
|
||||||
|
+ Added config option to multiply xp gains from mob spawner mobs
|
||||||
|
+ Added multiplier to Archery XP based on bow force
|
||||||
|
+ Added information about /party itemshare and /party expshare to the party help page
|
||||||
|
+ Added option to use scoreboards for power level display instead of Spout.
|
||||||
|
= Fixed bug where custom Spout titles were overwritten by mcMMO.
|
||||||
|
= Fixed bug where Nether Quartz wasn't included in Smelting or item sharing
|
||||||
|
= Fixed bug where players were able to join the same party multiple times
|
||||||
|
= Fixed displaying partial names when trying to use /ptp
|
||||||
|
= Fixed wolves from Call of the Wild only having 8 health
|
||||||
|
= Fixed bug where /party chat was not working
|
||||||
|
= Fixed bug where experience commands were adding levels to all skills when they shouldn't
|
||||||
|
= Fixed mcmmo.commands.ptp.send not being set by default
|
||||||
|
= Fixed NPE when trying to tab-complete /mctop
|
||||||
|
= Fixed Fishing treasures always having the same enchants
|
||||||
|
= Fixed Smelting returning ink sacs instead of Lapis when double-dropping
|
||||||
|
= Fixed bug where players could remain in party chat after leaving or being kicked from a party.
|
||||||
|
= Fixed bug where non-player arrows couldn't be deflected.
|
||||||
|
= Fixed experience being applied even when the permission for a skill was denied
|
||||||
|
= Fixed possible item duplication bug with infinity bows
|
||||||
|
= Fixed bug with removing players from mySQL database
|
||||||
|
= Fixed bug with empty metadata lists and Smelting
|
||||||
|
= Fixed bug where Blast Mining would drop wrong items
|
||||||
|
= Fixed bug with Blast Mining where the Ability refreshed message was being send too early
|
||||||
|
= Fixed bug where the chance of a successful Gracefull Roll was twice as high as displayed
|
||||||
|
! Changed Spout notification tiers to be stored in SpoutConfig instead of AdvancedConfig
|
||||||
|
! Changed Berserk to add items to inventory rather than denying pickup
|
||||||
|
! Changed Call of the Wild, newly summoned pet's will have a custom name. (added permission node to disable this)
|
||||||
|
! Changed Chimaera Wing's recipe result to use the ingredient Material
|
||||||
|
! Changed Repair to ask a confirmation of the player when he tries to repair an enchanted item
|
||||||
|
! Players will no longer pickup items to their hotbar while using Unarmed
|
||||||
|
! ExperienceAPI methods will now throw InvalidSkillException if the skill name passed in is invalid.
|
||||||
|
! Changed default value for recently-hurt cooldown between teleports, this is also fully configurable now
|
||||||
|
! Changed the amount of info messages in the console when enabling/disabling, enable Verbose_Logging to enable them again
|
||||||
|
! Items dropped by players are now being tracked and are not being shared with party members
|
||||||
|
! Optimized tracking of tool & ability cooldowns.
|
||||||
|
! Updated the localization files
|
||||||
|
|
||||||
Version 1.4.05
|
Version 1.4.05
|
||||||
+ Added option to allow refreshing of chunks after block-breaking abilities. (Disabled by default)
|
+ Added option to allow refreshing of chunks after block-breaking abilities. (Disabled by default)
|
||||||
+ Added fireworks effects when a player levels-up, for every 100 levels (configurable)
|
+ Added fireworks effects when a player levels-up, for every 100 levels (configurable)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ mcMMO is currently developed by a team of individuals from all over the world.
|
|||||||
(https://github.com/shatteredbeam)
|
(https://github.com/shatteredbeam)
|
||||||
[]
|
[]
|
||||||
(https://github.com/TfT-02)
|
(https://github.com/TfT-02)
|
||||||
[]
|
[]
|
||||||
(https://github.com/t00thpick1)
|
(https://github.com/t00thpick1)
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|||||||
6
pom.xml
6
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.05</version>
|
<version>1.4.06-dev6</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>
|
||||||
@@ -177,4 +177,8 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
<ciManagement>
|
||||||
|
<system>Jenkins</system>
|
||||||
|
<url>ci.mcmmo.org</url>
|
||||||
|
</ciManagement>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -48,4 +48,36 @@ public final class AbilityAPI {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void resetCooldowns(Player player) {
|
||||||
|
UserManager.getPlayer(player).getProfile().resetCooldowns();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBerserkCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.BERSERK, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setGigaDrillBreakerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GIGA_DRILL_BREAKER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setGreenTerraCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GREEN_TERRA, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSerratedStrikesCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SERRATED_STRIKES, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSkullSplitterCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SKULL_SPLITTER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSuperBreakerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SUPER_BREAKER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setTreeFellerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.TREE_FELLER, cooldown);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.gmail.nossr50.api;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.chat.ChatManager;
|
import com.gmail.nossr50.chat.ChatManager;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -22,7 +23,7 @@ public final class ChatAPI {
|
|||||||
* @param message The message to send
|
* @param message The message to send
|
||||||
*/
|
*/
|
||||||
public static void sendPartyChat(Plugin plugin, String sender, String displayName, String party, String message) {
|
public static void sendPartyChat(Plugin plugin, String sender, String displayName, String party, String message) {
|
||||||
ChatManager.handlePartyChat(plugin, PartyManager.getParty(party), sender, displayName, message);
|
ChatManager.handlePartyChat(plugin, mcMMO.getPartyManager().getParty(party), sender, displayName, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +37,7 @@ public final class ChatAPI {
|
|||||||
* @param message The message to send
|
* @param message The message to send
|
||||||
*/
|
*/
|
||||||
public static void sendPartyChat(Plugin plugin, String sender, String party, String message) {
|
public static void sendPartyChat(Plugin plugin, String sender, String party, String message) {
|
||||||
ChatManager.handlePartyChat(plugin, PartyManager.getParty(party), sender, sender, message);
|
ChatManager.handlePartyChat(plugin, mcMMO.getPartyManager().getParty(party), sender, sender, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -138,7 +139,7 @@ public final class ChatAPI {
|
|||||||
*
|
*
|
||||||
* @param playerName The name of the player to toggle party chat on.
|
* @param playerName The name of the player to toggle party chat on.
|
||||||
*/
|
*/
|
||||||
public static void toggleAdminChat(String playerName){
|
public static void toggleAdminChat(String playerName) {
|
||||||
UserManager.getPlayer(playerName).setAdminChat(!isUsingAdminChat(playerName));
|
UserManager.getPlayer(playerName).setAdminChat(!isUsingAdminChat(playerName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import java.util.Set;
|
|||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
|
||||||
|
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
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;
|
||||||
@@ -21,9 +23,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to add XP to
|
* @param player The player to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void addRawXP(Player player, String skillType, int XP) {
|
public static void addRawXP(Player player, String skillType, int XP) {
|
||||||
UserManager.getPlayer(player).applyXpGain(SkillType.getSkill(skillType), XP);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).applyXpGain(skill, XP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,10 +45,17 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
||||||
addOfflineXP(playerName, skillType, XP);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
addOfflineXP(playerName, skill, XP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,9 +66,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to add XP to
|
* @param player The player to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
||||||
UserManager.getPlayer(player).applyXpGain(SkillType.getSkill(skillType), (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,10 +88,17 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
||||||
addOfflineXP(playerName, skillType, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
addOfflineXP(playerName, skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,11 +109,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to add XP to
|
* @param player The player to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void addModifiedXP(Player player, String skillType, int XP) {
|
public static void addModifiedXP(Player player, String skillType, int XP) {
|
||||||
SkillType skill = SkillType.getSkill(skillType);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,10 +131,17 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
||||||
addOfflineXP(playerName, skillType, (int) (XP / SkillType.getSkill(skillType).getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
addOfflineXP(playerName, skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,9 +152,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to add XP to
|
* @param player The player to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void addXP(Player player, String skillType, int XP) {
|
public static void addXP(Player player, String skillType, int XP) {
|
||||||
UserManager.getPlayer(player).beginXpGain(SkillType.getSkill(skillType), XP);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).beginXpGain(skill, XP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,9 +173,22 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to get XP for
|
* @param player The player to get XP for
|
||||||
* @param skillType The skill to get XP for
|
* @param skillType The skill to get XP for
|
||||||
* @return the amount of XP in a given skill
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static int getXP(Player player, String skillType) {
|
public static int getXP(Player player, String skillType) {
|
||||||
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,23 +199,157 @@ public final class ExperienceAPI {
|
|||||||
* @param playerName The player to get XP for
|
* @param playerName The player to get XP for
|
||||||
* @param skillType The skill to get XP for
|
* @param skillType The skill to get XP for
|
||||||
* @return the amount of XP in a given skill
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static int getOfflineXP(String playerName, String skillType) {
|
public static int getOfflineXP(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getSkillXpLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillXpLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the amount of XP left before leveling up.
|
* Get the raw amount of XP a player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static float getXPRaw(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillXpLevelRaw(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the raw amount of XP an offline player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static float getOfflineXPRaw(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillXpLevelRaw(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total amount of XP needed to reach the next level.
|
||||||
* </br>
|
* </br>
|
||||||
* This function is designed for API usage.
|
* This function is designed for API usage.
|
||||||
*
|
*
|
||||||
* @param player The player to get the XP amount for
|
* @param player The player to get the XP amount for
|
||||||
* @param skillType The skill to get the XP amount for
|
* @param skillType The skill to get the XP amount for
|
||||||
* @return the amount of XP left before leveling up a specifc skill
|
* @return the total amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static int getXPToNextLevel(Player player, String skillType) {
|
public static int getXPToNextLevel(Player player, String skillType) {
|
||||||
return UserManager.getPlayer(player).getProfile().getXpToLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getXpToLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total amount of XP an offline player needs to reach the next level.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the total amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getXpToLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of XP remaining until the next level.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get the XP amount for
|
||||||
|
* @param skillType The skill to get the XP amount for
|
||||||
|
* @return the amount of XP remaining until the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getXPRemaining(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
|
||||||
|
|
||||||
|
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -159,11 +359,26 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @param playerName The player to get XP for
|
* @param playerName The player to get XP for
|
||||||
* @param skillType The skill to get XP for
|
* @param skillType The skill to get XP for
|
||||||
* @return the amount of XP in a given skill
|
* @return the amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
public static int getOfflineXPRemaining(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getXpToLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
|
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,9 +389,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to add levels to
|
* @param player The player to add levels to
|
||||||
* @param skillType Type of skill to add levels to
|
* @param skillType Type of skill to add levels to
|
||||||
* @param levels Number of levels to add
|
* @param levels Number of levels to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void addLevel(Player player, String skillType, int levels) {
|
public static void addLevel(Player player, String skillType, int levels) {
|
||||||
UserManager.getPlayer(player).getProfile().addLevels(SkillType.getSkill(skillType), levels);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().addLevels(skill, levels);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -188,13 +411,17 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType Type of skill to add levels to
|
* @param skillType Type of skill to add levels to
|
||||||
* @param levels Number of levels to add
|
* @param levels Number of levels to add
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
SkillType skill = SkillType.getSkill(skillType);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
if (skill.isChildSkill()) {
|
if (skill.isChildSkill()) {
|
||||||
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||||
|
|
||||||
@@ -218,9 +445,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to get the level for
|
* @param player The player to get the level for
|
||||||
* @param skillType The skill to get the level for
|
* @param skillType The skill to get the level for
|
||||||
* @return the level of a given skill
|
* @return the level of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static int getLevel(Player player, String skillType) {
|
public static int getLevel(Player player, String skillType) {
|
||||||
return UserManager.getPlayer(player).getProfile().getSkillLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,10 +466,18 @@ public final class ExperienceAPI {
|
|||||||
* @param playerName The player to get the level for
|
* @param playerName The player to get the level for
|
||||||
* @param skillType The skill to get the level for
|
* @param skillType The skill to get the level for
|
||||||
* @return the level of a given skill
|
* @return the level of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static int getLevelOffline(String playerName, String skillType) {
|
public static int getLevelOffline(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getSkillLevel(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillLevel(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -256,17 +499,14 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @param playerName The player to get the power level for
|
* @param playerName The player to get the power level for
|
||||||
* @return the power level of the player
|
* @return the power level of the player
|
||||||
|
*
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static int getPowerLevelOffline(String playerName) {
|
public static int getPowerLevelOffline(String playerName) {
|
||||||
int powerLevel = 0;
|
int powerLevel = 0;
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
for (SkillType type : SkillType.values()) {
|
for (SkillType type : SkillType.nonChildSkills()) {
|
||||||
if (type.isChildSkill()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
powerLevel += profile.getSkillLevel(type);
|
powerLevel += profile.getSkillLevel(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,9 +520,17 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @param skillType The skill to get the level cap for
|
* @param skillType The skill to get the level cap for
|
||||||
* @return the level cap of a given skill
|
* @return the level cap of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static int getLevelCap(String skillType) {
|
public static int getLevelCap(String skillType) {
|
||||||
return Config.getInstance().getLevelCap(SkillType.getSkill(skillType));
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Config.getInstance().getLevelCap(skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -290,7 +538,7 @@ public final class ExperienceAPI {
|
|||||||
* </br>
|
* </br>
|
||||||
* This function is designed for API usage.
|
* This function is designed for API usage.
|
||||||
*
|
*
|
||||||
* @return the power level cap of a given skill
|
* @return the overall power level cap
|
||||||
*/
|
*/
|
||||||
public static int getPowerLevelCap() {
|
public static int getPowerLevelCap() {
|
||||||
return Config.getInstance().getPowerLevelCap();
|
return Config.getInstance().getPowerLevelCap();
|
||||||
@@ -304,9 +552,17 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to set the level of
|
* @param player The player to set the level of
|
||||||
* @param skillType The skill to set the level for
|
* @param skillType The skill to set the level for
|
||||||
* @param skillLevel The value to set the level to
|
* @param skillLevel The value to set the level to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
public static void setLevel(Player player, String skillType, int skillLevel) {
|
public static void setLevel(Player player, String skillType, int skillLevel) {
|
||||||
UserManager.getPlayer(player).getProfile().modifySkill(SkillType.getSkill(skillType), skillLevel);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().modifySkill(skill, skillLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -318,10 +574,17 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to set the level for
|
* @param skillType The skill to set the level for
|
||||||
* @param skillLevel The value to set the level to
|
* @param skillLevel The value to set the level to
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
||||||
getOfflineProfile(playerName).modifySkill(SkillType.getSkill(skillType), skillLevel);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).modifySkill(skill, skillLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -332,9 +595,22 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to set the XP of
|
* @param player The player to set the XP of
|
||||||
* @param skillType The skill to set the XP for
|
* @param skillType The skill to set the XP for
|
||||||
* @param newValue The value to set the XP to
|
* @param newValue The value to set the XP to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static void setXP(Player player, String skillType, int newValue) {
|
public static void setXP(Player player, String skillType, int newValue) {
|
||||||
UserManager.getPlayer(player).getProfile().setSkillXpLevel(SkillType.getSkill(skillType), newValue);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillXpLevel(skill, newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -346,10 +622,22 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to set the XP for
|
* @param skillType The skill to set the XP for
|
||||||
* @param newValue The value to set the XP to
|
* @param newValue The value to set the XP to
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
||||||
getOfflineProfile(playerName).setSkillXpLevel(SkillType.getSkill(skillType), newValue);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).setSkillXpLevel(skill, newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -360,9 +648,22 @@ public final class ExperienceAPI {
|
|||||||
* @param player The player to change the XP of
|
* @param player The player to change the XP of
|
||||||
* @param skillType The skill to change the XP for
|
* @param skillType The skill to change the XP for
|
||||||
* @param xp The amount of XP to remove
|
* @param xp The amount of XP to remove
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static void removeXP(Player player, String skillType, int xp) {
|
public static void removeXP(Player player, String skillType, int xp) {
|
||||||
UserManager.getPlayer(player).getProfile().removeXp(SkillType.getSkill(skillType), xp);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().removeXp(skill, xp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -374,10 +675,22 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to change the XP for
|
* @param skillType The skill to change the XP for
|
||||||
* @param xp The amount of XP to remove
|
* @param xp The amount of XP to remove
|
||||||
*
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
||||||
getOfflineProfile(playerName).removeXp(SkillType.getSkill(skillType), xp);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).removeXp(skill, xp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -387,11 +700,9 @@ public final class ExperienceAPI {
|
|||||||
* @param skillType The skill to check
|
* @param skillType The skill to check
|
||||||
* @param XP The amount of XP to award.
|
* @param XP The amount of XP to award.
|
||||||
*/
|
*/
|
||||||
private static void addOfflineXP(String playerName, String skillType, int XP) {
|
private static void addOfflineXP(String playerName, SkillType skill, int XP) {
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
SkillType skill = SkillType.getSkill(skillType);
|
|
||||||
|
|
||||||
if (skill.isChildSkill()) {
|
if (skill.isChildSkill()) {
|
||||||
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -50,7 +53,7 @@ public final class PartyAPI {
|
|||||||
* @return true if the two players are in the same party, false otherwise
|
* @return true if the two players are in the same party, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean inSameParty(Player playera, Player playerb) {
|
public static boolean inSameParty(Player playera, Player playerb) {
|
||||||
return PartyManager.inSameParty(playera, playerb);
|
return mcMMO.getPartyManager().inSameParty(playera, playerb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +64,7 @@ public final class PartyAPI {
|
|||||||
* @return the list of parties.
|
* @return the list of parties.
|
||||||
*/
|
*/
|
||||||
public static List<Party> getParties() {
|
public static List<Party> getParties() {
|
||||||
return PartyManager.getParties();
|
return mcMMO.getPartyManager().getParties();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,7 +76,7 @@ public final class PartyAPI {
|
|||||||
* @param partyName The party to add the player to
|
* @param partyName The party to add the player to
|
||||||
*/
|
*/
|
||||||
public static void addToParty(Player player, String partyName) {
|
public static void addToParty(Player player, String partyName) {
|
||||||
Party party = PartyManager.getParty(partyName);
|
Party party = mcMMO.getPartyManager().getParty(partyName);
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
party = new Party();
|
party = new Party();
|
||||||
@@ -81,7 +84,7 @@ public final class PartyAPI {
|
|||||||
party.setLeader(player.getName());
|
party.setLeader(player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.addToParty(player, UserManager.getPlayer(player), party);
|
mcMMO.getPartyManager().addToParty(player, party);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,7 +95,7 @@ public final class PartyAPI {
|
|||||||
* @param player The player to remove
|
* @param player The player to remove
|
||||||
*/
|
*/
|
||||||
public static void removeFromParty(Player player) {
|
public static void removeFromParty(Player player) {
|
||||||
PartyManager.removeFromParty(player, UserManager.getPlayer(player).getParty());
|
mcMMO.getPartyManager().removeFromParty(player, UserManager.getPlayer(player).getParty());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -104,7 +107,7 @@ public final class PartyAPI {
|
|||||||
* @return the leader of the party
|
* @return the leader of the party
|
||||||
*/
|
*/
|
||||||
public static String getPartyLeader(String partyName) {
|
public static String getPartyLeader(String partyName) {
|
||||||
return PartyManager.getPartyLeader(partyName);
|
return mcMMO.getPartyManager().getPartyLeader(partyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,7 +119,7 @@ public final class PartyAPI {
|
|||||||
* @param player The player to set as leader
|
* @param player The player to set as leader
|
||||||
*/
|
*/
|
||||||
public static void setPartyLeader(String partyName, String player) {
|
public static void setPartyLeader(String partyName, String player) {
|
||||||
PartyManager.setPartyLeader(player, PartyManager.getParty(partyName));
|
mcMMO.getPartyManager().setPartyLeader(player, mcMMO.getPartyManager().getParty(partyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,8 +130,27 @@ public final class PartyAPI {
|
|||||||
* @param player The player to check
|
* @param player The player to check
|
||||||
* @return all the players in the player's party
|
* @return all the players in the player's party
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static List<OfflinePlayer> getOnlineAndOfflineMembers(Player player) {
|
public static List<OfflinePlayer> getOnlineAndOfflineMembers(Player player) {
|
||||||
return PartyManager.getAllMembers(player);
|
List<OfflinePlayer> members = new ArrayList<OfflinePlayer>();
|
||||||
|
|
||||||
|
for (String memberName : mcMMO.getPartyManager().getAllMembers(UserManager.getPlayer(player).getParty())) {
|
||||||
|
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
|
||||||
|
members.add(member);
|
||||||
|
}
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all player names in this player's party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return all the player names in the player's party
|
||||||
|
*/
|
||||||
|
public static LinkedHashSet<String> getMembers(Player player) {
|
||||||
|
return mcMMO.getPartyManager().getAllMembers(UserManager.getPlayer(player).getParty());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -140,7 +162,7 @@ public final class PartyAPI {
|
|||||||
* @return all online players in this party
|
* @return all online players in this party
|
||||||
*/
|
*/
|
||||||
public static List<Player> getOnlineMembers(String partyName) {
|
public static List<Player> getOnlineMembers(String partyName) {
|
||||||
return PartyManager.getOnlineMembers(partyName);
|
return mcMMO.getPartyManager().getOnlineMembers(partyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,6 +174,6 @@ public final class PartyAPI {
|
|||||||
* @return all online players in the player's party
|
* @return all online players in the player's party
|
||||||
*/
|
*/
|
||||||
public static List<Player> getOnlineMembers(Player player) {
|
public static List<Player> getOnlineMembers(Player player) {
|
||||||
return PartyManager.getOnlineMembers(player);
|
return mcMMO.getPartyManager().getOnlineMembers(UserManager.getPlayer(player).getParty().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api.exceptions;
|
||||||
|
|
||||||
public class InvalidPlayerException extends RuntimeException {
|
public class InvalidPlayerException extends RuntimeException {
|
||||||
private static final long serialVersionUID = 907213002618581385L;
|
private static final long serialVersionUID = 907213002618581385L;
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.gmail.nossr50.api.exceptions;
|
||||||
|
|
||||||
|
public class InvalidSkillException extends RuntimeException {
|
||||||
|
private static final long serialVersionUID = 942705284195791157L;
|
||||||
|
|
||||||
|
public InvalidSkillException() {
|
||||||
|
super("That is not a valid skill.");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
public final class ChatManager {
|
public final class ChatManager {
|
||||||
public ChatManager () {}
|
public ChatManager() {}
|
||||||
|
|
||||||
public static void handleAdminChat(Plugin plugin, String playerName, String displayName, String message, boolean isAsync) {
|
public static void handleAdminChat(Plugin plugin, String playerName, String displayName, String message, boolean isAsync) {
|
||||||
McMMOAdminChatEvent chatEvent = new McMMOAdminChatEvent(plugin, playerName, displayName, message, isAsync);
|
McMMOAdminChatEvent chatEvent = new McMMOAdminChatEvent(plugin, playerName, displayName, message, isAsync);
|
||||||
|
|||||||
65
src/main/java/com/gmail/nossr50/commands/KrakenCommand.java
Normal file
65
src/main/java/com/gmail/nossr50/commands/KrakenCommand.java
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class KrakenCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.kraken(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(sender.getName()).getFishingManager().unleashTheKraken();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!Permissions.krakenOthers(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.getFishingManager().unleashTheKraken();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,74 +1,29 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
|
||||||
|
|
||||||
public class McabilityCommand implements CommandExecutor {
|
public class McabilityCommand extends ToggleCommand {
|
||||||
private McMMOPlayer mcMMOPlayer;
|
@Override
|
||||||
private Player player;
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcabilityOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
switch (args.length) {
|
return Permissions.mcability(sender);
|
||||||
case 0:
|
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Permissions.mcability(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
toggleAbilityUse();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
if (!Permissions.mcabilityOthers(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
if (CommandUtils.isOffline(sender, player)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
toggleAbilityUse();
|
|
||||||
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleAbilityUse() {
|
@Override
|
||||||
if (mcMMOPlayer.getAbilityUse()) {
|
protected void applyCommandAction() {
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Ability.Off"));
|
player.sendMessage(LocaleLoader.getString("Commands.Ability." + (mcMMOPlayer.getAbilityUse() ? "Off" : "On")));
|
||||||
}
|
|
||||||
else {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Ability.On"));
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer.toggleAbilityUse();
|
mcMMOPlayer.toggleAbilityUse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,74 +1,29 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
|
||||||
|
|
||||||
public class McgodCommand implements CommandExecutor {
|
public class McgodCommand extends ToggleCommand {
|
||||||
private McMMOPlayer mcMMOPlayer;
|
@Override
|
||||||
private Player player;
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcgodOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
switch (args.length) {
|
return Permissions.mcgod(sender);
|
||||||
case 0:
|
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Permissions.mcgod(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
toggleGodMode();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
if (!Permissions.mcgodOthers(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
if (CommandUtils.isOffline(sender, player)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
toggleGodMode();
|
|
||||||
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleGodMode() {
|
@Override
|
||||||
if (mcMMOPlayer.getGodMode()) {
|
protected void applyCommandAction() {
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.GodMode.Disabled"));
|
player.sendMessage(LocaleLoader.getString("Commands.GodMode." + (mcMMOPlayer.getGodMode() ? "Disabled" : "Enabled")));
|
||||||
}
|
|
||||||
else {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.GodMode.Enabled"));
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer.toggleGodMode();
|
mcMMOPlayer.toggleGodMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
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;
|
||||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.commands.party.PartySubcommandType;
|
import com.gmail.nossr50.commands.party.PartySubcommandType;
|
||||||
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.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.spout.SpoutUtils;
|
||||||
|
|
||||||
public class McmmoCommand implements CommandExecutor {
|
public class McmmoCommand implements CommandExecutor {
|
||||||
@Override
|
@Override
|
||||||
@@ -28,13 +28,13 @@ public class McmmoCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(mcSplit);
|
sender.sendMessage(mcSplit);
|
||||||
|
|
||||||
if (Config.getInstance().getDonateMessageEnabled()) {
|
if (Config.getInstance().getDonateMessageEnabled()) {
|
||||||
if (mcMMO.spoutEnabled && sender instanceof SpoutPlayer) {
|
if (mcMMO.isSpoutEnabled() && sender instanceof Player) {
|
||||||
SpoutPlayer spoutPlayer = (SpoutPlayer) sender;
|
SpoutUtils.sendDonationNotification((Player) sender);
|
||||||
spoutPlayer.sendNotification(LocaleLoader.getString("Spout.Donate"), ChatColor.GREEN + "gjmcferrin@gmail.com", Material.DIAMOND);
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("MOTD.Donate"));
|
||||||
|
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("MOTD.Donate"));
|
|
||||||
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
||||||
@@ -62,52 +62,52 @@ public class McmmoCommand implements CommandExecutor {
|
|||||||
private void displayPartyCommands(CommandSender sender) {
|
private void displayPartyCommands(CommandSender sender) {
|
||||||
if (Permissions.party(sender)) {
|
if (Permissions.party(sender)) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Party.Commands"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.Commands"));
|
||||||
sender.sendMessage("/party create <" + LocaleLoader.getString("Commands.Usage.PartyName") + "> " + LocaleLoader.getString("Commands.Party1"));
|
sender.sendMessage(" /party create <" + LocaleLoader.getString("Commands.Usage.PartyName") + "> " + LocaleLoader.getString("Commands.Party1"));
|
||||||
sender.sendMessage("/party join <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party2"));
|
sender.sendMessage(" /party join <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party2"));
|
||||||
sender.sendMessage("/party quit " + LocaleLoader.getString("Commands.Party.Quit"));
|
sender.sendMessage(" /party quit " + LocaleLoader.getString("Commands.Party.Quit"));
|
||||||
|
|
||||||
if (Permissions.partyChat(sender)) {
|
if (Permissions.partyChat(sender)) {
|
||||||
sender.sendMessage("/party chat " + LocaleLoader.getString("Commands.Party.Toggle"));
|
sender.sendMessage(" /party chat " + LocaleLoader.getString("Commands.Party.Toggle"));
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage("/party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite"));
|
sender.sendMessage(" /party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite"));
|
||||||
sender.sendMessage("/party accept " + LocaleLoader.getString("Commands.Party.Accept"));
|
sender.sendMessage(" /party accept " + LocaleLoader.getString("Commands.Party.Accept"));
|
||||||
|
|
||||||
if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) {
|
if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) {
|
||||||
sender.sendMessage("/party teleport " + LocaleLoader.getString("Commands.Party.Teleport"));
|
sender.sendMessage(" /party teleport " + LocaleLoader.getString("Commands.Party.Teleport"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displayOtherCommands(CommandSender sender) {
|
private void displayOtherCommands(CommandSender sender) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Other"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Other"));
|
||||||
sender.sendMessage("/mcstats " + LocaleLoader.getString("Commands.Stats"));
|
sender.sendMessage(" /mcstats " + LocaleLoader.getString("Commands.Stats"));
|
||||||
sender.sendMessage("/mctop " + LocaleLoader.getString("Commands.Leaderboards"));
|
sender.sendMessage(" /mctop " + LocaleLoader.getString("Commands.Leaderboards"));
|
||||||
|
|
||||||
if (Permissions.skillreset(sender)) {
|
if (Permissions.skillreset(sender)) {
|
||||||
sender.sendMessage("/skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
|
sender.sendMessage(" /skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.mcability(sender)) {
|
if (Permissions.mcability(sender)) {
|
||||||
sender.sendMessage("/mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
|
sender.sendMessage(" /mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.adminChat(sender)) {
|
if (Permissions.adminChat(sender)) {
|
||||||
sender.sendMessage("/adminchat " + LocaleLoader.getString("Commands.AdminToggle"));
|
sender.sendMessage(" /adminchat " + LocaleLoader.getString("Commands.AdminToggle"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.inspect(sender)) {
|
if (Permissions.inspect(sender)) {
|
||||||
sender.sendMessage("/inspect " + LocaleLoader.getString("Commands.Inspect"));
|
sender.sendMessage(" /inspect " + LocaleLoader.getString("Commands.Inspect"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.mmoedit(sender)) {
|
if (Permissions.mmoedit(sender)) {
|
||||||
sender.sendMessage("/mmoedit " + LocaleLoader.getString("Commands.mmoedit"));
|
sender.sendMessage(" /mmoedit " + LocaleLoader.getString("Commands.mmoedit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.mcgod(sender)) {
|
if (Permissions.mcgod(sender)) {
|
||||||
sender.sendMessage("/mcgod " + LocaleLoader.getString("Commands.mcgod"));
|
sender.sendMessage(" /mcgod " + LocaleLoader.getString("Commands.mcgod"));
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.SkillInfo"));
|
sender.sendMessage(" /<skill>" + LocaleLoader.getString("Commands.SkillInfo"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,25 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
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.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class McnotifyCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McnotifyCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
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:
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
|
||||||
if (mcMMOPlayer.useChatNotifications()) {
|
sender.sendMessage(LocaleLoader.getString("Commands.Notifications." + (mcMMOPlayer.useChatNotifications() ? "Off" : "On")));
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Notifications.Off"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Notifications.On"));
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer.toggleChatNotifications();
|
mcMMOPlayer.toggleChatNotifications();
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -29,4 +27,9 @@ public class McnotifyCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,74 +1,33 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
|
||||||
|
|
||||||
public class McrefreshCommand implements CommandExecutor {
|
|
||||||
private McMMOPlayer mcMMOPlayer;
|
|
||||||
private Player player;
|
|
||||||
|
|
||||||
|
public class McrefreshCommand extends ToggleCommand {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
switch (args.length) {
|
return Permissions.mcrefreshOthers(sender);
|
||||||
case 0:
|
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Permissions.mcrefresh(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
refreshPlayer();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
if (!Permissions.mcrefreshOthers(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
if (CommandUtils.isOffline(sender, player)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
refreshPlayer();
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshPlayer() {
|
@Override
|
||||||
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcrefresh(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCommandAction() {
|
||||||
mcMMOPlayer.setRecentlyHurt(0);
|
mcMMOPlayer.setRecentlyHurt(0);
|
||||||
mcMMOPlayer.getProfile().resetCooldowns();
|
mcMMOPlayer.getProfile().resetCooldowns();
|
||||||
mcMMOPlayer.resetToolPrepMode();
|
mcMMOPlayer.resetToolPrepMode();
|
||||||
mcMMOPlayer.resetAbilityMode();
|
mcMMOPlayer.resetAbilityMode();
|
||||||
|
|
||||||
player.setCanPickupItems(true);
|
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
player.sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McscoreboardCommand implements TabExecutor {
|
||||||
|
private static final List<String> SCOREBOARD_TYPES = ImmutableList.of("clear", "rank", "stats", "top");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
clearScoreboard(player);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (args[0].equalsIgnoreCase("clear")) {
|
||||||
|
clearScoreboard(player);
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("rank")) {
|
||||||
|
if (!Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboard(player);
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("stats")) {
|
||||||
|
if (!Config.getInstance().getMcstatsScoreboardsEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerStatsScoreboard(UserManager.getPlayer(player));
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("top")) {
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (!args[0].equalsIgnoreCase("top")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isInt(args[1])) {
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", Math.abs(Integer.parseInt(args[1])));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidSkill(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], 1);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (!args[0].equalsIgnoreCase("top")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidSkill(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidInteger(sender, args[2])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], Math.abs(Integer.parseInt(args[2])));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], SCOREBOARD_TYPES, new ArrayList<String>(SCOREBOARD_TYPES.size()));
|
||||||
|
case 2:
|
||||||
|
if (args[0].equalsIgnoreCase("top")) {
|
||||||
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
}
|
||||||
|
// Fallthrough
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearScoreboard(Player player) {
|
||||||
|
player.setScoreboard(mcMMO.p.getServer().getScoreboardManager().getMainScoreboard());
|
||||||
|
player.sendMessage("Your scoreboard has been cleared!"); //TODO: Locale
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MobhealthCommand implements TabExecutor {
|
||||||
|
private static final List<String> MOB_HEALTHBAR_TYPES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ArrayList<String> types = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (MobHealthbarType type : MobHealthbarType.values()) {
|
||||||
|
types.add(type.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(types);
|
||||||
|
MOB_HEALTHBAR_TYPES = ImmutableList.copyOf(types);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
PlayerProfile playerProfile = UserManager.getPlayer(sender.getName()).getProfile();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MobHealthbarType type = MobHealthbarType.valueOf(args[0].toUpperCase().trim());
|
||||||
|
playerProfile.setMobHealthbarType(type);
|
||||||
|
sender.sendMessage("Display type changed to: " + type); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
sender.sendMessage("Invalid type!"); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], MOB_HEALTHBAR_TYPES, new ArrayList<String>(MOB_HEALTHBAR_TYPES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class ToggleCommand implements TabExecutor {
|
||||||
|
protected McMMOPlayer mcMMOPlayer;
|
||||||
|
protected Player player;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasSelfPermission(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
applyCommandAction();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!hasOtherPermission(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (CommandUtils.isOffline(sender, player)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
applyCommandAction();
|
||||||
|
sendSuccessMessage(sender);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean hasOtherPermission(CommandSender sender);
|
||||||
|
protected abstract boolean hasSelfPermission(CommandSender sender);
|
||||||
|
protected abstract void applyCommandAction();
|
||||||
|
protected abstract void sendSuccessMessage(CommandSender sender);
|
||||||
|
}
|
||||||
@@ -1,16 +1,23 @@
|
|||||||
package com.gmail.nossr50.commands;
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|
||||||
public class XprateCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class XprateCommand implements TabExecutor {
|
||||||
private double originalRate;
|
private double originalRate;
|
||||||
|
|
||||||
public XprateCommand() {
|
public XprateCommand() {
|
||||||
@@ -75,4 +82,20 @@ public class XprateCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (StringUtils.isInt(args[0])) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||||
|
case 2:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package com.gmail.nossr50.commands.chat;
|
package com.gmail.nossr50.commands.chat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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;
|
||||||
@@ -10,7 +14,9 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
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 {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class ChatCommand implements TabExecutor {
|
||||||
protected ChatMode chatMode;
|
protected ChatMode chatMode;
|
||||||
private McMMOPlayer mcMMOPlayer;
|
private McMMOPlayer mcMMOPlayer;
|
||||||
|
|
||||||
@@ -68,6 +74,16 @@ public abstract class ChatCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected String buildChatMessage(String[] args, int index) {
|
protected String buildChatMessage(String[] args, int index) {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
builder.append(args[index]);
|
builder.append(args[index]);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class PartyChatCommand extends ChatCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Party party = PartyManager.getParty(args[0]);
|
Party party = mcMMO.getPartyManager().getParty(args[0]);
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.InvalidName"));
|
sender.sendMessage(LocaleLoader.getString("Party.InvalidName"));
|
||||||
|
|||||||
@@ -1,38 +1,26 @@
|
|||||||
package com.gmail.nossr50.commands.database;
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.database.DatabaseManager;
|
|
||||||
import com.gmail.nossr50.database.LeaderboardManager;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
|
||||||
|
|
||||||
public class McpurgeCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McpurgeCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (!Permissions.mcpurge(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0:
|
case 0:
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
mcMMO.getDatabaseManager().purgePowerlessUsers();
|
||||||
DatabaseManager.purgePowerlessSQL();
|
|
||||||
|
|
||||||
if (Config.getInstance().getOldUsersCutoff() != -1) {
|
if (Config.getInstance().getOldUsersCutoff() != -1) {
|
||||||
DatabaseManager.purgeOldSQL();
|
mcMMO.getDatabaseManager().purgeOldUsers();
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LeaderboardManager.purgePowerlessFlatfile();
|
|
||||||
|
|
||||||
if (Config.getInstance().getOldUsersCutoff() != -1) {
|
|
||||||
LeaderboardManager.purgeOldFlatfile();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcpurge.Success"));
|
sender.sendMessage(LocaleLoader.getString("Commands.mcpurge.Success"));
|
||||||
@@ -42,4 +30,9 @@ public class McpurgeCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +1,36 @@
|
|||||||
package com.gmail.nossr50.commands.database;
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.database.DatabaseManager;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.database.LeaderboardManager;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class McremoveCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McremoveCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (!Permissions.mcremove(sender)) {
|
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
/* MySQL */
|
if (UserManager.getPlayer(args[0]) == null && CommandUtils.unloadedProfile(sender, new PlayerProfile(args[0], false))) {
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
return true;
|
||||||
String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
}
|
||||||
|
|
||||||
if (DatabaseManager.update("DELETE FROM " + tablePrefix + "users WHERE " + tablePrefix + "users.user = '" + args[0] + "'") != 0) {
|
if (mcMMO.getDatabaseManager().removeUser(args[0])) {
|
||||||
Misc.profileCleanup(args[0]);
|
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (LeaderboardManager.removeFlatFileUser(args[0])) {
|
sender.sendMessage(args[0] + " could not be removed from the database."); // Pretty sure this should NEVER happen.
|
||||||
Misc.profileCleanup(args[0]);
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -49,4 +39,15 @@ public class McremoveCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,25 @@
|
|||||||
package com.gmail.nossr50.commands.database;
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
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.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.database.SQLConversionTask;
|
import com.gmail.nossr50.runnables.database.SQLConversionTask;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class MmoupdateCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MmoupdateCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (!Permissions.mmoupdate(sender)) {
|
if (!Config.getInstance().getUseMySQL()) {
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
sender.sendMessage("SQL Mode is not enabled."); // TODO: Localize
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,7 +28,7 @@ public class MmoupdateCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(LocaleLoader.getString("Commands.mmoupdate.Start"));
|
sender.sendMessage(LocaleLoader.getString("Commands.mmoupdate.Start"));
|
||||||
UserManager.saveAll();
|
UserManager.saveAll();
|
||||||
UserManager.clearAll();
|
UserManager.clearAll();
|
||||||
convertToMySQL();
|
new SQLConversionTask().runTaskLaterAsynchronously(mcMMO.p, 1);
|
||||||
|
|
||||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||||
UserManager.addUser(player);
|
UserManager.addUser(player);
|
||||||
@@ -39,14 +42,8 @@ public class MmoupdateCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Convert FlatFile data to MySQL data.
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
*/
|
return ImmutableList.of();
|
||||||
private void convertToMySQL() {
|
|
||||||
if (!Config.getInstance().getUseMySQL()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
new SQLConversionTask().runTaskLaterAsynchronously(mcMMO.p, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package com.gmail.nossr50.commands.experience;
|
|||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
@@ -21,6 +23,10 @@ public class AddlevelsCommand extends ExperienceCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void handleCommand(SkillType skill) {
|
protected void handleCommand(SkillType skill) {
|
||||||
profile.addLevels(skill, value);
|
profile.addLevels(skill, value);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -31,6 +37,5 @@ public class AddlevelsCommand extends ExperienceCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void handlePlayerMessageSkill() {
|
protected void handlePlayerMessageSkill() {
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, SkillUtils.getSkillName(skill)));
|
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, SkillUtils.getSkillName(skill)));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
package com.gmail.nossr50.commands.experience;
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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;
|
||||||
@@ -13,8 +18,9 @@ import com.gmail.nossr50.util.commands.CommandUtils;
|
|||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public abstract class ExperienceCommand implements CommandExecutor {
|
public abstract class ExperienceCommand implements TabExecutor {
|
||||||
protected McMMOPlayer mcMMOPlayer;
|
protected McMMOPlayer mcMMOPlayer;
|
||||||
protected Player player;
|
protected Player player;
|
||||||
protected PlayerProfile profile;
|
protected PlayerProfile profile;
|
||||||
@@ -45,6 +51,7 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
|||||||
profile = mcMMOPlayer.getProfile();
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
|
||||||
editValues();
|
editValues();
|
||||||
|
allSkills = false;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
@@ -58,7 +65,6 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
player = mcMMOPlayer.getPlayer();
|
|
||||||
|
|
||||||
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
||||||
if (mcMMOPlayer == null) {
|
if (mcMMOPlayer == null) {
|
||||||
@@ -73,10 +79,12 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
profile = mcMMOPlayer.getProfile();
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
editValues();
|
editValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSenderMessage(sender, args[0]);
|
handleSenderMessage(sender, args[0]);
|
||||||
|
allSkills = false;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -84,6 +92,19 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
case 2:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract boolean permissionsCheckSelf(CommandSender sender);
|
protected abstract boolean permissionsCheckSelf(CommandSender sender);
|
||||||
protected abstract boolean permissionsCheckOthers(CommandSender sender);
|
protected abstract boolean permissionsCheckOthers(CommandSender sender);
|
||||||
protected abstract void handleCommand(SkillType skill);
|
protected abstract void handleCommand(SkillType skill);
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package com.gmail.nossr50.commands.experience;
|
|||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
@@ -21,6 +23,10 @@ public class MmoeditCommand extends ExperienceCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void handleCommand(SkillType skill) {
|
protected void handleCommand(SkillType skill) {
|
||||||
profile.modifySkill(skill, value);
|
profile.modifySkill(skill, value);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value - profile.getSkillLevel(skill)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package com.gmail.nossr50.commands.experience;
|
|||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
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.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
@@ -84,13 +86,11 @@ public class SkillresetCommand extends ExperienceCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean permissionsCheckSelf(CommandSender sender) {
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean permissionsCheckOthers(CommandSender sender) {
|
protected boolean permissionsCheckOthers(CommandSender sender) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,6 +102,10 @@ public class SkillresetCommand extends ExperienceCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
profile.modifySkill(skill, 0);
|
profile.modifySkill(skill, 0);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, 0 - profile.getSkillLevel(skill)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
package com.gmail.nossr50.commands.hardcore;
|
package com.gmail.nossr50.commands.hardcore;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|
||||||
public abstract class HardcoreModeCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class HardcoreModeCommand implements TabExecutor {
|
||||||
protected CommandSender sender;
|
protected CommandSender sender;
|
||||||
protected double newPercent;
|
protected double newPercent;
|
||||||
protected DecimalFormat percent;
|
protected DecimalFormat percent;
|
||||||
@@ -76,6 +82,20 @@ public abstract class HardcoreModeCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (StringUtils.isDouble(args[0])) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract boolean checkTogglePermissions();
|
protected abstract boolean checkTogglePermissions();
|
||||||
protected abstract boolean checkModifyPermissions();
|
protected abstract boolean checkModifyPermissions();
|
||||||
protected abstract boolean checkEnabled();
|
protected abstract boolean checkEnabled();
|
||||||
|
|||||||
@@ -5,6 +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.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.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
@@ -24,11 +25,11 @@ public class PartyAcceptCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Changing parties
|
// Changing parties
|
||||||
if (!PartyManager.changeOrJoinParty(mcMMOPlayer, player, mcMMOPlayer.getParty(), mcMMOPlayer.getPartyInvite().getName())) {
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, mcMMOPlayer.getPartyInvite().getName())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.joinInvitedParty(player, mcMMOPlayer);
|
mcMMO.getPartyManager().joinInvitedParty(player);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ public class PartyChangeOwnerCommand implements CommandExecutor {
|
|||||||
case 2:
|
case 2:
|
||||||
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
|
||||||
if (!playerParty.getMembers().contains(mcMMO.p.getServer().getOfflinePlayer(args[1]))) {
|
if (!playerParty.getMembers().contains(args[1])) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.setPartyLeader(args[1], playerParty);
|
mcMMO.getPartyManager().setPartyLeader(args[1], playerParty);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -1,21 +1,46 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
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;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||||
|
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
|
||||||
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;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class PartyCommand implements CommandExecutor {
|
public class PartyCommand implements TabExecutor {
|
||||||
private McMMOPlayer mcMMOPlayer;
|
private McMMOPlayer mcMMOPlayer;
|
||||||
private Player player;
|
private Player player;
|
||||||
|
|
||||||
|
private static final List<String> PARTY_SUBCOMMANDS;
|
||||||
|
private static final List<String> EXPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
|
||||||
|
private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting", "misc");
|
||||||
|
|
||||||
|
static {
|
||||||
|
ArrayList<String> subcommands = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (PartySubcommandType subcommand : PartySubcommandType.values()) {
|
||||||
|
subcommands.add(subcommand.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(subcommands);
|
||||||
|
PARTY_SUBCOMMANDS = ImmutableList.copyOf(subcommands);
|
||||||
|
}
|
||||||
|
|
||||||
private CommandExecutor partyJoinCommand = new PartyJoinCommand();
|
private CommandExecutor partyJoinCommand = new PartyJoinCommand();
|
||||||
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
|
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
|
||||||
private CommandExecutor partyCreateCommand = new PartyCreateCommand();
|
private CommandExecutor partyCreateCommand = new PartyCreateCommand();
|
||||||
@@ -32,7 +57,7 @@ public class PartyCommand implements CommandExecutor {
|
|||||||
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 = mcMMO.p.getCommand("ptp").getExecutor();
|
||||||
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) {
|
||||||
@@ -134,6 +159,57 @@ public class PartyCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], PARTY_SUBCOMMANDS, new ArrayList<String>(PARTY_SUBCOMMANDS.size()));
|
||||||
|
case 2:
|
||||||
|
PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]);
|
||||||
|
|
||||||
|
if (subcommand == null) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (subcommand) {
|
||||||
|
case JOIN:
|
||||||
|
case INVITE:
|
||||||
|
case KICK:
|
||||||
|
case OWNER:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
case EXPSHARE:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], EXPSHARE_COMPLETIONS, new ArrayList<String>(EXPSHARE_COMPLETIONS.size()));
|
||||||
|
case ITEMSHARE:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size()));
|
||||||
|
case LOCK:
|
||||||
|
case CHAT:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
case PASSWORD:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||||
|
case TELEPORT:
|
||||||
|
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
|
if (matches.size() == 0) {
|
||||||
|
playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches;
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
if (PartySubcommandType.getSubcommand(args[0]) == PartySubcommandType.ITEMSHARE && isItemShareCategory(args[1])) {
|
||||||
|
return StringUtil.copyPartialMatches(args[2], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ImmutableList.of();
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean printUsage() {
|
private boolean printUsage() {
|
||||||
player.sendMessage(LocaleLoader.getString("Party.Help.0", "/party join"));
|
player.sendMessage(LocaleLoader.getString("Party.Help.0", "/party join"));
|
||||||
player.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
|
player.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
|
||||||
@@ -150,4 +226,9 @@ public class PartyCommand implements CommandExecutor {
|
|||||||
|
|
||||||
return newArgs;
|
return newArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isItemShareCategory(String category) {
|
||||||
|
return category.equalsIgnoreCase("loot") || category.equalsIgnoreCase("mining") || category.equalsIgnoreCase("herbalism") || category.equalsIgnoreCase("woodcutting") || category.equalsIgnoreCase("misc");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.datatypes.party.Party;
|
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.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
@@ -17,22 +17,20 @@ public class PartyCreateCommand implements CommandExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
Party newParty = PartyManager.getParty(args[1]);
|
|
||||||
|
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
// Check to see if the party exists, and if it does cancel creating a new party
|
// Check to see if the party exists, and if it does cancel creating a new party
|
||||||
if (PartyManager.checkPartyExistence(player, newParty, args[1])) {
|
if (mcMMO.getPartyManager().checkPartyExistence(player, args[1])) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Changing parties
|
// Changing parties
|
||||||
if (!PartyManager.changeOrJoinParty(mcMMOPlayer, player, mcMMOPlayer.getParty(), args[1])) {
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, args[1])) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.createParty(player, mcMMOPlayer, args[1], getPassword(args));
|
mcMMO.getPartyManager().createParty(player, args[1], getPassword(args));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -5,6 +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.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@@ -20,14 +21,14 @@ public class PartyDisbandCommand implements CommandExecutor {
|
|||||||
String partyName = playerParty.getName();
|
String partyName = playerParty.getName();
|
||||||
|
|
||||||
for (Player member : playerParty.getOnlineMembers()) {
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
if (!PartyManager.handlePartyChangeEvent(member, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(member, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
member.sendMessage(LocaleLoader.getString("Party.Disband"));
|
member.sendMessage(LocaleLoader.getString("Party.Disband"));
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.disbandParty(playerParty);
|
mcMMO.getPartyManager().disbandParty(playerParty);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class PartyExpShareCommand implements CommandExecutor {
|
|||||||
handleChangingShareMode(ShareMode.EQUAL);
|
handleChangingShareMode(ShareMode.EQUAL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "[NONE | EQUAL]"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class PartyHelpCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.6", "/party kick"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.6", "/party kick"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party expshare"));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -7,6 +7,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.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
@@ -21,21 +22,28 @@ public class PartyInfoCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
switch (args.length) {
|
||||||
player = mcMMOPlayer.getPlayer();
|
case 0:
|
||||||
playerParty = mcMMOPlayer.getParty();
|
case 1:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
playerParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
displayPartyHeader();
|
displayPartyHeader();
|
||||||
displayShareModeInfo();
|
displayShareModeInfo();
|
||||||
displayMemberInfo();
|
displayMemberInfo();
|
||||||
return true;
|
return true;
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "info"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createMembersList() {
|
private String createMembersList() {
|
||||||
StringBuilder memberList = new StringBuilder();
|
StringBuilder memberList = new StringBuilder();
|
||||||
|
|
||||||
for (OfflinePlayer member : playerParty.getMembers()) {
|
for (String memberName : playerParty.getMembers()) {
|
||||||
String memberName = member.getName();
|
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
|
||||||
|
|
||||||
if (playerParty.getLeader().equalsIgnoreCase(memberName)) {
|
if (playerParty.getLeader().equalsIgnoreCase(memberName)) {
|
||||||
memberList.append(ChatColor.GOLD);
|
memberList.append(ChatColor.GOLD);
|
||||||
@@ -96,7 +104,7 @@ public class PartyInfoCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void displayMemberInfo() {
|
private void displayMemberInfo() {
|
||||||
int membersNear = PartyManager.getNearMembers(player, playerParty, Config.getInstance().getPartyShareRange()).size();
|
int membersNear = mcMMO.getPartyManager().getNearbyPartyMembers(player, Config.getInstance().getPartyShareRange()).size();
|
||||||
int membersOnline = playerParty.getOnlineMembers().size() - 1;
|
int membersOnline = playerParty.getOnlineMembers().size() - 1;
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
|
||||||
|
|||||||
@@ -5,6 +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.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
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;
|
||||||
@@ -32,14 +33,14 @@ public class PartyInviteCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PartyManager.inSameParty(player, target)) {
|
if (mcMMO.getPartyManager().inSameParty(player, target)) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Player.InSameParty", target.getName()));
|
sender.sendMessage(LocaleLoader.getString("Party.Player.InSameParty", target.getName()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Party playerParty = mcMMOPlayer.getParty();
|
Party playerParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
if (!PartyManager.canInvite(player, playerParty)) {
|
if (!mcMMO.getPartyManager().canInvite(player)) {
|
||||||
player.sendMessage(LocaleLoader.getString("Party.Locked"));
|
player.sendMessage(LocaleLoader.getString("Party.Locked"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.ItemShareType;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.party.ShareHandler;
|
|
||||||
import com.gmail.nossr50.party.ShareHandler.ShareMode;
|
import com.gmail.nossr50.party.ShareHandler.ShareMode;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
@@ -27,20 +27,14 @@ public class PartyItemShareCommand implements CommandExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 2:
|
case 2:
|
||||||
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase());
|
||||||
|
|
||||||
if (args[1].equalsIgnoreCase("none") || CommandUtils.shouldDisableToggle(args[1])) {
|
if (mode == null) {
|
||||||
handleChangingShareMode(ShareMode.NONE);
|
|
||||||
}
|
|
||||||
else if (args[1].equalsIgnoreCase("equal") || args[1].equalsIgnoreCase("even")) {
|
|
||||||
handleChangingShareMode(ShareMode.EQUAL);
|
|
||||||
}
|
|
||||||
else if (args[1].equalsIgnoreCase("random")) {
|
|
||||||
handleChangingShareMode(ShareMode.RANDOM);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleChangingShareMode(mode);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
@@ -54,37 +48,27 @@ public class PartyItemShareCommand implements CommandExecutor {
|
|||||||
toggle = false;
|
toggle = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting> <true | false>"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[1].equalsIgnoreCase("loot")) {
|
try {
|
||||||
playerParty.setSharingLootDrops(toggle);
|
handleToggleItemShareCategory(ItemShareType.valueOf(args[1].toUpperCase()), toggle);
|
||||||
}
|
}
|
||||||
else if (args[1].equalsIgnoreCase("mining")) {
|
catch (IllegalArgumentException ex) {
|
||||||
playerParty.setSharingMiningDrops(toggle);
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
}
|
|
||||||
else if (args[1].equalsIgnoreCase("herbalism")) {
|
|
||||||
playerParty.setSharingHerbalismDrops(toggle);
|
|
||||||
}
|
|
||||||
else if (args[1].equalsIgnoreCase("woodcutting")) {
|
|
||||||
playerParty.setSharingWoodcuttingDrops(toggle);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting> <true | false>"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyToggleItemShareCategory(args[1], toggle);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting> <true | false>"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleChangingShareMode(ShareHandler.ShareMode mode) {
|
private void handleChangingShareMode(ShareMode mode) {
|
||||||
playerParty.setItemShareMode(mode);
|
playerParty.setItemShareMode(mode);
|
||||||
|
|
||||||
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Item"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
|
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Item"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
|
||||||
@@ -94,10 +78,10 @@ public class PartyItemShareCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyToggleItemShareCategory(String category, boolean toggle) {
|
private void handleToggleItemShareCategory(ItemShareType type, boolean toggle) {
|
||||||
String state = toggle ? "enabled" : "disabled";
|
playerParty.setSharingDrops(type, toggle);
|
||||||
|
|
||||||
String toggleMessage = LocaleLoader.getString("Commands.Party.ToggleShareCategory", StringUtils.getCapitalized(category), state);
|
String toggleMessage = LocaleLoader.getString("Commands.Party.ToggleShareCategory", StringUtils.getCapitalized(type.toString()), toggle ? "enabled" : "disabled");
|
||||||
|
|
||||||
for (Player member : playerParty.getOnlineMembers()) {
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
member.sendMessage(toggleMessage);
|
member.sendMessage(toggleMessage);
|
||||||
|
|||||||
@@ -5,6 +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.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
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;
|
||||||
@@ -37,16 +38,16 @@ public class PartyJoinCommand implements CommandExecutor {
|
|||||||
String password = getPassword(args);
|
String password = getPassword(args);
|
||||||
|
|
||||||
// Make sure party passwords match
|
// Make sure party passwords match
|
||||||
if (!PartyManager.checkPartyPassword(player, targetParty, password)) {
|
if (!mcMMO.getPartyManager().checkPartyPassword(player, targetParty, password)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Changing parties
|
// Changing parties
|
||||||
if (!PartyManager.changeOrJoinParty(mcMMOPlayer, player, playerParty, targetParty.getName())) {
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, targetParty.getName())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.joinParty(player, mcMMOPlayer, targetParty, password);
|
mcMMO.getPartyManager().joinParty(player, targetParty, password);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class PartyKickCommand implements CommandExecutor {
|
|||||||
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(args[1]);
|
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(args[1]);
|
||||||
|
|
||||||
if (!playerParty.getMembers().contains(target)) {
|
if (!playerParty.getMembers().contains(target.getName())) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -30,14 +30,14 @@ public class PartyKickCommand implements CommandExecutor {
|
|||||||
Player onlineTarget = target.getPlayer();
|
Player onlineTarget = target.getPlayer();
|
||||||
String partyName = playerParty.getName();
|
String partyName = playerParty.getName();
|
||||||
|
|
||||||
if (!PartyManager.handlePartyChangeEvent(onlineTarget, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(onlineTarget, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
onlineTarget.sendMessage(LocaleLoader.getString("Commands.Party.Kick", partyName));
|
onlineTarget.sendMessage(LocaleLoader.getString("Commands.Party.Kick", partyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.removeFromParty(target, playerParty);
|
mcMMO.getPartyManager().removeFromParty(target, playerParty);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -5,6 +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.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@@ -19,11 +20,11 @@ public class PartyQuitCommand implements CommandExecutor {
|
|||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
Party playerParty = UserManager.getPlayer(player).getParty();
|
Party playerParty = UserManager.getPlayer(player).getParty();
|
||||||
|
|
||||||
if (!PartyManager.handlePartyChangeEvent(player, playerParty.getName(), null, EventReason.LEFT_PARTY)) {
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(player, playerParty.getName(), null, EventReason.LEFT_PARTY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.removeFromParty(player, playerParty);
|
mcMMO.getPartyManager().removeFromParty(player, playerParty);
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Party.Leave"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.Leave"));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +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.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
@@ -30,17 +31,16 @@ public class PartyRenameCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
Party newParty = PartyManager.getParty(newPartyName);
|
|
||||||
|
|
||||||
// Check to see if the party exists, and if it does cancel renaming the party
|
// Check to see if the party exists, and if it does cancel renaming the party
|
||||||
if (PartyManager.checkPartyExistence(player, newParty, newPartyName)) {
|
if (mcMMO.getPartyManager().checkPartyExistence(player, newPartyName)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
String leaderName = playerParty.getLeader();
|
String leaderName = playerParty.getLeader();
|
||||||
|
|
||||||
for (Player member : playerParty.getOnlineMembers()) {
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
if (!PartyManager.handlePartyChangeEvent(member, oldPartyName, newPartyName, EventReason.CHANGED_PARTIES)) {
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(member, oldPartyName, newPartyName, EventReason.CHANGED_PARTIES)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class PtpAcceptCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PtpCommand.handlePartyTeleportEvent(target, player);
|
PtpCommand.handleTeleportWarmup(target, player);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package com.gmail.nossr50.commands.party.teleport;
|
package com.gmail.nossr50.commands.party.teleport;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
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;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
@@ -11,14 +17,20 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.runnables.items.TeleportationWarmup;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class PtpCommand implements CommandExecutor {
|
public class PtpCommand implements TabExecutor {
|
||||||
private static Player target;
|
private static Player target;
|
||||||
private static McMMOPlayer mcMMOTarget;
|
private static McMMOPlayer mcMMOTarget;
|
||||||
|
|
||||||
|
public static final List<String> TELEPORT_SUBCOMMANDS = ImmutableList.of("toggle", "accept", "acceptany", "acceptall");
|
||||||
|
|
||||||
private CommandExecutor ptpToggleCommand = new PtpToggleCommand();
|
private CommandExecutor ptpToggleCommand = new PtpToggleCommand();
|
||||||
private CommandExecutor ptpAcceptAnyCommand = new PtpAcceptAnyCommand();
|
private CommandExecutor ptpAcceptAnyCommand = new PtpAcceptAnyCommand();
|
||||||
private CommandExecutor ptpAcceptCommand = new PtpAcceptCommand();
|
private CommandExecutor ptpAcceptCommand = new PtpAcceptCommand();
|
||||||
@@ -42,18 +54,39 @@ public class PtpCommand implements CommandExecutor {
|
|||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
|
|
||||||
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||||
|
int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
|
||||||
|
|
||||||
if (((recentlyHurt * Misc.TIME_CONVERSION_FACTOR) + (ptpCooldown * Misc.TIME_CONVERSION_FACTOR)) > System.currentTimeMillis()) {
|
if (hurtCooldown > 0) {
|
||||||
player.sendMessage(LocaleLoader.getString("Party.Teleport.Hurt", ptpCooldown));
|
int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
|
||||||
return true;
|
|
||||||
|
if (timeRemaining > 0) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("accept")) {
|
if (args[0].equalsIgnoreCase("accept")) {
|
||||||
return ptpAcceptCommand.onCommand(sender, command, label, args);
|
return ptpAcceptCommand.onCommand(sender, command, label, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Permissions.partyTeleportSend(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
|
||||||
|
long lastTeleport = mcMMOPlayer.getLastTeleport();
|
||||||
|
|
||||||
|
if (ptpCooldown > 0) {
|
||||||
|
int timeRemaining = SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player);
|
||||||
|
|
||||||
|
if (timeRemaining > 0) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", timeRemaining));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sendTeleportRequest(sender, player, args[0]);
|
sendTeleportRequest(sender, player, args[0]);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -62,13 +95,30 @@ public class PtpCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
List<String> matches = StringUtil.copyPartialMatches(args[0], TELEPORT_SUBCOMMANDS, new ArrayList<String>(TELEPORT_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
|
if (matches.size() == 0) {
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches;
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void sendTeleportRequest(CommandSender sender, Player player, String targetName) {
|
private void sendTeleportRequest(CommandSender sender, Player player, String targetName) {
|
||||||
if (!canTeleport(sender, player, targetName)) {
|
if (!canTeleport(sender, player, targetName)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mcMMOTarget.getPtpConfirmRequired()) {
|
if (!mcMMOTarget.getPtpConfirmRequired()) {
|
||||||
handlePartyTeleportEvent(player, target);
|
handleTeleportWarmup(player, target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,13 +139,14 @@ public class PtpCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
target = mcMMOTarget.getPlayer();
|
target = mcMMOTarget.getPlayer();
|
||||||
|
targetName = target.getName();
|
||||||
|
|
||||||
if (player.equals(target)) {
|
if (player.equals(target)) {
|
||||||
player.sendMessage(LocaleLoader.getString("Party.Teleport.Self"));
|
player.sendMessage(LocaleLoader.getString("Party.Teleport.Self"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PartyManager.inSameParty(player, target)) {
|
if (!mcMMO.getPartyManager().inSameParty(player, target)) {
|
||||||
player.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
|
player.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -113,7 +164,24 @@ public class PtpCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
|
protected static void handleTeleportWarmup(Player teleportingPlayer, Player targetPlayer) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||||
|
mcMMOTarget = UserManager.getPlayer(targetPlayer);
|
||||||
|
|
||||||
|
long warmup = Config.getInstance().getPTPCommandWarmup();
|
||||||
|
|
||||||
|
mcMMOPlayer.actualizeTeleportCommenceLocation(teleportingPlayer);
|
||||||
|
|
||||||
|
if (warmup > 0) {
|
||||||
|
teleportingPlayer.sendMessage(LocaleLoader.getString("Teleport.Commencing", warmup));
|
||||||
|
new TeleportationWarmup(mcMMOPlayer, mcMMOTarget).runTaskLater(mcMMO.p, 20 * warmup);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||||
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
|
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
package com.gmail.nossr50.commands.player;
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import java.util.ArrayList;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import java.util.List;
|
||||||
import org.bukkit.command.CommandSender;
|
import java.util.Set;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
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;
|
||||||
@@ -12,12 +18,19 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
|
||||||
public class InspectCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class InspectCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
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 1:
|
case 1:
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
}
|
||||||
|
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(args[0]);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
||||||
@@ -28,6 +41,11 @@ public class InspectCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.enablePlayerInspectScoreboardOffline((Player) sender, profile);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Inspect.OfflineStats", args[0]));
|
sender.sendMessage(LocaleLoader.getString("Inspect.OfflineStats", args[0]));
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Stats.Header.Gathering"));
|
sender.sendMessage(LocaleLoader.getString("Stats.Header.Gathering"));
|
||||||
@@ -55,6 +73,11 @@ public class InspectCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.enablePlayerInspectScoreboardOnline((Player) sender, mcMMOPlayer);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Inspect.Stats", target.getName()));
|
sender.sendMessage(LocaleLoader.getString("Inspect.Stats", target.getName()));
|
||||||
CommandUtils.printGatheringSkills(target, sender);
|
CommandUtils.printGatheringSkills(target, sender);
|
||||||
CommandUtils.printCombatSkills(target, sender);
|
CommandUtils.printCombatSkills(target, sender);
|
||||||
@@ -68,4 +91,15 @@ public class InspectCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,27 @@
|
|||||||
package com.gmail.nossr50.commands.player;
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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.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.locale.LocaleLoader;
|
|
||||||
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
|
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class McrankCommand implements CommandExecutor {
|
public class McrankCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
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) {
|
||||||
@@ -31,11 +35,12 @@ public class McrankCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
if (Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
sqlDisplay(sender, sender.getName());
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboard((Player) sender);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
flatfileDisplay(sender, sender.getName());
|
display(sender, sender.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -55,18 +60,18 @@ public class McrankCommand implements CommandExecutor {
|
|||||||
if (CommandUtils.tooFar(sender, mcMMOPlayer.getPlayer(), Permissions.mcrankFar(sender))) {
|
if (CommandUtils.tooFar(sender, mcMMOPlayer.getPlayer(), Permissions.mcrankFar(sender))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if (CommandUtils.inspectOffline(sender, new PlayerProfile(playerName, false), Permissions.mcrankOffline(sender))) {
|
else if (CommandUtils.inspectOffline(sender, new PlayerProfile(playerName, false), Permissions.mcrankOffline(sender))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
if (sender instanceof Player && Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
sqlDisplay(sender, playerName);
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboardOthers((Player) sender, playerName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
flatfileDisplay(sender, playerName);
|
display(sender, playerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -74,39 +79,18 @@ public class McrankCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void flatfileDisplay(CommandSender sender, String playerName) {
|
@Override
|
||||||
LeaderboardManager.updateLeaderboards(); // Make sure the information is up to date
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Heading"));
|
case 1:
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Player", playerName));
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
for (SkillType skillType : SkillType.values()) {
|
default:
|
||||||
int[] rankInts = LeaderboardManager.getPlayerRank(playerName, skillType);
|
return ImmutableList.of();
|
||||||
|
|
||||||
if (!Permissions.skillEnabled(sender, skillType) || skillType.isChildSkill()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rankInts[1] == 0) {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skillType), LocaleLoader.getString("Commands.mcrank.Unranked"))); // Don't bother showing ranking for players without skills
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skillType), rankInts[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show the powerlevel ranking
|
|
||||||
int[] rankInts = LeaderboardManager.getPlayerRank(playerName);
|
|
||||||
|
|
||||||
if (rankInts[1] == 0) {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Overall", LocaleLoader.getString("Commands.mcrank.Unranked"))); // Don't bother showing ranking for players without skills
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Overall", rankInts[0]));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sqlDisplay(CommandSender sender, String playerName) {
|
private void display(CommandSender sender, String playerName) {
|
||||||
new McrankCommandAsyncTask(playerName, sender).runTaskAsynchronously(mcMMO.p);
|
new McrankCommandAsyncTask(playerName, sender).runTaskAsynchronously(mcMMO.p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package com.gmail.nossr50.commands.player;
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
@@ -10,8 +12,10 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class McstatsCommand implements CommandExecutor {
|
public class McstatsCommand implements TabExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
@@ -23,20 +27,26 @@ public class McstatsCommand implements CommandExecutor {
|
|||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Stats.Own.Stats"));
|
if (Config.getInstance().getMcstatsScoreboardsEnabled()) {
|
||||||
player.sendMessage(LocaleLoader.getString("mcMMO.NoSkillNote"));
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerStatsScoreboard(mcMMOPlayer);
|
||||||
CommandUtils.printGatheringSkills(player);
|
|
||||||
CommandUtils.printCombatSkills(player);
|
|
||||||
CommandUtils.printMiscSkills(player);
|
|
||||||
|
|
||||||
int powerLevelCap = Config.getInstance().getPowerLevelCap();
|
|
||||||
|
|
||||||
if (powerLevelCap != Integer.MAX_VALUE) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", UserManager.getPlayer(player).getPowerLevel(), powerLevelCap));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", UserManager.getPlayer(player).getPowerLevel()));
|
player.sendMessage(LocaleLoader.getString("Stats.Own.Stats"));
|
||||||
|
player.sendMessage(LocaleLoader.getString("mcMMO.NoSkillNote"));
|
||||||
|
|
||||||
|
CommandUtils.printGatheringSkills(player);
|
||||||
|
CommandUtils.printCombatSkills(player);
|
||||||
|
CommandUtils.printMiscSkills(player);
|
||||||
|
|
||||||
|
int powerLevelCap = Config.getInstance().getPowerLevelCap();
|
||||||
|
|
||||||
|
if (powerLevelCap != Integer.MAX_VALUE) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", UserManager.getPlayer(player).getPowerLevel(), powerLevelCap));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", UserManager.getPlayer(player).getPowerLevel()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -45,4 +55,9 @@ public class McstatsCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,42 @@
|
|||||||
package com.gmail.nossr50.commands.player;
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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.FlatfileDatabaseManager;
|
||||||
|
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
||||||
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.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.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
|
||||||
public class MctopCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MctopCommand implements TabExecutor {
|
||||||
private SkillType skill;
|
private SkillType skill;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
boolean useMySQL = Config.getInstance().getUseMySQL();
|
|
||||||
|
|
||||||
|
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0:
|
case 0:
|
||||||
display(1, "ALL", sender, useMySQL, command);
|
display(1, "ALL", sender, command);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if (StringUtils.isInt(args[0])) {
|
if (StringUtils.isInt(args[0])) {
|
||||||
display(Math.abs(Integer.parseInt(args[0])), "ALL", sender, useMySQL, command);
|
display(Math.abs(Integer.parseInt(args[0])), "ALL", sender, command);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +44,7 @@ public class MctopCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
display(1, skill.toString(), sender, useMySQL, command);
|
display(1, skill.toString(), sender, command);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
@@ -50,7 +56,7 @@ public class MctopCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
display(Math.abs(Integer.parseInt(args[1])), skill.toString(), sender, useMySQL, command);
|
display(Math.abs(Integer.parseInt(args[1])), skill.toString(), sender, command);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -58,27 +64,37 @@ public class MctopCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void display(int page, String skill, CommandSender sender, boolean sql, Command command) {
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void display(int page, String skill, CommandSender sender, Command command) {
|
||||||
if (!skill.equalsIgnoreCase("all") && !Permissions.mctop(sender, this.skill)) {
|
if (!skill.equalsIgnoreCase("all") && !Permissions.mctop(sender, this.skill)) {
|
||||||
sender.sendMessage(command.getPermissionMessage());
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sql) {
|
if (sender instanceof Player && Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
if (skill.equalsIgnoreCase("all")) {
|
ScoreboardManager.enableGlobalStatsScoreboard((Player) sender, skill, page);
|
||||||
sqlDisplay(page, "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing", sender);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sqlDisplay(page, skill, sender);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
flatfileDisplay(page, skill, sender);
|
if (Config.getInstance().getUseMySQL()) {
|
||||||
|
sqlDisplay(page, skill, sender);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
flatfileDisplay(page, skill, sender);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void flatfileDisplay(int page, String skill, CommandSender sender) {
|
private void flatfileDisplay(int page, String skill, CommandSender sender) {
|
||||||
LeaderboardManager.updateLeaderboards(); // Make sure we have the latest information
|
FlatfileDatabaseManager.updateLeaderboards(); // Make sure we have the latest information
|
||||||
|
|
||||||
if (skill.equalsIgnoreCase("all")) {
|
if (skill.equalsIgnoreCase("all")) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
|
sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
|
||||||
@@ -89,21 +105,11 @@ public class MctopCommand implements CommandExecutor {
|
|||||||
|
|
||||||
int position = (page * 10) - 9;
|
int position = (page * 10) - 9;
|
||||||
|
|
||||||
for (String playerStat : LeaderboardManager.retrieveInfo(skill, page)) {
|
for (PlayerStat stat : FlatfileDatabaseManager.retrieveInfo(skill, page, 10)) {
|
||||||
if (playerStat == null) {
|
String digit = (position < 10) ? "0" : "" + String.valueOf(position);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String digit = String.valueOf(position);
|
|
||||||
|
|
||||||
if (position < 10) {
|
|
||||||
digit = "0" + digit;
|
|
||||||
}
|
|
||||||
|
|
||||||
String[] splitStat = playerStat.split(":");
|
|
||||||
|
|
||||||
// Format: 1. Playername - skill value
|
// Format: 1. Playername - skill value
|
||||||
sender.sendMessage(digit + ". " + ChatColor.GREEN + splitStat[1] + " - " + ChatColor.WHITE + splitStat[0]);
|
sender.sendMessage(digit + ". " + ChatColor.GREEN + stat.name + " - " + ChatColor.WHITE + stat.statVal);
|
||||||
position++;
|
position++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
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;
|
||||||
@@ -15,11 +18,14 @@ public class FishingCommand extends SkillCommand {
|
|||||||
private String shakeChance;
|
private String shakeChance;
|
||||||
private String shakeChanceLucky;
|
private String shakeChanceLucky;
|
||||||
private int fishermansDietRank;
|
private int fishermansDietRank;
|
||||||
|
private String biteChance;
|
||||||
|
|
||||||
private boolean canTreasureHunt;
|
private boolean canTreasureHunt;
|
||||||
private boolean canMagicHunt;
|
private boolean canMagicHunt;
|
||||||
private boolean canShake;
|
private boolean canShake;
|
||||||
private boolean canFishermansDiet;
|
private boolean canFishermansDiet;
|
||||||
|
private boolean canMasterAngler;
|
||||||
|
private boolean canIceFish;
|
||||||
|
|
||||||
public FishingCommand() {
|
public FishingCommand() {
|
||||||
super(SkillType.FISHING);
|
super(SkillType.FISHING);
|
||||||
@@ -27,12 +33,14 @@ public class FishingCommand extends SkillCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void dataCalculations() {
|
protected void dataCalculations() {
|
||||||
|
boolean isStorming = player.getWorld().hasStorm();
|
||||||
|
|
||||||
// TREASURE HUNTER
|
// TREASURE HUNTER
|
||||||
if (canTreasureHunt) {
|
if (canTreasureHunt) {
|
||||||
lootTier = mcMMOPlayer.getFishingManager().getLootTier();
|
lootTier = mcMMOPlayer.getFishingManager().getLootTier();
|
||||||
double enchantChance = lootTier * AdvancedConfig.getInstance().getFishingMagicMultiplier();
|
double enchantChance = lootTier * AdvancedConfig.getInstance().getFishingMagicMultiplier();
|
||||||
|
|
||||||
if (player.getWorld().hasStorm()) {
|
if (isStorming) {
|
||||||
chanceRaining = LocaleLoader.getString("Fishing.Chance.Raining");
|
chanceRaining = LocaleLoader.getString("Fishing.Chance.Raining");
|
||||||
enchantChance *= 1.1D;
|
enchantChance *= 1.1D;
|
||||||
}
|
}
|
||||||
@@ -53,6 +61,22 @@ public class FishingCommand extends SkillCommand {
|
|||||||
if (canFishermansDiet) {
|
if (canFishermansDiet) {
|
||||||
fishermansDietRank = calculateRank(Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1);
|
fishermansDietRank = calculateRank(Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MASTER ANGLER
|
||||||
|
if (canMasterAngler) {
|
||||||
|
double rawBiteChance = ((Math.max((skillValue / 200.0), 1.0)) / (isStorming ? 300 : 500));
|
||||||
|
Biome biome = player.getLocation().getBlock().getBiome();
|
||||||
|
|
||||||
|
if (biome == Biome.RIVER || biome == Biome.OCEAN) {
|
||||||
|
rawBiteChance = rawBiteChance * 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.isInsideVehicle() && player.getVehicle().getType() == EntityType.BOAT) {
|
||||||
|
rawBiteChance = rawBiteChance * 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
biteChance = calculateAbilityDisplayValues(rawBiteChance * 100.0)[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -61,11 +85,13 @@ public class FishingCommand extends SkillCommand {
|
|||||||
canMagicHunt = Permissions.magicHunter(player);
|
canMagicHunt = Permissions.magicHunter(player);
|
||||||
canShake = Permissions.shake(player);
|
canShake = Permissions.shake(player);
|
||||||
canFishermansDiet = Permissions.fishermansDiet(player);
|
canFishermansDiet = Permissions.fishermansDiet(player);
|
||||||
|
canMasterAngler = Permissions.masterAngler(player);
|
||||||
|
canIceFish = Permissions.iceFishing(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean effectsHeaderPermissions() {
|
protected boolean effectsHeaderPermissions() {
|
||||||
return canTreasureHunt || canMagicHunt || canShake;
|
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet || canIceFish;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -87,15 +113,27 @@ public class FishingCommand extends SkillCommand {
|
|||||||
if (canFishermansDiet) {
|
if (canFishermansDiet) {
|
||||||
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7")));
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canMasterAngler) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.8"), LocaleLoader.getString("Fishing.Effect.9")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canIceFish) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.10"), LocaleLoader.getString("Fishing.Effect.11")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean statsHeaderPermissions() {
|
protected boolean statsHeaderPermissions() {
|
||||||
return canTreasureHunt || canMagicHunt || canShake;
|
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet || canIceFish;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void statsDisplay() {
|
protected void statsDisplay() {
|
||||||
|
if (canMasterAngler) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Chance", biteChance));
|
||||||
|
}
|
||||||
|
|
||||||
if (canTreasureHunt) {
|
if (canTreasureHunt) {
|
||||||
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Rank", lootTier));
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Rank", lootTier));
|
||||||
}
|
}
|
||||||
@@ -118,5 +156,16 @@ public class FishingCommand extends SkillCommand {
|
|||||||
if (canFishermansDiet) {
|
if (canFishermansDiet) {
|
||||||
player.sendMessage(LocaleLoader.getString("Fishing.Ability.FD", fishermansDietRank));
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.FD", fishermansDietRank));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canIceFish) {
|
||||||
|
int unlockLevel = AdvancedConfig.getInstance().getIceFishingUnlockLevel();
|
||||||
|
|
||||||
|
if (skillValue < unlockLevel) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.1", unlockLevel)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.IceFishing"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,10 +41,10 @@ public class RepairCommand extends SkillCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void dataCalculations() {
|
protected void dataCalculations() {
|
||||||
// We're using pickaxes here, not the best but it works
|
// We're using pickaxes here, not the best but it works
|
||||||
Repairable diamondRepairable = mcMMO.repairableManager.getRepairable(Material.DIAMOND_PICKAXE.getId());
|
Repairable diamondRepairable = mcMMO.getRepairableManager().getRepairable(Material.DIAMOND_PICKAXE.getId());
|
||||||
Repairable goldRepairable = mcMMO.repairableManager.getRepairable(Material.GOLD_PICKAXE.getId());
|
Repairable goldRepairable = mcMMO.getRepairableManager().getRepairable(Material.GOLD_PICKAXE.getId());
|
||||||
Repairable ironRepairable = mcMMO.repairableManager.getRepairable(Material.IRON_PICKAXE.getId());
|
Repairable ironRepairable = mcMMO.getRepairableManager().getRepairable(Material.IRON_PICKAXE.getId());
|
||||||
Repairable stoneRepairable = mcMMO.repairableManager.getRepairable(Material.STONE_PICKAXE.getId());
|
Repairable stoneRepairable = mcMMO.getRepairableManager().getRepairable(Material.STONE_PICKAXE.getId());
|
||||||
|
|
||||||
// TODO: This isn't really accurate - if they don't have pickaxes loaded it doesn't always mean the repair level is 0
|
// TODO: This isn't really accurate - if they don't have pickaxes loaded it doesn't always mean the repair level is 0
|
||||||
diamondLevel = (diamondRepairable == null) ? 0 : diamondRepairable.getMinimumLevel();
|
diamondLevel = (diamondRepairable == null) ? 0 : diamondRepairable.getMinimumLevel();
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
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;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
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;
|
||||||
@@ -18,10 +21,13 @@ import com.gmail.nossr50.util.Permissions;
|
|||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
public abstract class SkillCommand implements CommandExecutor {
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class SkillCommand implements TabExecutor {
|
||||||
protected SkillType skill;
|
protected SkillType skill;
|
||||||
protected String skillName;
|
protected String skillName;
|
||||||
|
|
||||||
@@ -67,7 +73,14 @@ public abstract class SkillCommand implements CommandExecutor {
|
|||||||
if (!skill.isChildSkill()) {
|
if (!skill.isChildSkill()) {
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName));
|
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName));
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.XPGain", LocaleLoader.getString("Commands.XPGain." + StringUtils.getCapitalized(skill.toString()))));
|
player.sendMessage(LocaleLoader.getString("Commands.XPGain", LocaleLoader.getString("Commands.XPGain." + StringUtils.getCapitalized(skill.toString()))));
|
||||||
player.sendMessage(LocaleLoader.getString("Effects.Level", (int) skillValue, profile.getSkillXpLevel(skill), profile.getXpToLevel(skill)));
|
|
||||||
|
if (Config.getInstance().getSkillScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerSkillScoreboard(mcMMOPlayer, skill);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Level", (int) skillValue, profile.getSkillXpLevel(skill), profile.getXpToLevel(skill)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName + " " + LocaleLoader.getString("Skills.Child")));
|
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName + " " + LocaleLoader.getString("Skills.Child")));
|
||||||
@@ -102,6 +115,16 @@ public abstract class SkillCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return ImmutableList.of("?");
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected int calculateRank(int maxLevel, int rankChangeLevel) {
|
protected int calculateRank(int maxLevel, int rankChangeLevel) {
|
||||||
return Math.min((int) skillValue, maxLevel) / rankChangeLevel;
|
return Math.min((int) skillValue, maxLevel) / rankChangeLevel;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,41 @@
|
|||||||
package com.gmail.nossr50.commands.spout;
|
package com.gmail.nossr50.commands.spout;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class MchudCommand extends SpoutCommand {
|
public class MchudCommand extends SpoutCommand {
|
||||||
|
private static final List<String> HUD_TYPES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ArrayList<String> types = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (HudType type : HudType.values()) {
|
||||||
|
types.add(type.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(types);
|
||||||
|
HUD_TYPES = ImmutableList.copyOf(types);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], HUD_TYPES, new ArrayList<String>(HUD_TYPES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
||||||
return false;
|
return false;
|
||||||
@@ -14,16 +43,15 @@ public class MchudCommand extends SpoutCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean oneArgument(Command command, CommandSender sender, String[] args) {
|
protected boolean oneArgument(Command command, CommandSender sender, String[] args) {
|
||||||
for (HudType hudType : HudType.values()) {
|
try {
|
||||||
if (hudType.toString().equalsIgnoreCase(args[0])) {
|
playerProfile.setHudType(HudType.valueOf(args[0].toUpperCase().trim()));
|
||||||
playerProfile.setHudType(hudType);
|
spoutHud.initializeXpBar();
|
||||||
spoutHud.initializeXpBar();
|
spoutHud.updateXpBar();
|
||||||
spoutHud.updateXpBar();
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
catch (IllegalArgumentException ex) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.gmail.nossr50.commands.spout;
|
package com.gmail.nossr50.commands.spout;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.spout.SpoutConfig;
|
import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||||
@@ -12,7 +12,7 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public abstract class SpoutCommand implements CommandExecutor {
|
public abstract class SpoutCommand implements TabExecutor {
|
||||||
protected PlayerProfile playerProfile;
|
protected PlayerProfile playerProfile;
|
||||||
protected McMMOHud spoutHud;
|
protected McMMOHud spoutHud;
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ public abstract class SpoutCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mcMMO.spoutEnabled || !SpoutConfig.getInstance().getXPBarEnabled()) {
|
if (!mcMMO.isSpoutEnabled() || !SpoutConfig.getInstance().getXPBarEnabled()) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,36 @@
|
|||||||
package com.gmail.nossr50.commands.spout;
|
package com.gmail.nossr50.commands.spout;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
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.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public class XplockCommand extends SpoutCommand {
|
public class XplockCommand extends SpoutCommand {
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
List<String> matches = StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
|
||||||
|
if (matches.size() == 0) {
|
||||||
|
return StringUtil.copyPartialMatches(args[0], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches;
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
||||||
if (spoutHud.getXpBarLocked()) {
|
if (spoutHud.getXpBarLocked()) {
|
||||||
|
|||||||
@@ -20,7 +20,10 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
|
|
||||||
/* GENERAL */
|
/* GENERAL */
|
||||||
public int getAbilityLength() { return config.getInt("Skills.General.Ability_IncreaseLevel", 50); }
|
public int getAbilityLength() { return config.getInt("Skills.General.Ability_IncreaseLevel", 50); }
|
||||||
public int getEnchantBuff() { return config.getInt("Skills.General.Ability_EnchantBuff", 5); }
|
public int getEnchantBuff() {
|
||||||
|
int buff = config.getInt("Skills.General.Ability_EnchantBuff", 5);
|
||||||
|
return (buff <= 0) ? 1 : buff;
|
||||||
|
}
|
||||||
|
|
||||||
/* ACROBATICS */
|
/* ACROBATICS */
|
||||||
public double getDodgeChanceMax() { return config.getDouble("Skills.Acrobatics.Dodge_ChanceMax", 20.0D); }
|
public double getDodgeChanceMax() { return config.getDouble("Skills.Acrobatics.Dodge_ChanceMax", 20.0D); }
|
||||||
@@ -34,7 +37,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getGracefulRollChanceMax() { return config.getDouble("Skills.Acrobatics.GracefulRoll_ChanceMax", 100.0D); }
|
public double getGracefulRollChanceMax() { return config.getDouble("Skills.Acrobatics.GracefulRoll_ChanceMax", 100.0D); }
|
||||||
public int getGracefulRollMaxBonusLevel() { return config.getInt("Skills.Acrobatics.GracefulRoll_MaxBonusLevel", 500); }
|
public int getGracefulRollMaxBonusLevel() { return config.getInt("Skills.Acrobatics.GracefulRoll_MaxBonusLevel", 500); }
|
||||||
public int getGracefulRollDamageThreshold() { return config.getInt("Skills.Acrobatics.GracefulRoll_DamageThreshold", 14); }
|
public int getGracefulRollDamageThreshold() { return config.getInt("Skills.Acrobatics.GracefulRoll_DamageThreshold", 14); }
|
||||||
public int getGracefulRollSuccessModifer() { return config.getInt("Skills.Acrobatics.GracefulRoll_SuccessModifier", 2); }
|
|
||||||
|
|
||||||
public int getDodgeXPModifier() { return config.getInt("Skills.Acrobatics.Dodge_XP_Modifier", 120); }
|
public int getDodgeXPModifier() { return config.getInt("Skills.Acrobatics.Dodge_XP_Modifier", 120); }
|
||||||
public int getRollXPModifier() { return config.getInt("Skills.Acrobatics.Roll_XP_Modifier", 80); }
|
public int getRollXPModifier() { return config.getInt("Skills.Acrobatics.Roll_XP_Modifier", 80); }
|
||||||
@@ -52,6 +54,8 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getRetrieveChanceMax() { return config.getDouble("Skills.Archery.Retrieve_MaxBonus", 100.0D); }
|
public double getRetrieveChanceMax() { return config.getDouble("Skills.Archery.Retrieve_MaxBonus", 100.0D); }
|
||||||
public int getRetrieveMaxBonusLevel() { return config.getInt("Skills.Archery.Retrieve_MaxBonusLevel", 1000); }
|
public int getRetrieveMaxBonusLevel() { return config.getInt("Skills.Archery.Retrieve_MaxBonusLevel", 1000); }
|
||||||
|
|
||||||
|
public double getForceMultiplier() { return config.getDouble("Skills.Archery.Force_Multiplier", 2.0D); }
|
||||||
|
|
||||||
/* AXES */
|
/* AXES */
|
||||||
public int getBonusDamageAxesBonusMax() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonus", 4); }
|
public int getBonusDamageAxesBonusMax() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonus", 4); }
|
||||||
public int getBonusDamageAxesMaxBonusLevel() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonusLevel", 200); }
|
public int getBonusDamageAxesMaxBonusLevel() { return config.getInt("Skills.Axes.DamageIncrease_MaxBonusLevel", 200); }
|
||||||
@@ -85,6 +89,8 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
|
|
||||||
public int getFishermanDietRankChange() { return config.getInt("Skills.Fishing.Fisherman_Diet_RankChange", 200); }
|
public int getFishermanDietRankChange() { return config.getInt("Skills.Fishing.Fisherman_Diet_RankChange", 200); }
|
||||||
|
|
||||||
|
public int getIceFishingUnlockLevel() { return config.getInt("Skills.Fishing.Ice_Fishing_UnlockLevel", 50); }
|
||||||
|
|
||||||
/* Shake */
|
/* Shake */
|
||||||
public int getShakeUnlockLevel() { return config.getInt("Skills.Fishing.Shake_UnlockLevel", 150); }
|
public int getShakeUnlockLevel() { return config.getInt("Skills.Fishing.Shake_UnlockLevel", 150); }
|
||||||
public int getShakeChanceRank1() { return config.getInt("Skills.Fishing.Shake_Chance.Rank_1", 25); }
|
public int getShakeChanceRank1() { return config.getInt("Skills.Fishing.Shake_Chance.Rank_1", 25); }
|
||||||
@@ -273,9 +279,17 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getWoodcuttingDoubleDropChance() { return config.getDouble("Skills.Woodcutting.DoubleDrops_ChanceMax", 100.0D); }
|
public double getWoodcuttingDoubleDropChance() { return config.getDouble("Skills.Woodcutting.DoubleDrops_ChanceMax", 100.0D); }
|
||||||
public int getWoodcuttingDoubleDropMaxLevel() { return config.getInt("Skills.Woodcutting.DoubleDrops_MaxBonusLevel", 1000); }
|
public int getWoodcuttingDoubleDropMaxLevel() { return config.getInt("Skills.Woodcutting.DoubleDrops_MaxBonusLevel", 1000); }
|
||||||
|
|
||||||
/* SPOUT STUFF*/
|
/* KRAKEN STUFF */
|
||||||
public int getSpoutNotificationTier1() { return config.getInt("Spout.Notifications.Tier1", 200); }
|
public boolean getKrakenEnabled() { return config.getBoolean("Kraken.Enabled", true); }
|
||||||
public int getSpoutNotificationTier2() { return config.getInt("Spout.Notifications.Tier2", 400); }
|
public boolean getKrakenGlobalSoundsEnabled() { return config.getBoolean("Kraken.Global_Sounds", true); }
|
||||||
public int getSpoutNotificationTier3() { return config.getInt("Spout.Notifications.Tier3", 600); }
|
public boolean getKrakenEscapeAllowed() { return config.getBoolean("Kraken.Allow_Escaping", false); }
|
||||||
public int getSpoutNotificationTier4() { return config.getInt("Spout.Notifications.Tier4", 800); }
|
public int getKrakenTriesBeforeRelease() { return config.getInt("Kraken.Tries_Before_Release", 50); }
|
||||||
|
public int getKrakenHealth() { return config.getInt("Kraken.Health", 50); }
|
||||||
|
public String getKrakenName() { return config.getString("Kraken.Name", "The Kraken"); }
|
||||||
|
public String getServerUnleashMessage() { return config.getString("Kraken.Unleashed_Message.Server", "(PLAYER) has unleashed the kraken!"); }
|
||||||
|
public String getPlayerUnleashMessage() { return config.getString("Kraken.Unleashed_Message.Player", "THE KRAKEN HAS BEEN UNLEASHED!"); }
|
||||||
|
public String getPlayerDefeatMessage() { return config.getString("Kraken.Defeated_Message.Killed", "You have slain the kraken!"); }
|
||||||
|
public String getPlayerEscapeMessage() { return config.getString("Kraken.Defeated_Message.Escape", "You have escaped from the kraken!"); }
|
||||||
|
public int getKrakenAttackInterval() { return config.getInt("Kraken.Attack_Interval_Seconds", 1); }
|
||||||
|
public int getKrakenAttackDamage() { return config.getInt("Kraken.Attack_Damage", 1); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
@@ -45,9 +46,42 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
||||||
public boolean getConfigOverwriteEnabled() { return config.getBoolean("General.Config_Update_Overwrite", true); }
|
public boolean getConfigOverwriteEnabled() { return config.getBoolean("General.Config_Update_Overwrite", true); }
|
||||||
|
|
||||||
|
public boolean getPotatoEnabled() { return config.getBoolean("General.Potato_Explosion_Enabled", false); }
|
||||||
|
public int getPotatoChance() { return config.getInt("General.Potato_Explosion_Chance", 1); }
|
||||||
|
|
||||||
public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }
|
public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }
|
||||||
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.a.Use_Display_Names", true); }
|
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.a.Use_Display_Names", true); }
|
||||||
|
|
||||||
|
/* Mob Healthbar */
|
||||||
|
public MobHealthbarType getMobHealthbarDefault() {
|
||||||
|
try {
|
||||||
|
return MobHealthbarType.valueOf(config.getString("Mob_Healthbar.Display_Type", "HEARTS").toUpperCase().trim());
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
return MobHealthbarType.HEARTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMobHealthbarTime() { return config.getInt("Mob_Healthbar.Display_Time", 3); }
|
||||||
|
|
||||||
|
/* Scoreboards */
|
||||||
|
public boolean getMcrankScoreboardEnabled() { return config.getBoolean("Scoreboards.Mcrank.Use", true); }
|
||||||
|
public int getMcrankScoreboardTime() { return config.getInt("Scoreboards.Mcrank.Display_Time", 10); }
|
||||||
|
|
||||||
|
public boolean getMcstatsScoreboardsEnabled() { return config.getBoolean("Scoreboards.Mcstats.Use", true); }
|
||||||
|
public int getMcstatsScoreboardTime() { return config.getInt("Scoreboards.Mcstats.Display_Time", 10); }
|
||||||
|
|
||||||
|
public boolean getMctopScoreboardEnabled() { return config.getBoolean("Scoreboards.Mctop.Use", true); }
|
||||||
|
public int getMctopScoreboardTime() { return config.getInt("Scoreboards.Mctop.Display_Time", 10); }
|
||||||
|
|
||||||
|
public boolean getInspectScoreboardEnabled() { return config.getBoolean("Scoreboards.Inspect.Use", true); }
|
||||||
|
public int getInspectScoreboardTime() { return config.getInt("Scoreboards.Inspect.Display_Time", 10); }
|
||||||
|
|
||||||
|
public boolean getSkillScoreboardEnabled() { return config.getBoolean("Scoreboards.Skillname.Use", true); }
|
||||||
|
public int getSkillScoreboardTime() { return config.getInt("Scoreboards.Skillname.Display_Time", 10); }
|
||||||
|
|
||||||
|
public boolean getPowerLevelsEnabled() { return config.getBoolean("Scoreboards.Power_Level.Use", false); }
|
||||||
|
|
||||||
/* Database Purging */
|
/* Database Purging */
|
||||||
public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); }
|
public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); }
|
||||||
public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); }
|
public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); }
|
||||||
@@ -108,6 +142,7 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getChimaeraPreventUseUnderground() { return config.getBoolean("Items.Chimaera_Wing.Prevent_Use_Underground", true); }
|
public boolean getChimaeraPreventUseUnderground() { return config.getBoolean("Items.Chimaera_Wing.Prevent_Use_Underground", true); }
|
||||||
public int getChimaeraCooldown() { return config.getInt("Items.Chimaera_Wing.Cooldown", 240); }
|
public int getChimaeraCooldown() { return config.getInt("Items.Chimaera_Wing.Cooldown", 240); }
|
||||||
public int getChimaeraWarmup() { return config.getInt("Items.Chimaera_Wing.Warmup", 5); }
|
public int getChimaeraWarmup() { return config.getInt("Items.Chimaera_Wing.Warmup", 5); }
|
||||||
|
public int getChimaeraRecentlyHurtCooldown() { return config.getInt("Items.Chimaera_Wing.RecentlyHurt_Cooldown", 60); }
|
||||||
|
|
||||||
/* Particles */
|
/* Particles */
|
||||||
public boolean getAbilityActivationEffectEnabled() { return config.getBoolean("Particles.Ability_Activation", true); }
|
public boolean getAbilityActivationEffectEnabled() { return config.getBoolean("Particles.Ability_Activation", true); }
|
||||||
@@ -117,6 +152,7 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getGreaterImpactEffectEnabled() { return config.getBoolean("Particles.Greater_Impact", true); }
|
public boolean getGreaterImpactEffectEnabled() { return config.getBoolean("Particles.Greater_Impact", true); }
|
||||||
public boolean getLevelUpEffectsEnabled() { return config.getBoolean("Particles.LevelUp_Enabled", true); }
|
public boolean getLevelUpEffectsEnabled() { return config.getBoolean("Particles.LevelUp_Enabled", true); }
|
||||||
public int getLevelUpEffectsTier() { return config.getInt("Particles.LevelUp_Tier", 100); }
|
public int getLevelUpEffectsTier() { return config.getInt("Particles.LevelUp_Tier", 100); }
|
||||||
|
public boolean getLargeFireworks() { return config.getBoolean("Particles.LargeFireworks", true); }
|
||||||
|
|
||||||
/* PARTY SETTINGS */
|
/* PARTY SETTINGS */
|
||||||
public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); }
|
public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); }
|
||||||
@@ -129,11 +165,16 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public double getPartyShareRange() { return config.getDouble("Party.Sharing.Range", 75.0); }
|
public double getPartyShareRange() { return config.getDouble("Party.Sharing.Range", 75.0); }
|
||||||
|
|
||||||
/* Party Teleport Settings */
|
/* Party Teleport Settings */
|
||||||
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 30); }
|
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 120); }
|
||||||
|
public int getPTPCommandWarmup() { return config.getInt("Commands.ptp.Warmup", 5); }
|
||||||
|
public int getPTPCommandRecentlyHurtCooldown() { return config.getInt("Commands.ptp.RecentlyHurt_Cooldown", 60); }
|
||||||
public int getPTPCommandTimeout() { return config.getInt("Commands.ptp.Request_Timeout", 300); }
|
public int getPTPCommandTimeout() { return config.getInt("Commands.ptp.Request_Timeout", 300); }
|
||||||
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Confirm_Required", true); }
|
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Confirm_Required", true); }
|
||||||
public boolean getPTPCommandWorldPermissions() { return config.getBoolean("Commands.ptp.World_Based_Permissions", false); }
|
public boolean getPTPCommandWorldPermissions() { return config.getBoolean("Commands.ptp.World_Based_Permissions", false); }
|
||||||
|
|
||||||
|
/* Inspect command distance */
|
||||||
|
public double getInspectDistance() { return config.getDouble("Commands.inspect.Max_Distance", 30); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ABILITY SETTINGS
|
* ABILITY SETTINGS
|
||||||
*/
|
*/
|
||||||
@@ -192,6 +233,7 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public int getSalvageAnvilId() { return config.getInt("Skills.Repair.Salvage_Anvil_ID", 41); }
|
public int getSalvageAnvilId() { return config.getInt("Skills.Repair.Salvage_Anvil_ID", 41); }
|
||||||
public boolean getSalvageTools() { return config.getBoolean("Skills.Repair.Salvage_tools", true); }
|
public boolean getSalvageTools() { return config.getBoolean("Skills.Repair.Salvage_tools", true); }
|
||||||
public boolean getSalvageArmor() { return config.getBoolean("Skills.Repair.Salvage_armor", true); }
|
public boolean getSalvageArmor() { return config.getBoolean("Skills.Repair.Salvage_armor", true); }
|
||||||
|
public boolean getRepairConfirmRequired() { return config.getBoolean("Skills.Repair.Confirm_Required", true); }
|
||||||
|
|
||||||
/* Unarmed */
|
/* Unarmed */
|
||||||
public boolean getUnarmedBlockCrackerSmoothbrickToCracked() { return config.getBoolean("Skills.Unarmed.Block_Cracker.SmoothBrick_To_CrackedBrick", true); }
|
public boolean getUnarmedBlockCrackerSmoothbrickToCracked() { return config.getBoolean("Skills.Unarmed.Block_Cracker.SmoothBrick_To_CrackedBrick", true); }
|
||||||
@@ -239,7 +281,6 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* General Settings */
|
/* General Settings */
|
||||||
public boolean getExperienceGainsMobspawnersEnabled() { return config.getBoolean("Experience.Gains.Mobspawners.Enabled", false); }
|
|
||||||
public boolean getExperienceGainsPlayerVersusPlayerEnabled() { return config.getBoolean("Experience.PVP.Rewards", true); }
|
public boolean getExperienceGainsPlayerVersusPlayerEnabled() { return config.getBoolean("Experience.PVP.Rewards", true); }
|
||||||
|
|
||||||
public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience.Gains.Multiplier.Global", 1.0); }
|
public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience.Gains.Multiplier.Global", 1.0); }
|
||||||
@@ -252,8 +293,9 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public double getAnimalsXP() { return config.getDouble("Experience.Combat.Multiplier.Animals", 1.0); }
|
public double getAnimalsXP() { return config.getDouble("Experience.Combat.Multiplier.Animals", 1.0); }
|
||||||
public double getWitherSkeletonXP() { return config.getDouble("Experience.Combat.Multiplier.Wither_Skeleton", 4.0); }
|
public double getWitherSkeletonXP() { return config.getDouble("Experience.Combat.Multiplier.Wither_Skeleton", 4.0); }
|
||||||
|
|
||||||
|
public double getSpawnedMobXpMultiplier() { return config.getDouble("Experience.Gains.MobSpawners.Multiplier", 0.0); }
|
||||||
|
|
||||||
/* XP Formula Multiplier */
|
/* XP Formula Multiplier */
|
||||||
public int getFormulaMultiplierCurve() { return config.getInt("Experience.Formula.Curve_Modifier", 20); }
|
public int getFormulaMultiplierCurve() { return config.getInt("Experience.Formula.Curve_Modifier", 20); }
|
||||||
public double getForumulaMultiplier(SkillType skill) { return config.getDouble("Experience.Formula.Modifier." + StringUtils.getCapitalized(skill.toString())); }
|
public double getFormulaSkillModifier(SkillType skill) { return config.getDouble("Experience.Formula.Modifier." + StringUtils.getCapitalized(skill.toString())); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.gmail.nossr50.config;
|
package com.gmail.nossr50.config;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
@@ -30,11 +32,11 @@ public abstract class ConfigLoader {
|
|||||||
|
|
||||||
protected void loadFile() {
|
protected void loadFile() {
|
||||||
if (!configFile.exists()) {
|
if (!configFile.exists()) {
|
||||||
plugin.getLogger().info("Creating mcMMO " + fileName + " File...");
|
plugin.debug("Creating mcMMO " + fileName + " File...");
|
||||||
createFile();
|
createFile();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
plugin.getLogger().info("Loading mcMMO " + fileName + " File...");
|
plugin.debug("Loading mcMMO " + fileName + " File...");
|
||||||
}
|
}
|
||||||
|
|
||||||
config = YamlConfiguration.loadConfiguration(configFile);
|
config = YamlConfiguration.loadConfiguration(configFile);
|
||||||
@@ -43,38 +45,49 @@ public abstract class ConfigLoader {
|
|||||||
protected abstract void loadKeys();
|
protected abstract void loadKeys();
|
||||||
|
|
||||||
protected void createFile() {
|
protected void createFile() {
|
||||||
if (configFile.exists()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
configFile.getParentFile().mkdirs();
|
configFile.getParentFile().mkdirs();
|
||||||
|
|
||||||
InputStream inputStream = plugin.getResource(fileName);
|
InputStream inputStream = plugin.getResource(fileName);
|
||||||
|
|
||||||
if (inputStream != null) {
|
if (inputStream == null) {
|
||||||
try {
|
plugin.getLogger().severe("Missing resource file: '" + fileName + "' please notify the plugin authors");
|
||||||
copyStreamToFile(inputStream, configFile);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream outputStream = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
outputStream = new FileOutputStream(configFile);
|
||||||
|
|
||||||
|
int read;
|
||||||
|
byte[] bytes = new byte[1024];
|
||||||
|
|
||||||
|
while ((read = inputStream.read(bytes)) != -1) {
|
||||||
|
outputStream.write(bytes, 0, read);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
}
|
||||||
|
catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (outputStream != null) {
|
||||||
|
try {
|
||||||
|
outputStream.close();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
plugin.getLogger().severe("Missing resource file: '" + fileName + "' please notify the plugin authors");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void copyStreamToFile(InputStream inputStream, File file) throws Exception {
|
|
||||||
OutputStream outputStream = new FileOutputStream(file);
|
|
||||||
|
|
||||||
int read = 0;
|
|
||||||
byte[] bytes = new byte[1024];
|
|
||||||
|
|
||||||
while ((read = inputStream.read(bytes)) != -1) {
|
|
||||||
outputStream.write(bytes, 0, read);
|
|
||||||
}
|
|
||||||
|
|
||||||
inputStream.close();
|
|
||||||
outputStream.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.gmail.nossr50.config.party;
|
package com.gmail.nossr50.config.party;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
@@ -21,13 +23,20 @@ public class ItemWeightConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getItemWeight(Material material) {
|
public int getItemWeight(Material material) {
|
||||||
String materialName = StringUtils.getPrettyItemString(material).replace(" ", "_");
|
return config.getInt("Item_Weights." + StringUtils.getPrettyItemString(material).replace(" ", "_"), config.getInt("Item_Weights.Default"));
|
||||||
int itemWeight = config.getInt("Item_Weights.Default");
|
}
|
||||||
|
|
||||||
if (config.getInt("Item_Weights." + materialName) > 0) {
|
public HashSet<Material> getMiscItems() {
|
||||||
itemWeight = config.getInt("Item_Weights." + materialName);
|
HashSet<Material> miscItems = new HashSet<Material>();
|
||||||
|
|
||||||
|
for (String item : config.getStringList("Party_Shareables.Misc_Items")) {
|
||||||
|
Material material = Material.getMaterial(item.toUpperCase());
|
||||||
|
|
||||||
|
if (material != null) {
|
||||||
|
miscItems.add(material);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return itemWeight;
|
return miscItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
package com.gmail.nossr50.config.spout;
|
package com.gmail.nossr50.config.spout;
|
||||||
|
|
||||||
|
import org.getspout.spoutapi.keyboard.Keyboard;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||||
|
|
||||||
public class SpoutConfig extends ConfigLoader {
|
public class SpoutConfig extends ConfigLoader {
|
||||||
private static SpoutConfig instance;
|
private static SpoutConfig instance;
|
||||||
public HudType defaultHudType;
|
|
||||||
|
|
||||||
private SpoutConfig() {
|
private SpoutConfig() {
|
||||||
super("spout.yml");
|
super("spout.yml");
|
||||||
loadKeys();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SpoutConfig getInstance() {
|
public static SpoutConfig getInstance() {
|
||||||
@@ -24,22 +24,26 @@ public class SpoutConfig extends ConfigLoader {
|
|||||||
@Override
|
@Override
|
||||||
protected void loadKeys() {
|
protected void loadKeys() {
|
||||||
// Setup default HUD
|
// Setup default HUD
|
||||||
String temp = config.getString("Spout.HUD.Default", "STANDARD");
|
}
|
||||||
|
|
||||||
for (HudType hudType : HudType.values()) {
|
public HudType getDefaultHudType() {
|
||||||
if (hudType.toString().equalsIgnoreCase(temp)) {
|
try {
|
||||||
defaultHudType = hudType;
|
return HudType.valueOf(config.getString("Spout.HUD.Default", "STANDARD").toUpperCase().trim());
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
if (defaultHudType == null) {
|
return HudType.STANDARD;
|
||||||
defaultHudType = HudType.STANDARD;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getShowPowerLevel() { return config.getBoolean("HUD.Show_Power_Level", true); }
|
public boolean getShowPowerLevel() { return config.getBoolean("HUD.Show_Power_Level", true); }
|
||||||
public String getMenuKey() { return config.getString("Menu.Key", "KEY_M"); }
|
public Keyboard getMenuKey() {
|
||||||
|
try {
|
||||||
|
return Keyboard.valueOf(config.getString("Menu.Key", "KEY_M").toUpperCase().trim());
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
return Keyboard.KEY_M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* XP Bar */
|
/* XP Bar */
|
||||||
public boolean getXPBarEnabled() { return config.getBoolean("XP.Bar.Enabled", true); }
|
public boolean getXPBarEnabled() { return config.getBoolean("XP.Bar.Enabled", true); }
|
||||||
@@ -62,4 +66,10 @@ public class SpoutConfig extends ConfigLoader {
|
|||||||
public double getRetroHUDRed(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
public double getRetroHUDRed(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
||||||
public double getRetroHUDGreen(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
public double getRetroHUDGreen(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
||||||
public double getRetroHUDBlue(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
public double getRetroHUDBlue(SkillType skill) { return config.getDouble("HUD.Retro.Colors." + skill.toString().toLowerCase() +".RED", 0.3); }
|
||||||
|
|
||||||
|
/* Notification Tiers */
|
||||||
|
public int getNotificationTier1() { return config.getInt("Notifications.Tier1", 200); }
|
||||||
|
public int getNotificationTier2() { return config.getInt("Notifications.Tier2", 400); }
|
||||||
|
public int getNotificationTier3() { return config.getInt("Notifications.Tier3", 600); }
|
||||||
|
public int getNotificationTier4() { return config.getInt("Notifications.Tier4", 800); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,17 @@ import java.util.Set;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.material.MaterialData;
|
import org.bukkit.material.MaterialData;
|
||||||
|
import org.bukkit.potion.Potion;
|
||||||
|
import org.bukkit.potion.PotionType;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||||
|
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||||
import com.gmail.nossr50.datatypes.treasure.Treasure;
|
import com.gmail.nossr50.datatypes.treasure.Treasure;
|
||||||
|
|
||||||
public class TreasureConfig extends ConfigLoader {
|
public class TreasureConfig extends ConfigLoader {
|
||||||
@@ -33,6 +37,27 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
||||||
public List<HylianTreasure> hylianFromPots = new ArrayList<HylianTreasure>();
|
public List<HylianTreasure> hylianFromPots = new ArrayList<HylianTreasure>();
|
||||||
|
|
||||||
|
public List<ShakeTreasure> shakeFromBlaze = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromCaveSpider = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSpider = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromChicken = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromCow = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromCreeper = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromEnderman = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromGhast = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromIronGolem = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromMagmaCube = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromMushroomCow = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromPig = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromPigZombie = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSheep = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSkeleton = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSlime = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSnowman = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromSquid = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromWitch = new ArrayList<ShakeTreasure>();
|
||||||
|
public List<ShakeTreasure> shakeFromZombie = new ArrayList<ShakeTreasure>();
|
||||||
|
|
||||||
public List<FishingTreasure> fishingRewards = new ArrayList<FishingTreasure>();
|
public List<FishingTreasure> fishingRewards = new ArrayList<FishingTreasure>();
|
||||||
|
|
||||||
private TreasureConfig() {
|
private TreasureConfig() {
|
||||||
@@ -92,7 +117,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
reason.add("Invalid amount: " + amount);
|
reason.add("Invalid amount: " + amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data > 127 || data < -128) {
|
if (id < 256 && (data > 127 || data < -128)) {
|
||||||
reason.add("Invalid data: " + data);
|
reason.add("Invalid data: " + data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,15 +153,32 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
reason.add("Invalid Drop_Level: " + dropLevel);
|
reason.add("Invalid Drop_Level: " + dropLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Potions
|
||||||
|
*/
|
||||||
|
|
||||||
|
ItemStack item = null;
|
||||||
|
|
||||||
|
if (config.contains("Treasures." + treasureName + ".Potion_Type")) {
|
||||||
|
String potionType = config.getString("Treasures." + treasureName + ".Potion_Type");
|
||||||
|
try {
|
||||||
|
item = new Potion(PotionType.valueOf(potionType.toUpperCase())).toItemStack(amount);
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
reason.add("Invalid Potion_Type: " + potionType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item = (new MaterialData(id, (byte) data)).toItemStack(amount);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Drops From & Max Level
|
* Drops From & Max Level
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ItemStack item = (new MaterialData(id, (byte) data)).toItemStack(amount);
|
|
||||||
|
|
||||||
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||||
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) {
|
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) {
|
||||||
reason.add("Fishing drops cannot also be excavation drops");
|
reason.add("This can only be a fishing drop.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.contains("Treasures." + treasureName + ".Max_Level")) {
|
if (!config.contains("Treasures." + treasureName + ".Max_Level")) {
|
||||||
@@ -150,6 +192,30 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
treasures.put(treasureName, fTreasure);
|
treasures.put(treasureName, fTreasure);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Shake", false)) {
|
||||||
|
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) {
|
||||||
|
reason.add("This can only be a shake drop.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.contains("Treasures." + treasureName + ".Mob")) {
|
||||||
|
reason.add("Missing Mob");
|
||||||
|
}
|
||||||
|
|
||||||
|
String mobType = config.getString("Treasures." + treasureName + ".Mob");
|
||||||
|
EntityType mob = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
mob = EntityType.valueOf(mobType.toUpperCase().trim());
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex){
|
||||||
|
reason.add("Invalid Mob: " + mobType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noErrorsInTreasure(reason)) {
|
||||||
|
ShakeTreasure sTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel, mob);
|
||||||
|
treasures.put(treasureName, sTreasure);
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
||||||
HylianTreasure hTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
HylianTreasure hTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
||||||
@@ -195,7 +261,11 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||||
reason.add("Excavation drops cannot also be fishing drops");
|
reason.add("This cannot also be a fishing drop.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Shake", false)) {
|
||||||
|
reason.add("This cannot also be a shake drop.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noErrorsInTreasure(reason) && hTreasure.getDropsFrom() == (byte) 0x0) {
|
if (noErrorsInTreasure(reason) && hTreasure.getDropsFrom() == (byte) 0x0) {
|
||||||
@@ -210,6 +280,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
List<String> excavationTreasures = config.getStringList("Excavation.Treasure");
|
List<String> excavationTreasures = config.getStringList("Excavation.Treasure");
|
||||||
List<String> fishingTreasures = config.getStringList("Fishing.Treasure");
|
List<String> fishingTreasures = config.getStringList("Fishing.Treasure");
|
||||||
List<String> hylianTreasures = config.getStringList("Hylian_Luck.Treasure");
|
List<String> hylianTreasures = config.getStringList("Hylian_Luck.Treasure");
|
||||||
|
List<String> shakeTreasures = config.getStringList("Shake.Treasure");
|
||||||
|
|
||||||
for (Entry<String, Treasure> nextEntry : treasures.entrySet()) {
|
for (Entry<String, Treasure> nextEntry : treasures.entrySet()) {
|
||||||
String treasureKey = nextEntry.getKey();
|
String treasureKey = nextEntry.getKey();
|
||||||
@@ -222,6 +293,97 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
|
|
||||||
fishingRewards.add((FishingTreasure) treasure);
|
fishingRewards.add((FishingTreasure) treasure);
|
||||||
}
|
}
|
||||||
|
else if (treasure instanceof ShakeTreasure) {
|
||||||
|
if (shakeTreasures == null || !shakeTreasures.contains(treasureKey)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShakeTreasure e = (ShakeTreasure) treasure;
|
||||||
|
switch (e.getMob()) {
|
||||||
|
case BLAZE:
|
||||||
|
shakeFromBlaze.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CAVE_SPIDER:
|
||||||
|
shakeFromCaveSpider.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHICKEN:
|
||||||
|
shakeFromChicken.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case COW:
|
||||||
|
shakeFromCow.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CREEPER:
|
||||||
|
shakeFromCreeper.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ENDERMAN:
|
||||||
|
shakeFromEnderman.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GHAST:
|
||||||
|
shakeFromGhast.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRON_GOLEM:
|
||||||
|
shakeFromIronGolem.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAGMA_CUBE:
|
||||||
|
shakeFromMagmaCube.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MUSHROOM_COW:
|
||||||
|
shakeFromMushroomCow.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PIG:
|
||||||
|
shakeFromPig.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PIG_ZOMBIE:
|
||||||
|
shakeFromPigZombie.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHEEP:
|
||||||
|
shakeFromSheep.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SKELETON:
|
||||||
|
shakeFromSkeleton.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SLIME:
|
||||||
|
shakeFromSlime.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SPIDER:
|
||||||
|
shakeFromSpider.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SNOWMAN:
|
||||||
|
shakeFromSnowman.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SQUID:
|
||||||
|
shakeFromSquid.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WITCH:
|
||||||
|
shakeFromWitch.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ZOMBIE:
|
||||||
|
shakeFromZombie.add(e);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (treasure instanceof HylianTreasure) {
|
else if (treasure instanceof HylianTreasure) {
|
||||||
if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) {
|
if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -1,643 +1,63 @@
|
|||||||
package com.gmail.nossr50.database;
|
package com.gmail.nossr50.database;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.io.File;
|
||||||
import java.sql.DriverManager;
|
import java.io.IOException;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
|
||||||
import com.gmail.nossr50.datatypes.database.DatabaseUpdateType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
|
||||||
import com.gmail.nossr50.runnables.database.SQLReconnectTask;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
|
||||||
public final class DatabaseManager {
|
public class DatabaseManager {
|
||||||
private static String connectionString;
|
private final mcMMO plugin;
|
||||||
|
private final boolean isUsingSQL;
|
||||||
|
private File usersFile;
|
||||||
|
|
||||||
private static String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
public DatabaseManager(final mcMMO plugin, final boolean isUsingSQL) {
|
||||||
private static Connection connection = null;
|
this.plugin = plugin;
|
||||||
|
this.isUsingSQL = isUsingSQL;
|
||||||
|
|
||||||
// Scale waiting time by this much per failed attempt
|
if (isUsingSQL) {
|
||||||
private static final double SCALING_FACTOR = 40;
|
SQLDatabaseManager.checkConnected();
|
||||||
|
SQLDatabaseManager.createStructure();
|
||||||
// Minimum wait in nanoseconds (default 500ms)
|
|
||||||
private static final long MIN_WAIT = 500L * 1000000L;
|
|
||||||
|
|
||||||
// Maximum time to wait between reconnects (default 5 minutes)
|
|
||||||
private static final long MAX_WAIT = 5L * 60L * 1000L * 1000000L;
|
|
||||||
|
|
||||||
// How long to wait when checking if connection is valid (default 3 seconds)
|
|
||||||
private static final int VALID_TIMEOUT = 3;
|
|
||||||
|
|
||||||
// When next to try connecting to Database in nanoseconds
|
|
||||||
private static long nextReconnectTimestamp = 0L;
|
|
||||||
|
|
||||||
// How many connection attempts have failed
|
|
||||||
private static int reconnectAttempt = 0;
|
|
||||||
|
|
||||||
private static final long ONE_MONTH = 2630000000L;
|
|
||||||
|
|
||||||
private DatabaseManager() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to connect to the mySQL database.
|
|
||||||
*/
|
|
||||||
public static void connect() {
|
|
||||||
Config configInstance = Config.getInstance();
|
|
||||||
connectionString = "jdbc:mysql://" + configInstance.getMySQLServerName() + ":" + configInstance.getMySQLServerPort() + "/" + configInstance.getMySQLDatabaseName();
|
|
||||||
|
|
||||||
try {
|
|
||||||
mcMMO.p.getLogger().info("Attempting connection to MySQL...");
|
|
||||||
|
|
||||||
// Force driver to load if not yet loaded
|
|
||||||
Class.forName("com.mysql.jdbc.Driver");
|
|
||||||
Properties connectionProperties = new Properties();
|
|
||||||
connectionProperties.put("user", configInstance.getMySQLUserName());
|
|
||||||
connectionProperties.put("password", configInstance.getMySQLUserPassword());
|
|
||||||
connectionProperties.put("autoReconnect", "false");
|
|
||||||
connectionProperties.put("maxReconnects", "0");
|
|
||||||
connection = DriverManager.getConnection(connectionString, connectionProperties);
|
|
||||||
|
|
||||||
mcMMO.p.getLogger().info("Connection to MySQL was a success!");
|
|
||||||
}
|
}
|
||||||
catch (SQLException ex) {
|
else {
|
||||||
connection = null;
|
usersFile = new File(mcMMO.getUsersFilePath());
|
||||||
|
createFlatfileDatabase();
|
||||||
if (reconnectAttempt == 0 || reconnectAttempt >= 11) {
|
FlatfileDatabaseManager.updateLeaderboards();
|
||||||
mcMMO.p.getLogger().info("Connection to MySQL failed!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException ex) {
|
|
||||||
connection = null;
|
|
||||||
|
|
||||||
if (reconnectAttempt == 0 || reconnectAttempt >= 11) {
|
|
||||||
mcMMO.p.getLogger().info("MySQL database driver not found!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void purgePowerlessUsers() {
|
||||||
* Attempt to create the database structure.
|
plugin.getLogger().info("Purging powerless users...");
|
||||||
*/
|
plugin.getLogger().info("Purged " + (isUsingSQL ? SQLDatabaseManager.purgePowerlessSQL() : FlatfileDatabaseManager.purgePowerlessFlatfile()) + " users from the database.");
|
||||||
public static void createStructure() {
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` ("
|
|
||||||
+ "`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
|
|
||||||
+ "`user` varchar(40) NOT NULL,"
|
|
||||||
+ "`lastlogin` int(32) unsigned NOT NULL,"
|
|
||||||
+ "PRIMARY KEY (`id`),"
|
|
||||||
+ "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "huds` ("
|
|
||||||
+ "`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`hudtype` varchar(50) NOT NULL DEFAULT 'STANDARD',"
|
|
||||||
+ "PRIMARY KEY (`user_id`),"
|
|
||||||
+ "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users` (`id`) "
|
|
||||||
+ "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "cooldowns` ("
|
|
||||||
+ "`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`blast_mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`),"
|
|
||||||
+ "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users` (`id`) "
|
|
||||||
+ "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "skills` ("
|
|
||||||
+ "`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`),"
|
|
||||||
+ "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users` (`id`) "
|
|
||||||
+ "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "experience` ("
|
|
||||||
+ "`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`),"
|
|
||||||
+ "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users` (`id`) "
|
|
||||||
+ "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
|
|
||||||
checkDatabaseStructure(DatabaseUpdateType.FISHING);
|
|
||||||
checkDatabaseStructure(DatabaseUpdateType.BLAST_MINING);
|
|
||||||
checkDatabaseStructure(DatabaseUpdateType.CASCADE_DELETE);
|
|
||||||
checkDatabaseStructure(DatabaseUpdateType.INDEX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void purgeOldUsers() {
|
||||||
* Attempt to write the SQL query.
|
plugin.getLogger().info("Purging old users...");
|
||||||
*
|
plugin.getLogger().info("Purged " + (isUsingSQL ? SQLDatabaseManager.purgeOldSQL() : FlatfileDatabaseManager.removeOldFlatfileUsers()) + " users from the database.");
|
||||||
* @param sql Query to write.
|
|
||||||
* @return true if the query was successfully written, false otherwise.
|
|
||||||
*/
|
|
||||||
public static boolean write(String sql) {
|
|
||||||
if (!checkConnected()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PreparedStatement statement = null;
|
|
||||||
try {
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
statement.executeUpdate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (statement != null) {
|
|
||||||
try {
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
printErrors(e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public boolean removeUser(String playerName) {
|
||||||
* Returns the number of rows affected by either a DELETE or UPDATE query
|
if (isUsingSQL ? SQLDatabaseManager.removeUserSQL(playerName) : FlatfileDatabaseManager.removeFlatFileUser(playerName)) {
|
||||||
*
|
Misc.profileCleanup(playerName);
|
||||||
* @param sql SQL query to execute
|
|
||||||
* @return the number of rows affected
|
|
||||||
*/
|
|
||||||
public static int update(String sql) {
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (checkConnected()) {
|
|
||||||
PreparedStatement statement = null;
|
|
||||||
try {
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
ret = statement.executeUpdate();
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (statement != null) {
|
|
||||||
try {
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
printErrors(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Integer. Only return first row / first field.
|
|
||||||
*
|
|
||||||
* @param sql SQL query to execute
|
|
||||||
* @return the value in the first row / first field
|
|
||||||
*/
|
|
||||||
public static int getInt(String sql) {
|
|
||||||
ResultSet resultSet = null;
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
if (checkConnected()) {
|
|
||||||
PreparedStatement statement = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
if (resultSet.next()) {
|
|
||||||
result = resultSet.getInt(1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (statement != null) {
|
|
||||||
try {
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
printErrors(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check connection status and re-establish if dead or stale.
|
|
||||||
*
|
|
||||||
* If the very first immediate attempt fails, further attempts
|
|
||||||
* will be made in progressively larger intervals up to MAX_WAIT
|
|
||||||
* intervals.
|
|
||||||
*
|
|
||||||
* This allows for MySQL to time out idle connections as needed by
|
|
||||||
* server operator, without affecting McMMO, while still providing
|
|
||||||
* protection against a database outage taking down Bukkit's tick
|
|
||||||
* processing loop due to attemping a database connection each
|
|
||||||
* time McMMO needs the database.
|
|
||||||
*
|
|
||||||
* @return the boolean value for whether or not we are connected
|
|
||||||
*/
|
|
||||||
public static boolean checkConnected() {
|
|
||||||
boolean isClosed = true;
|
|
||||||
boolean isValid = false;
|
|
||||||
boolean exists = (connection != null);
|
|
||||||
|
|
||||||
// If we're waiting for server to recover then leave early
|
|
||||||
if (nextReconnectTimestamp > 0 && nextReconnectTimestamp > System.nanoTime()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists) {
|
|
||||||
try {
|
|
||||||
isClosed = connection.isClosed();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
isClosed = true;
|
|
||||||
e.printStackTrace();
|
|
||||||
printErrors(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isClosed) {
|
|
||||||
try {
|
|
||||||
isValid = connection.isValid(VALID_TIMEOUT);
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
// Don't print stack trace because it's valid to lose idle connections to the server and have to restart them.
|
|
||||||
isValid = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Leave if all ok
|
|
||||||
if (exists && !isClosed && isValid) {
|
|
||||||
// Housekeeping
|
|
||||||
nextReconnectTimestamp = 0;
|
|
||||||
reconnectAttempt = 0;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup after ourselves for GC and MySQL's sake
|
|
||||||
if (exists && !isClosed) {
|
|
||||||
try {
|
|
||||||
connection.close();
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
// This is a housekeeping exercise, ignore errors
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to connect again
|
|
||||||
connect();
|
|
||||||
|
|
||||||
// Leave if connection is good
|
|
||||||
try {
|
|
||||||
if (connection != null && !connection.isClosed()) {
|
|
||||||
// Schedule a database save if we really had an outage
|
|
||||||
if (reconnectAttempt > 1) {
|
|
||||||
new SQLReconnectTask().runTaskLater(mcMMO.p, 5);
|
|
||||||
}
|
|
||||||
nextReconnectTimestamp = 0;
|
|
||||||
reconnectAttempt = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
// Failed to check isClosed, so presume connection is bad and attempt later
|
|
||||||
e.printStackTrace();
|
|
||||||
printErrors(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
reconnectAttempt++;
|
|
||||||
nextReconnectTimestamp = (long)(System.nanoTime() + Math.min(MAX_WAIT, (reconnectAttempt * SCALING_FACTOR * MIN_WAIT)));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private void createFlatfileDatabase() {
|
||||||
* Read SQL query.
|
if (usersFile.exists()) {
|
||||||
*
|
return;
|
||||||
* @param sql SQL query to read
|
|
||||||
* @return the rows in this SQL query
|
|
||||||
*/
|
|
||||||
public static HashMap<Integer, ArrayList<String>> read(String sql) {
|
|
||||||
ResultSet resultSet;
|
|
||||||
HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>();
|
|
||||||
|
|
||||||
if (checkConnected()) {
|
|
||||||
PreparedStatement statement = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
while (resultSet.next()) {
|
|
||||||
ArrayList<String> column = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
|
||||||
column.add(resultSet.getString(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
rows.put(resultSet.getRow(), column);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (statement != null) {
|
|
||||||
try {
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
printErrors(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rows;
|
usersFile.getParentFile().mkdir();
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<String, Integer> readSQLRank(String playerName) {
|
|
||||||
ResultSet resultSet;
|
|
||||||
Map<String, Integer> skills = new HashMap<String, Integer>();
|
|
||||||
|
|
||||||
if (checkConnected()) {
|
|
||||||
try {
|
|
||||||
for (SkillType skillType : SkillType.values()) {
|
|
||||||
if (skillType.isChildSkill()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String skillName = skillType.name().toLowerCase();
|
|
||||||
String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " +
|
|
||||||
"AND " + skillName + " > (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
|
||||||
"WHERE user = ?)";
|
|
||||||
|
|
||||||
PreparedStatement statement = connection.prepareStatement(sql);
|
|
||||||
statement.setString(1, playerName);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
resultSet.next();
|
|
||||||
|
|
||||||
int rank = resultSet.getInt("rank");
|
|
||||||
|
|
||||||
sql = "SELECT user, " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " +
|
|
||||||
"AND " + skillName + " = (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
|
||||||
"WHERE user = '" + playerName + "') ORDER BY user";
|
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
while (resultSet.next()) {
|
|
||||||
if (resultSet.getString("user").equalsIgnoreCase(playerName)) {
|
|
||||||
skills.put(skillType.name(), rank + resultSet.getRow());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
|
||||||
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
|
||||||
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > " +
|
|
||||||
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
|
||||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?)";
|
|
||||||
|
|
||||||
PreparedStatement statement = connection.prepareStatement(sql);
|
|
||||||
statement.setString(1, playerName);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
resultSet.next();
|
|
||||||
|
|
||||||
int rank = resultSet.getInt("rank");
|
|
||||||
|
|
||||||
sql = "SELECT user, taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
|
||||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
|
||||||
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
|
||||||
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing = " +
|
|
||||||
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
|
||||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?) ORDER BY user";
|
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
statement.setString(1, playerName);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
while (resultSet.next()) {
|
|
||||||
if (resultSet.getString("user").equalsIgnoreCase(playerName)) {
|
|
||||||
skills.put("ALL", rank + resultSet.getRow());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return skills;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void purgePowerlessSQL() {
|
|
||||||
mcMMO.p.getLogger().info("Purging powerless users...");
|
|
||||||
HashMap<Integer, ArrayList<String>> usernames;
|
|
||||||
|
|
||||||
usernames = read("SELECT u.user FROM " + tablePrefix + "skills AS s, " + tablePrefix + "users AS u " + "WHERE s.user_id = u.id AND " +
|
|
||||||
"(s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0");
|
|
||||||
|
|
||||||
write("DELETE FROM " + tablePrefix + "users WHERE " + tablePrefix + "users.id IN (SELECT * FROM " +
|
|
||||||
"(SELECT u.id FROM " + tablePrefix + "skills AS s, " + tablePrefix + "users AS u " + "WHERE s.user_id = u.id " +
|
|
||||||
"AND (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0) AS p)");
|
|
||||||
|
|
||||||
int purgedUsers = 0;
|
|
||||||
for (int i = 1; i <= usernames.size(); i++) {
|
|
||||||
String playerName = usernames.get(i).get(0);
|
|
||||||
|
|
||||||
if (playerName == null || mcMMO.p.getServer().getOfflinePlayer(playerName).isOnline()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Misc.profileCleanup(playerName);
|
|
||||||
purgedUsers++;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMO.p.getLogger().info("Purged " + purgedUsers + " users from the database.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void purgeOldSQL() {
|
|
||||||
mcMMO.p.getLogger().info("Purging old users...");
|
|
||||||
long currentTime = System.currentTimeMillis();
|
|
||||||
long purgeTime = ONE_MONTH * Config.getInstance().getOldUsersCutoff();
|
|
||||||
HashMap<Integer, ArrayList<String>> usernames = read("SELECT user FROM " + tablePrefix + "users WHERE ((" + currentTime + " - lastlogin*1000) > " + purgeTime + ")");
|
|
||||||
write("DELETE FROM " + tablePrefix + "users WHERE " + tablePrefix + "users.id IN (SELECT * FROM (SELECT id FROM " + tablePrefix + "users WHERE ((" + currentTime + " - lastlogin*1000) > " + purgeTime + ")) AS p)");
|
|
||||||
|
|
||||||
int purgedUsers = 0;
|
|
||||||
for (int i = 1; i <= usernames.size(); i++) {
|
|
||||||
String playerName = usernames.get(i).get(0);
|
|
||||||
|
|
||||||
if (playerName == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Misc.profileCleanup(playerName);
|
|
||||||
purgedUsers++;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMO.p.getLogger().info("Purged " + purgedUsers + " users from the database.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check database structure for missing values.
|
|
||||||
*
|
|
||||||
* @param update Type of data to check updates for
|
|
||||||
*/
|
|
||||||
private static void checkDatabaseStructure(DatabaseUpdateType update) {
|
|
||||||
String sql = null;
|
|
||||||
ResultSet resultSet = null;
|
|
||||||
HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>();
|
|
||||||
|
|
||||||
switch (update) {
|
|
||||||
case BLAST_MINING:
|
|
||||||
sql = "SELECT * FROM `" + tablePrefix + "cooldowns` ORDER BY `" + tablePrefix + "cooldowns`.`blast_mining` ASC LIMIT 0 , 30";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CASCADE_DELETE:
|
|
||||||
write("ALTER TABLE `" + tablePrefix + "huds` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE;");
|
|
||||||
write("ALTER TABLE `" + tablePrefix + "experience` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE;");
|
|
||||||
write("ALTER TABLE `" + tablePrefix + "cooldowns` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE;");
|
|
||||||
write("ALTER TABLE `" + tablePrefix + "skills` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE;");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FISHING:
|
|
||||||
sql = "SELECT * FROM `" + tablePrefix + "experience` ORDER BY `" + tablePrefix + "experience`.`fishing` ASC LIMIT 0 , 30";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INDEX:
|
|
||||||
if (read("SHOW INDEX FROM " + tablePrefix + "skills").size() != 13 && checkConnected()) {
|
|
||||||
mcMMO.p.getLogger().info("Indexing tables, this may take a while on larger databases");
|
|
||||||
write("ALTER TABLE `" + tablePrefix + "skills` ADD INDEX `idx_taming` (`taming`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_mining` (`mining`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_woodcutting` (`woodcutting`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_repair` (`repair`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_unarmed` (`unarmed`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_herbalism` (`herbalism`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_excavation` (`excavation`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_archery` (`archery`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_swords` (`swords`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_axes` (`axes`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_acrobatics` (`acrobatics`) USING BTREE, "
|
|
||||||
+ "ADD INDEX `idx_fishing` (`fishing`) USING BTREE;");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
PreparedStatement statement = null;
|
|
||||||
try {
|
try {
|
||||||
if (!checkConnected()) {
|
plugin.debug("Creating mcmmo.users file...");
|
||||||
return;
|
new File(mcMMO.getUsersFilePath()).createNewFile();
|
||||||
}
|
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
|
||||||
resultSet = statement.executeQuery();
|
|
||||||
|
|
||||||
while (resultSet.next()) {
|
|
||||||
ArrayList<String> column = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
|
||||||
column.add(resultSet.getString(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
rows.put(resultSet.getRow(), column);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (SQLException ex) {
|
catch (IOException e) {
|
||||||
switch (update) {
|
e.printStackTrace();
|
||||||
case BLAST_MINING:
|
|
||||||
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for Blast Mining...");
|
|
||||||
write("ALTER TABLE `"+tablePrefix + "cooldowns` ADD `blast_mining` int(32) NOT NULL DEFAULT '0' ;");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FISHING:
|
|
||||||
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for Fishing...");
|
|
||||||
write("ALTER TABLE `"+tablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
|
||||||
write("ALTER TABLE `"+tablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finally {
|
|
||||||
if (resultSet != null) {
|
|
||||||
try {
|
|
||||||
resultSet.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
// Ignore the error, we're leaving
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (statement != null) {
|
|
||||||
try {
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
// Ignore the error, we're leaving
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void printErrors(SQLException ex) {
|
|
||||||
mcMMO.p.getLogger().severe("SQLException: " + ex.getMessage());
|
|
||||||
mcMMO.p.getLogger().severe("SQLState: " + ex.getSQLState());
|
|
||||||
mcMMO.p.getLogger().severe("VendorError: " + ex.getErrorCode());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import java.util.Collections;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
@@ -16,7 +17,7 @@ import com.gmail.nossr50.datatypes.database.PlayerStat;
|
|||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
public final class LeaderboardManager {
|
public final class FlatfileDatabaseManager {
|
||||||
private static HashMap<SkillType, List<PlayerStat>> playerStatHash = new HashMap<SkillType, List<PlayerStat>>();
|
private static HashMap<SkillType, List<PlayerStat>> playerStatHash = new HashMap<SkillType, List<PlayerStat>>();
|
||||||
private static List<PlayerStat> powerLevels = new ArrayList<PlayerStat>();
|
private static List<PlayerStat> powerLevels = new ArrayList<PlayerStat>();
|
||||||
private static long lastUpdate = 0;
|
private static long lastUpdate = 0;
|
||||||
@@ -24,7 +25,7 @@ public final class LeaderboardManager {
|
|||||||
private static final long UPDATE_WAIT_TIME = 600000L; // 10 minutes
|
private static final long UPDATE_WAIT_TIME = 600000L; // 10 minutes
|
||||||
private static final long ONE_MONTH = 2630000000L;
|
private static final long ONE_MONTH = 2630000000L;
|
||||||
|
|
||||||
private LeaderboardManager() {}
|
private FlatfileDatabaseManager() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the leader boards.
|
* Update the leader boards.
|
||||||
@@ -35,6 +36,7 @@ public final class LeaderboardManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String usersFilePath = mcMMO.getUsersFilePath();
|
||||||
lastUpdate = System.currentTimeMillis(); // Log when the last update was run
|
lastUpdate = System.currentTimeMillis(); // Log when the last update was run
|
||||||
powerLevels.clear(); // Clear old values from the power levels
|
powerLevels.clear(); // Clear old values from the power levels
|
||||||
|
|
||||||
@@ -54,8 +56,7 @@ public final class LeaderboardManager {
|
|||||||
|
|
||||||
// Read from the FlatFile database and fill our arrays with information
|
// Read from the FlatFile database and fill our arrays with information
|
||||||
try {
|
try {
|
||||||
FileReader file = new FileReader(mcMMO.getUsersFilePath());
|
BufferedReader in = new BufferedReader(new FileReader(usersFilePath));
|
||||||
BufferedReader in = new BufferedReader(file);
|
|
||||||
String line = "";
|
String line = "";
|
||||||
ArrayList<String> players = new ArrayList<String>();
|
ArrayList<String> players = new ArrayList<String>();
|
||||||
|
|
||||||
@@ -72,72 +73,25 @@ public final class LeaderboardManager {
|
|||||||
|
|
||||||
players.add(playerName);
|
players.add(playerName);
|
||||||
|
|
||||||
if (data.length > 1 && StringUtils.isInt(data[1])) {
|
powerLevel += loadStat(mining, playerName, data, 1);
|
||||||
mining.add(new PlayerStat(playerName, Integer.parseInt(data[1])));
|
powerLevel += loadStat(woodcutting, playerName, data, 5);
|
||||||
powerLevel += Integer.parseInt(data[1]);
|
powerLevel += loadStat(repair, playerName, data, 7);
|
||||||
}
|
powerLevel += loadStat(unarmed, playerName, data, 8);
|
||||||
|
powerLevel += loadStat(herbalism, playerName, data, 9);
|
||||||
if (data.length > 5 && StringUtils.isInt(data[5])) {
|
powerLevel += loadStat(excavation, playerName, data, 10);
|
||||||
woodcutting.add(new PlayerStat(playerName, Integer.parseInt(data[5])));
|
powerLevel += loadStat(archery, playerName, data, 11);
|
||||||
powerLevel += Integer.parseInt(data[5]);
|
powerLevel += loadStat(swords, playerName, data, 12);
|
||||||
}
|
powerLevel += loadStat(axes, playerName, data, 13);
|
||||||
|
powerLevel += loadStat(acrobatics, playerName, data, 14);
|
||||||
if (data.length > 7 && StringUtils.isInt(data[7])) {
|
powerLevel += loadStat(taming, playerName, data, 24);
|
||||||
repair.add(new PlayerStat(playerName, Integer.parseInt(data[7])));
|
powerLevel += loadStat(fishing, playerName, data, 34);
|
||||||
powerLevel += Integer.parseInt(data[7]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 8 && StringUtils.isInt(data[8])) {
|
|
||||||
unarmed.add(new PlayerStat(playerName, Integer.parseInt(data[8])));
|
|
||||||
powerLevel += Integer.parseInt(data[8]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 9 && StringUtils.isInt(data[9])) {
|
|
||||||
herbalism.add(new PlayerStat(playerName, Integer.parseInt(data[9])));
|
|
||||||
powerLevel += Integer.parseInt(data[9]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 10 && StringUtils.isInt(data[10])) {
|
|
||||||
excavation.add(new PlayerStat(playerName, Integer.parseInt(data[10])));
|
|
||||||
powerLevel += Integer.parseInt(data[10]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 11 && StringUtils.isInt(data[11])) {
|
|
||||||
archery.add(new PlayerStat(playerName, Integer.parseInt(data[11])));
|
|
||||||
powerLevel += Integer.parseInt(data[11]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 12 && StringUtils.isInt(data[12])) {
|
|
||||||
swords.add(new PlayerStat(playerName, Integer.parseInt(data[12])));
|
|
||||||
powerLevel += Integer.parseInt(data[12]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 13 && StringUtils.isInt(data[13])) {
|
|
||||||
axes.add(new PlayerStat(playerName, Integer.parseInt(data[13])));
|
|
||||||
powerLevel += Integer.parseInt(data[13]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 14 && StringUtils.isInt(data[14])) {
|
|
||||||
acrobatics.add(new PlayerStat(playerName, Integer.parseInt(data[14])));
|
|
||||||
powerLevel += Integer.parseInt(data[14]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 24 && StringUtils.isInt(data[24])) {
|
|
||||||
taming.add(new PlayerStat(playerName, Integer.parseInt(data[24])));
|
|
||||||
powerLevel += Integer.parseInt(data[24]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.length > 34 && StringUtils.isInt(data[34])) {
|
|
||||||
fishing.add(new PlayerStat(playerName, Integer.parseInt(data[34])));
|
|
||||||
powerLevel += Integer.parseInt(data[34]);
|
|
||||||
}
|
|
||||||
|
|
||||||
powerLevels.add(new PlayerStat(playerName, powerLevel));
|
powerLevels.add(new PlayerStat(playerName, powerLevel));
|
||||||
}
|
}
|
||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
mcMMO.p.getLogger().severe("Exception while reading " + mcMMO.getUsersFilePath() + " (Are you sure you formatted it correctly?)" + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
SkillComparator c = new SkillComparator();
|
SkillComparator c = new SkillComparator();
|
||||||
@@ -177,38 +131,11 @@ public final class LeaderboardManager {
|
|||||||
* @param pageNumber Which page in the leaderboards to retrieve
|
* @param pageNumber Which page in the leaderboards to retrieve
|
||||||
* @return the requested leaderboard information
|
* @return the requested leaderboard information
|
||||||
*/
|
*/
|
||||||
public static String[] retrieveInfo(String skillType, int pageNumber) {
|
public static List<PlayerStat> retrieveInfo(String skillType, int pageNumber, int statsPerPage) {
|
||||||
String[] info = new String[10];
|
List<PlayerStat> statsList = skillType.equalsIgnoreCase("all") ? powerLevels : playerStatHash.get(SkillType.getSkill(skillType));
|
||||||
List<PlayerStat> statsList;
|
int fromIndex = (Math.max(pageNumber, 1) - 1) * statsPerPage;
|
||||||
|
|
||||||
if (skillType.equalsIgnoreCase("all")) {
|
return statsList.subList(Math.min(fromIndex, statsList.size()), Math.min(fromIndex + statsPerPage, statsList.size()));
|
||||||
statsList = powerLevels;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
statsList = playerStatHash.get(SkillType.getSkill(skillType));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pageNumber < 1) {
|
|
||||||
pageNumber = 1;
|
|
||||||
}
|
|
||||||
int destination = (pageNumber - 1) * 10;
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
if (destination + i < statsList.size()) {
|
|
||||||
PlayerStat ps = statsList.get(destination + i);
|
|
||||||
info[i] = ps.name + ":" + ps.statVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int[] getPlayerRank(String playerName) {
|
|
||||||
return getPlayerRank(playerName, powerLevels);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int[] getPlayerRank(String playerName, SkillType skillType) {
|
|
||||||
return getPlayerRank(playerName, playerStatHash.get(skillType));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean removeFlatFileUser(String playerName) {
|
public static boolean removeFlatFileUser(String playerName) {
|
||||||
@@ -266,7 +193,7 @@ public final class LeaderboardManager {
|
|||||||
return worked;
|
return worked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void purgePowerlessFlatfile() {
|
public static int purgePowerlessFlatfile() {
|
||||||
mcMMO.p.getLogger().info("Purging powerless users...");
|
mcMMO.p.getLogger().info("Purging powerless users...");
|
||||||
|
|
||||||
int purgedUsers = 0;
|
int purgedUsers = 0;
|
||||||
@@ -277,16 +204,10 @@ public final class LeaderboardManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.p.getLogger().info("Purged " + purgedUsers + " users from the database.");
|
return purgedUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void purgeOldFlatfile() {
|
public static int removeOldFlatfileUsers() {
|
||||||
mcMMO.p.getLogger().info("Purging old users...");
|
|
||||||
int purgedUsers = removeOldFlatfileUsers();
|
|
||||||
mcMMO.p.getLogger().info("Purged " + purgedUsers + " users from the database.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int removeOldFlatfileUsers() {
|
|
||||||
int removedPlayers = 0;
|
int removedPlayers = 0;
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
long purgeTime = ONE_MONTH * Config.getInstance().getOldUsersCutoff();
|
long purgeTime = ONE_MONTH * Config.getInstance().getOldUsersCutoff();
|
||||||
@@ -350,22 +271,51 @@ public final class LeaderboardManager {
|
|||||||
return removedPlayers;
|
return removedPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int[] getPlayerRank(String playerName, List<PlayerStat> statsList) {
|
private static Integer getPlayerRank(String playerName, List<PlayerStat> statsList) {
|
||||||
int currentPos = 1;
|
int currentPos = 1;
|
||||||
|
|
||||||
if (statsList == null) {
|
if (statsList == null) {
|
||||||
return new int[] {0, 0};
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (PlayerStat stat : statsList) {
|
for (PlayerStat stat : statsList) {
|
||||||
if (stat.name.equalsIgnoreCase(playerName)) {
|
if (stat.name.equalsIgnoreCase(playerName)) {
|
||||||
return new int[] {currentPos, stat.statVal};
|
return currentPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPos++;
|
currentPos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new int[] {0, 0};
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, Integer> getPlayerRanks(String playerName) {
|
||||||
|
updateLeaderboards();
|
||||||
|
|
||||||
|
Map<String, Integer> skills = new HashMap<String, Integer>();
|
||||||
|
|
||||||
|
for (SkillType skill : SkillType.nonChildSkills()) {
|
||||||
|
skills.put(skill.name(), getPlayerRank(playerName, playerStatHash.get(skill)));
|
||||||
|
}
|
||||||
|
|
||||||
|
skills.put("ALL", getPlayerRank(playerName, powerLevels));
|
||||||
|
|
||||||
|
return skills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<PlayerStat> getPlayerStats(String skillName) {
|
||||||
|
return (skillName.equalsIgnoreCase("all")) ? powerLevels : playerStatHash.get(SkillType.getSkill(skillName));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int loadStat(List<PlayerStat> statList, String playerName, String[] data, int dataIndex) {
|
||||||
|
if (data.length > dataIndex) {
|
||||||
|
int statValue = Integer.parseInt(data[dataIndex]);
|
||||||
|
|
||||||
|
statList.add(new PlayerStat(playerName, statValue));
|
||||||
|
return statValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SkillComparator implements Comparator<PlayerStat> {
|
private static class SkillComparator implements Comparator<PlayerStat> {
|
||||||
663
src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java
Normal file
663
src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java
Normal file
@@ -0,0 +1,663 @@
|
|||||||
|
package com.gmail.nossr50.database;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.database.DatabaseUpdateType;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.runnables.database.SQLReconnectTask;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
|
||||||
|
public final class SQLDatabaseManager {
|
||||||
|
private static String connectionString;
|
||||||
|
|
||||||
|
private static String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
||||||
|
private static Connection connection = null;
|
||||||
|
|
||||||
|
// Scale waiting time by this much per failed attempt
|
||||||
|
private static final double SCALING_FACTOR = 40;
|
||||||
|
|
||||||
|
// Minimum wait in nanoseconds (default 500ms)
|
||||||
|
private static final long MIN_WAIT = 500L * 1000000L;
|
||||||
|
|
||||||
|
// Maximum time to wait between reconnects (default 5 minutes)
|
||||||
|
private static final long MAX_WAIT = 5L * 60L * 1000L * 1000000L;
|
||||||
|
|
||||||
|
// How long to wait when checking if connection is valid (default 3 seconds)
|
||||||
|
private static final int VALID_TIMEOUT = 3;
|
||||||
|
|
||||||
|
// When next to try connecting to Database in nanoseconds
|
||||||
|
private static long nextReconnectTimestamp = 0L;
|
||||||
|
|
||||||
|
// How many connection attempts have failed
|
||||||
|
private static int reconnectAttempt = 0;
|
||||||
|
|
||||||
|
private static final long ONE_MONTH = 2630000000L;
|
||||||
|
|
||||||
|
private SQLDatabaseManager() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to connect to the mySQL database.
|
||||||
|
*/
|
||||||
|
public static void connect() {
|
||||||
|
Config configInstance = Config.getInstance();
|
||||||
|
connectionString = "jdbc:mysql://" + configInstance.getMySQLServerName() + ":" + configInstance.getMySQLServerPort() + "/" + configInstance.getMySQLDatabaseName();
|
||||||
|
|
||||||
|
try {
|
||||||
|
mcMMO.p.getLogger().info("Attempting connection to MySQL...");
|
||||||
|
|
||||||
|
// Force driver to load if not yet loaded
|
||||||
|
Class.forName("com.mysql.jdbc.Driver");
|
||||||
|
Properties connectionProperties = new Properties();
|
||||||
|
connectionProperties.put("user", configInstance.getMySQLUserName());
|
||||||
|
connectionProperties.put("password", configInstance.getMySQLUserPassword());
|
||||||
|
connectionProperties.put("autoReconnect", "false");
|
||||||
|
connectionProperties.put("maxReconnects", "0");
|
||||||
|
connection = DriverManager.getConnection(connectionString, connectionProperties);
|
||||||
|
|
||||||
|
mcMMO.p.getLogger().info("Connection to MySQL was a success!");
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
connection = null;
|
||||||
|
|
||||||
|
if (reconnectAttempt == 0 || reconnectAttempt >= 11) {
|
||||||
|
mcMMO.p.getLogger().info("Connection to MySQL failed!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (ClassNotFoundException ex) {
|
||||||
|
connection = null;
|
||||||
|
|
||||||
|
if (reconnectAttempt == 0 || reconnectAttempt >= 11) {
|
||||||
|
mcMMO.p.getLogger().info("MySQL database driver not found!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to create the database structure.
|
||||||
|
*/
|
||||||
|
public static void createStructure() {
|
||||||
|
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` ("
|
||||||
|
+ "`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
|
||||||
|
+ "`user` varchar(40) NOT NULL,"
|
||||||
|
+ "`lastlogin` int(32) unsigned NOT NULL,"
|
||||||
|
+ "PRIMARY KEY (`id`),"
|
||||||
|
+ "UNIQUE KEY `user` (`user`)) DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
|
||||||
|
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "huds` ("
|
||||||
|
+ "`user_id` int(10) unsigned NOT NULL,"
|
||||||
|
+ "`hudtype` varchar(50) NOT NULL DEFAULT 'STANDARD',"
|
||||||
|
+ "`mobhealthbar` varchar(50) NOT NULL DEFAULT '" + Config.getInstance().getMobHealthbarDefault() + "',"
|
||||||
|
+ "PRIMARY KEY (`user_id`)) "
|
||||||
|
+ "DEFAULT CHARSET=latin1;");
|
||||||
|
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "cooldowns` ("
|
||||||
|
+ "`user_id` int(10) unsigned NOT NULL,"
|
||||||
|
+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`blast_mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "PRIMARY KEY (`user_id`)) "
|
||||||
|
+ "DEFAULT CHARSET=latin1;");
|
||||||
|
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "skills` ("
|
||||||
|
+ "`user_id` int(10) unsigned NOT NULL,"
|
||||||
|
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "PRIMARY KEY (`user_id`)) "
|
||||||
|
+ "DEFAULT CHARSET=latin1;");
|
||||||
|
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "experience` ("
|
||||||
|
+ "`user_id` int(10) unsigned NOT NULL,"
|
||||||
|
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||||
|
+ "PRIMARY KEY (`user_id`)) "
|
||||||
|
+ "DEFAULT CHARSET=latin1;");
|
||||||
|
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.FISHING);
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.BLAST_MINING);
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.INDEX);
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.MOB_HEALTHBARS);
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.PARTY_NAMES);
|
||||||
|
checkDatabaseStructure(DatabaseUpdateType.KILL_ORPHANS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to write the SQL query.
|
||||||
|
*
|
||||||
|
* @param sql Query to write.
|
||||||
|
* @return true if the query was successfully written, false otherwise.
|
||||||
|
*/
|
||||||
|
public static boolean write(String sql) {
|
||||||
|
if (!checkConnected()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
try {
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
statement.executeUpdate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
if (!sql.equalsIgnoreCase("ALTER TABLE `" + tablePrefix + "users` DROP COLUMN `party` ;")) {
|
||||||
|
printErrors(ex);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (statement != null) {
|
||||||
|
try {
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean removeUserSQL(String playerName) {
|
||||||
|
return SQLDatabaseManager.update("DELETE FROM u, e, h, s, c " +
|
||||||
|
"USING " + tablePrefix + "users u " +
|
||||||
|
"JOIN " + tablePrefix + "experience e ON (u.id = e.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "huds h ON (u.id = h.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "skills s ON (u.id = s.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "cooldowns c ON (u.id = c.user_id) " +
|
||||||
|
"WHERE u.user = '" + playerName + "'") != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of rows affected by either a DELETE or UPDATE query
|
||||||
|
*
|
||||||
|
* @param sql SQL query to execute
|
||||||
|
* @return the number of rows affected
|
||||||
|
*/
|
||||||
|
public static int update(String sql) {
|
||||||
|
if (!checkConnected()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rows = 0;
|
||||||
|
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
try {
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
rows = statement.executeUpdate();
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
printErrors(ex);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (statement != null) {
|
||||||
|
try {
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Integer. Only return first row / first field.
|
||||||
|
*
|
||||||
|
* @param sql SQL query to execute
|
||||||
|
* @return the value in the first row / first field
|
||||||
|
*/
|
||||||
|
public static int getInt(String sql) {
|
||||||
|
if (!checkConnected()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
if (resultSet.next()) {
|
||||||
|
result = resultSet.getInt(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
printErrors(ex);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (statement != null) {
|
||||||
|
try {
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check connection status and re-establish if dead or stale.
|
||||||
|
*
|
||||||
|
* If the very first immediate attempt fails, further attempts
|
||||||
|
* will be made in progressively larger intervals up to MAX_WAIT
|
||||||
|
* intervals.
|
||||||
|
*
|
||||||
|
* This allows for MySQL to time out idle connections as needed by
|
||||||
|
* server operator, without affecting McMMO, while still providing
|
||||||
|
* protection against a database outage taking down Bukkit's tick
|
||||||
|
* processing loop due to attemping a database connection each
|
||||||
|
* time McMMO needs the database.
|
||||||
|
*
|
||||||
|
* @return the boolean value for whether or not we are connected
|
||||||
|
*/
|
||||||
|
public static boolean checkConnected() {
|
||||||
|
boolean isClosed = true;
|
||||||
|
boolean isValid = false;
|
||||||
|
boolean exists = (connection != null);
|
||||||
|
|
||||||
|
// If we're waiting for server to recover then leave early
|
||||||
|
if (nextReconnectTimestamp > 0 && nextReconnectTimestamp > System.nanoTime()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists) {
|
||||||
|
try {
|
||||||
|
isClosed = connection.isClosed();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
isClosed = true;
|
||||||
|
e.printStackTrace();
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isClosed) {
|
||||||
|
try {
|
||||||
|
isValid = connection.isValid(VALID_TIMEOUT);
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
// Don't print stack trace because it's valid to lose idle connections to the server and have to restart them.
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Leave if all ok
|
||||||
|
if (exists && !isClosed && isValid) {
|
||||||
|
// Housekeeping
|
||||||
|
nextReconnectTimestamp = 0;
|
||||||
|
reconnectAttempt = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup after ourselves for GC and MySQL's sake
|
||||||
|
if (exists && !isClosed) {
|
||||||
|
try {
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
// This is a housekeeping exercise, ignore errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to connect again
|
||||||
|
connect();
|
||||||
|
|
||||||
|
// Leave if connection is good
|
||||||
|
try {
|
||||||
|
if (connection != null && !connection.isClosed()) {
|
||||||
|
// Schedule a database save if we really had an outage
|
||||||
|
if (reconnectAttempt > 1) {
|
||||||
|
new SQLReconnectTask().runTaskLater(mcMMO.p, 5);
|
||||||
|
}
|
||||||
|
nextReconnectTimestamp = 0;
|
||||||
|
reconnectAttempt = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
// Failed to check isClosed, so presume connection is bad and attempt later
|
||||||
|
e.printStackTrace();
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
reconnectAttempt++;
|
||||||
|
nextReconnectTimestamp = (long)(System.nanoTime() + Math.min(MAX_WAIT, (reconnectAttempt * SCALING_FACTOR * MIN_WAIT)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read SQL query.
|
||||||
|
*
|
||||||
|
* @param sql SQL query to read
|
||||||
|
* @return the rows in this SQL query
|
||||||
|
*/
|
||||||
|
public static HashMap<Integer, ArrayList<String>> read(String sql) {
|
||||||
|
ResultSet resultSet;
|
||||||
|
HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>();
|
||||||
|
|
||||||
|
if (checkConnected()) {
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
ArrayList<String> column = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
||||||
|
column.add(resultSet.getString(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
rows.put(resultSet.getRow(), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
printErrors(ex);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (statement != null) {
|
||||||
|
try {
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
printErrors(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, Integer> readSQLRank(String playerName) {
|
||||||
|
ResultSet resultSet;
|
||||||
|
Map<String, Integer> skills = new HashMap<String, Integer>();
|
||||||
|
|
||||||
|
if (checkConnected()) {
|
||||||
|
try {
|
||||||
|
for (SkillType skillType : SkillType.nonChildSkills()) {
|
||||||
|
String skillName = skillType.name().toLowerCase();
|
||||||
|
String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " +
|
||||||
|
"AND " + skillName + " > (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
||||||
|
"WHERE user = ?)";
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
|
statement.setString(1, playerName);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
resultSet.next();
|
||||||
|
|
||||||
|
int rank = resultSet.getInt("rank");
|
||||||
|
|
||||||
|
sql = "SELECT user, " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " +
|
||||||
|
"AND " + skillName + " = (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
||||||
|
"WHERE user = '" + playerName + "') ORDER BY user";
|
||||||
|
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
if (resultSet.getString("user").equalsIgnoreCase(playerName)) {
|
||||||
|
skills.put(skillType.name(), rank + resultSet.getRow());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
||||||
|
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
||||||
|
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > " +
|
||||||
|
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
||||||
|
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?)";
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
|
statement.setString(1, playerName);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
resultSet.next();
|
||||||
|
|
||||||
|
int rank = resultSet.getInt("rank");
|
||||||
|
|
||||||
|
sql = "SELECT user, taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
||||||
|
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
||||||
|
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
||||||
|
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing = " +
|
||||||
|
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
||||||
|
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?) ORDER BY user";
|
||||||
|
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
statement.setString(1, playerName);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
if (resultSet.getString("user").equalsIgnoreCase(playerName)) {
|
||||||
|
skills.put("ALL", rank + resultSet.getRow());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
printErrors(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return skills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int purgePowerlessSQL() {
|
||||||
|
HashMap<Integer, ArrayList<String>> usernames = read("SELECT u.user FROM " + tablePrefix + "skills AS s, " + tablePrefix + "users AS u WHERE s.user_id = u.id AND (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0");
|
||||||
|
write("DELETE FROM u, e, h, s, c USING " + tablePrefix + "users u " +
|
||||||
|
"JOIN " + tablePrefix + "experience e ON (u.id = e.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "huds h ON (u.id = h.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "skills s ON (u.id = s.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "cooldowns c ON (u.id = c.user_id) " +
|
||||||
|
"WHERE (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0");
|
||||||
|
return processPurge(usernames.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int purgeOldSQL() {
|
||||||
|
long currentTime = System.currentTimeMillis();
|
||||||
|
long purgeTime = ONE_MONTH * Config.getInstance().getOldUsersCutoff();
|
||||||
|
|
||||||
|
HashMap<Integer, ArrayList<String>> usernames = read("SELECT user FROM " + tablePrefix + "users WHERE ((" + currentTime + " - lastlogin*1000) > " + purgeTime + ")");
|
||||||
|
write("DELETE FROM u, e, h, s, c USING " + tablePrefix + "users u " +
|
||||||
|
"JOIN " + tablePrefix + "experience e ON (u.id = e.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "huds h ON (u.id = h.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "skills s ON (u.id = s.user_id) " +
|
||||||
|
"JOIN " + tablePrefix + "cooldowns c ON (u.id = c.user_id) " +
|
||||||
|
"WHERE ((" + currentTime + " - lastlogin*1000) > " + purgeTime + ")");
|
||||||
|
|
||||||
|
return processPurge(usernames.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int processPurge(Collection<ArrayList<String>> usernames) {
|
||||||
|
int purgedUsers = 0;
|
||||||
|
|
||||||
|
for (ArrayList<String> user : usernames) {
|
||||||
|
Misc.profileCleanup(user.get(0));
|
||||||
|
purgedUsers++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return purgedUsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check database structure for missing values.
|
||||||
|
*
|
||||||
|
* @param update Type of data to check updates for
|
||||||
|
*/
|
||||||
|
private static void checkDatabaseStructure(DatabaseUpdateType update) {
|
||||||
|
String sql = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>();
|
||||||
|
|
||||||
|
switch (update) {
|
||||||
|
case BLAST_MINING:
|
||||||
|
sql = "SELECT * FROM `" + tablePrefix + "cooldowns` ORDER BY `" + tablePrefix + "cooldowns`.`blast_mining` ASC LIMIT 0 , 30";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FISHING:
|
||||||
|
sql = "SELECT * FROM `" + tablePrefix + "experience` ORDER BY `" + tablePrefix + "experience`.`fishing` ASC LIMIT 0 , 30";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INDEX:
|
||||||
|
if (read("SHOW INDEX FROM " + tablePrefix + "skills").size() != 13 && checkConnected()) {
|
||||||
|
mcMMO.p.getLogger().info("Indexing tables, this may take a while on larger databases");
|
||||||
|
write("ALTER TABLE `" + tablePrefix + "skills` ADD INDEX `idx_taming` (`taming`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_mining` (`mining`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_woodcutting` (`woodcutting`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_repair` (`repair`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_unarmed` (`unarmed`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_herbalism` (`herbalism`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_excavation` (`excavation`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_archery` (`archery`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_swords` (`swords`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_axes` (`axes`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_acrobatics` (`acrobatics`) USING BTREE, "
|
||||||
|
+ "ADD INDEX `idx_fishing` (`fishing`) USING BTREE;");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case MOB_HEALTHBARS:
|
||||||
|
sql = "SELECT * FROM `" + tablePrefix + "huds` ORDER BY `" + tablePrefix + "huds`.`mobhealthbar` ASC LIMIT 0 , 30";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PARTY_NAMES:
|
||||||
|
write("ALTER TABLE `" + tablePrefix + "users` DROP COLUMN `party` ;");
|
||||||
|
return;
|
||||||
|
|
||||||
|
case KILL_ORPHANS:
|
||||||
|
mcMMO.p.getLogger().info("Killing orphans");
|
||||||
|
write(
|
||||||
|
"DELETE FROM " + tablePrefix + "experience " +
|
||||||
|
"WHERE NOT EXISTS (SELECT * FROM " +
|
||||||
|
tablePrefix + "users u WHERE " +
|
||||||
|
tablePrefix + "experience.user_id = u.id);"
|
||||||
|
);
|
||||||
|
write(
|
||||||
|
"DELETE FROM " + tablePrefix + "huds " +
|
||||||
|
"WHERE NOT EXISTS (SELECT * FROM " +
|
||||||
|
tablePrefix + "users u WHERE " +
|
||||||
|
tablePrefix + "huds.user_id = u.id);"
|
||||||
|
);
|
||||||
|
write(
|
||||||
|
"DELETE FROM " + tablePrefix + "cooldowns " +
|
||||||
|
"WHERE NOT EXISTS (SELECT * FROM " +
|
||||||
|
tablePrefix + "users u WHERE " +
|
||||||
|
tablePrefix + "cooldowns.user_id = u.id);"
|
||||||
|
);
|
||||||
|
write(
|
||||||
|
"DELETE FROM " + tablePrefix + "skills " +
|
||||||
|
"WHERE NOT EXISTS (SELECT * FROM " +
|
||||||
|
tablePrefix + "users u WHERE " +
|
||||||
|
tablePrefix + "skills.user_id = u.id);"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
try {
|
||||||
|
if (!checkConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
ArrayList<String> column = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
||||||
|
column.add(resultSet.getString(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
rows.put(resultSet.getRow(), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException ex) {
|
||||||
|
switch (update) {
|
||||||
|
case BLAST_MINING:
|
||||||
|
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for Blast Mining...");
|
||||||
|
write("ALTER TABLE `"+tablePrefix + "cooldowns` ADD `blast_mining` int(32) NOT NULL DEFAULT '0' ;");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FISHING:
|
||||||
|
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for Fishing...");
|
||||||
|
write("ALTER TABLE `"+tablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
||||||
|
write("ALTER TABLE `"+tablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOB_HEALTHBARS:
|
||||||
|
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for mob healthbars...");
|
||||||
|
write("ALTER TABLE `" + tablePrefix + "huds` ADD `mobhealthbar` varchar(50) NOT NULL DEFAULT '" + Config.getInstance().getMobHealthbarDefault() + "' ;");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (statement != null) {
|
||||||
|
try {
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
// Ignore the error, we're leaving
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printErrors(SQLException ex) {
|
||||||
|
mcMMO.p.getLogger().severe("SQLException: " + ex.getMessage());
|
||||||
|
mcMMO.p.getLogger().severe("SQLState: " + ex.getSQLState());
|
||||||
|
mcMMO.p.getLogger().severe("VendorError: " + ex.getErrorCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.gmail.nossr50.datatypes;
|
||||||
|
|
||||||
|
public enum MobHealthbarType {
|
||||||
|
HEARTS,
|
||||||
|
BAR,
|
||||||
|
DISABLED;
|
||||||
|
}
|
||||||
@@ -3,6 +3,9 @@ package com.gmail.nossr50.datatypes.database;
|
|||||||
public enum DatabaseUpdateType {
|
public enum DatabaseUpdateType {
|
||||||
FISHING,
|
FISHING,
|
||||||
BLAST_MINING,
|
BLAST_MINING,
|
||||||
CASCADE_DELETE,
|
INDEX,
|
||||||
INDEX;
|
MOB_HEALTHBARS,
|
||||||
|
PARTY_NAMES,
|
||||||
|
KILL_ORPHANS,
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.gmail.nossr50.datatypes.party;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
|
|
||||||
|
public enum ItemShareType {
|
||||||
|
LOOT,
|
||||||
|
MINING,
|
||||||
|
HERBALISM,
|
||||||
|
WOODCUTTING,
|
||||||
|
MISC;
|
||||||
|
|
||||||
|
public static ItemShareType getShareType(ItemStack itemStack) {
|
||||||
|
if (ItemUtils.isMobDrop(itemStack)) {
|
||||||
|
return LOOT;
|
||||||
|
}
|
||||||
|
else if (ItemUtils.isMiningDrop(itemStack)) {
|
||||||
|
return MINING;
|
||||||
|
}
|
||||||
|
else if (ItemUtils.isHerbalismDrop(itemStack)) {
|
||||||
|
return HERBALISM;
|
||||||
|
}
|
||||||
|
else if (ItemUtils.isWoodcuttingDrop(itemStack)) {
|
||||||
|
return WOODCUTTING;
|
||||||
|
}
|
||||||
|
else if (ItemUtils.isMiscDrop(itemStack)) {
|
||||||
|
return MISC;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,36 +1,41 @@
|
|||||||
package com.gmail.nossr50.datatypes.party;
|
package com.gmail.nossr50.datatypes.party;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.party.ShareHandler;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.ShareHandler.ShareMode;
|
||||||
|
|
||||||
public class Party {
|
public class Party {
|
||||||
private List<OfflinePlayer> members = new ArrayList<OfflinePlayer>();
|
private LinkedHashSet<String> members = new LinkedHashSet<String>();
|
||||||
private String leader;
|
private String leader;
|
||||||
private String name;
|
private String name;
|
||||||
private String password;
|
private String password;
|
||||||
private boolean locked;
|
private boolean locked;
|
||||||
|
|
||||||
private ShareHandler.ShareMode xpShareMode = ShareHandler.ShareMode.NONE;
|
private ShareMode xpShareMode = ShareMode.NONE;
|
||||||
private ShareHandler.ShareMode itemShareMode = ShareHandler.ShareMode.NONE;
|
private ShareMode itemShareMode = ShareMode.NONE;
|
||||||
|
|
||||||
private boolean shareLootDrops = true;
|
private boolean shareLootDrops = true;
|
||||||
private boolean shareMiningDrops = true;
|
private boolean shareMiningDrops = true;
|
||||||
private boolean shareHerbalismDrops = true;
|
private boolean shareHerbalismDrops = true;
|
||||||
private boolean shareWoodcuttingDrops = true;
|
private boolean shareWoodcuttingDrops = true;
|
||||||
|
private boolean shareMiscDrops = true;
|
||||||
|
|
||||||
public List<OfflinePlayer> getMembers() {
|
public LinkedHashSet<String> getMembers() {
|
||||||
return members;
|
return members;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Player> getOnlineMembers() {
|
public List<Player> getOnlineMembers() {
|
||||||
List<Player> onlineMembers = new ArrayList<Player>();
|
List<Player> onlineMembers = new ArrayList<Player>();
|
||||||
|
|
||||||
for (OfflinePlayer member : members) {
|
for (String memberName : members) {
|
||||||
|
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
|
||||||
if (member.isOnline()) {
|
if (member.isOnline()) {
|
||||||
onlineMembers.add(member.getPlayer());
|
onlineMembers.add(member.getPlayer());
|
||||||
}
|
}
|
||||||
@@ -55,40 +60,27 @@ public class Party {
|
|||||||
return locked;
|
return locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sharingLootDrops() {
|
|
||||||
return shareLootDrops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean sharingMiningDrops() {
|
|
||||||
return shareMiningDrops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean sharingHerbalismDrops() {
|
|
||||||
return shareHerbalismDrops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean sharingWoodcuttingDrops() {
|
|
||||||
return shareWoodcuttingDrops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getItemShareCategories() {
|
public List<String> getItemShareCategories() {
|
||||||
List<String> shareCategories = new ArrayList<String>();
|
List<String> shareCategories = new ArrayList<String>();
|
||||||
|
|
||||||
// TODO Locale the category names!
|
if (shareLootDrops) {
|
||||||
if (sharingLootDrops()) {
|
shareCategories.add(LocaleLoader.getString("Party.ItemShare.Category.Loot"));
|
||||||
shareCategories.add("Loot");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sharingMiningDrops()) {
|
if (shareMiningDrops) {
|
||||||
shareCategories.add("Mining");
|
shareCategories.add(LocaleLoader.getString("Party.ItemShare.Category.Mining"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sharingHerbalismDrops()) {
|
if (shareHerbalismDrops) {
|
||||||
shareCategories.add("Herbalism");
|
shareCategories.add(LocaleLoader.getString("Party.ItemShare.Category.Herbalism"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sharingWoodcuttingDrops()) {
|
if (shareWoodcuttingDrops) {
|
||||||
shareCategories.add("Woodcutting");
|
shareCategories.add(LocaleLoader.getString("Party.ItemShare.Category.Woodcutting"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shareMiscDrops) {
|
||||||
|
shareCategories.add(LocaleLoader.getString("Party.ItemShare.Category.Misc"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return shareCategories;
|
return shareCategories;
|
||||||
@@ -110,35 +102,68 @@ public class Party {
|
|||||||
this.locked = locked;
|
this.locked = locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setXpShareMode(ShareHandler.ShareMode xpShareMode) {
|
public void setXpShareMode(ShareMode xpShareMode) {
|
||||||
this.xpShareMode = xpShareMode;
|
this.xpShareMode = xpShareMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShareHandler.ShareMode getXpShareMode() {
|
public ShareMode getXpShareMode() {
|
||||||
return xpShareMode;
|
return xpShareMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setItemShareMode(ShareHandler.ShareMode itemShareMode) {
|
public void setItemShareMode(ShareMode itemShareMode) {
|
||||||
this.itemShareMode = itemShareMode;
|
this.itemShareMode = itemShareMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShareHandler.ShareMode getItemShareMode() {
|
public ShareMode getItemShareMode() {
|
||||||
return itemShareMode;
|
return itemShareMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSharingLootDrops(boolean enabled) {
|
public boolean sharingDrops(ItemShareType shareType) {
|
||||||
shareLootDrops = enabled;
|
switch (shareType) {
|
||||||
|
case HERBALISM:
|
||||||
|
return shareHerbalismDrops;
|
||||||
|
|
||||||
|
case LOOT:
|
||||||
|
return shareLootDrops;
|
||||||
|
|
||||||
|
case MINING:
|
||||||
|
return shareMiningDrops;
|
||||||
|
|
||||||
|
case MISC:
|
||||||
|
return shareMiscDrops;
|
||||||
|
|
||||||
|
case WOODCUTTING:
|
||||||
|
return shareWoodcuttingDrops;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSharingMiningDrops(boolean enabled) {
|
public void setSharingDrops(ItemShareType shareType, boolean enabled) {
|
||||||
shareMiningDrops = enabled;
|
switch (shareType) {
|
||||||
}
|
case HERBALISM:
|
||||||
|
shareHerbalismDrops = enabled;
|
||||||
|
break;
|
||||||
|
|
||||||
public void setSharingHerbalismDrops(boolean enabled) {
|
case LOOT:
|
||||||
shareHerbalismDrops = enabled;
|
shareLootDrops = enabled;
|
||||||
}
|
break;
|
||||||
|
|
||||||
public void setSharingWoodcuttingDrops(boolean enabled) {
|
case MINING:
|
||||||
shareWoodcuttingDrops = enabled;
|
shareMiningDrops = enabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MISC:
|
||||||
|
shareMiscDrops = enabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WOODCUTTING:
|
||||||
|
shareWoodcuttingDrops = enabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.gmail.nossr50.datatypes.spout.huds.McMMOHud;
|
|||||||
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
|
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.party.ShareHandler;
|
import com.gmail.nossr50.party.ShareHandler;
|
||||||
|
import com.gmail.nossr50.runnables.skills.AbilityDisableTask;
|
||||||
import com.gmail.nossr50.skills.SkillManager;
|
import com.gmail.nossr50.skills.SkillManager;
|
||||||
import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
|
import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
|
||||||
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
||||||
@@ -70,7 +71,9 @@ public class McMMOPlayer {
|
|||||||
|
|
||||||
private boolean abilityUse = true;
|
private boolean abilityUse = true;
|
||||||
private boolean placedRepairAnvil;
|
private boolean placedRepairAnvil;
|
||||||
|
private int lastRepairClick;
|
||||||
private boolean placedSalvageAnvil;
|
private boolean placedSalvageAnvil;
|
||||||
|
private int lastSalvageClick;
|
||||||
private boolean godMode;
|
private boolean godMode;
|
||||||
|
|
||||||
private Map<AbilityType, Boolean> abilityMode = new HashMap<AbilityType, Boolean>();
|
private Map<AbilityType, Boolean> abilityMode = new HashMap<AbilityType, Boolean>();
|
||||||
@@ -79,18 +82,19 @@ public class McMMOPlayer {
|
|||||||
private Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
|
private Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
|
||||||
private Map<ToolType, Integer> toolATS = new HashMap<ToolType, Integer>();
|
private Map<ToolType, Integer> toolATS = new HashMap<ToolType, Integer>();
|
||||||
|
|
||||||
private int chimaeraWing;
|
|
||||||
private Location chimaeraWingCommence;
|
|
||||||
|
|
||||||
private int recentlyHurt;
|
private int recentlyHurt;
|
||||||
private int respawnATS;
|
private int respawnATS;
|
||||||
|
private int teleportLastUse;
|
||||||
|
private Location teleportCommence;
|
||||||
|
|
||||||
|
private boolean isUsingUnarmed;
|
||||||
|
|
||||||
public McMMOPlayer(Player player) {
|
public McMMOPlayer(Player player) {
|
||||||
String playerName = player.getName();
|
String playerName = player.getName();
|
||||||
|
|
||||||
this.player = player;
|
this.player = player;
|
||||||
profile = new PlayerProfile(playerName, true);
|
profile = new PlayerProfile(playerName, true);
|
||||||
party = PartyManager.getPlayerParty(playerName);
|
party = mcMMO.getPartyManager().getPlayerParty(playerName);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I'm using this method because it makes code shorter and safer (we don't have to add all SkillTypes manually),
|
* I'm using this method because it makes code shorter and safer (we don't have to add all SkillTypes manually),
|
||||||
@@ -179,7 +183,8 @@ public class McMMOPlayer {
|
|||||||
*/
|
*/
|
||||||
public void resetAbilityMode() {
|
public void resetAbilityMode() {
|
||||||
for (AbilityType ability : AbilityType.values()) {
|
for (AbilityType ability : AbilityType.values()) {
|
||||||
setAbilityMode(ability, false);
|
// Correctly disable and handle any special deactivate code
|
||||||
|
new AbilityDisableTask(this, ability).run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,31 +308,31 @@ public class McMMOPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Chimaera Wing
|
* Teleportation cooldown & warmup
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public int getLastChimaeraTeleport() {
|
public int getLastTeleport() {
|
||||||
return chimaeraWing;
|
return teleportLastUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLastChimaeraTeleport(int value) {
|
public void setLastTeleport(int value) {
|
||||||
chimaeraWing = value;
|
teleportLastUse = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void actualizeLastChimaeraTeleport() {
|
public void actualizeLastTeleport() {
|
||||||
chimaeraWing = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
teleportLastUse = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getChimaeraCommenceLocation() {
|
public Location getTeleportCommenceLocation() {
|
||||||
return chimaeraWingCommence;
|
return teleportCommence;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChimaeraCommenceLocation(Location location) {
|
public void setTeleportCommenceLocation(Location location) {
|
||||||
chimaeraWingCommence = location;
|
teleportCommence = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void actualizeChimaeraCommenceLocation(Player player) {
|
public void actualizeTeleportCommenceLocation(Player player) {
|
||||||
setChimaeraCommenceLocation(player.getLocation());
|
setTeleportCommenceLocation(player.getLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -368,6 +373,42 @@ public class McMMOPlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Repair Anvil Usage
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getLastAnvilUse(int anvilId) {
|
||||||
|
if (anvilId == Repair.repairAnvilId) {
|
||||||
|
return lastRepairClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (anvilId == Repair.salvageAnvilId) {
|
||||||
|
return lastSalvageClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastAnvilUse(int anvilId, int value) {
|
||||||
|
if (anvilId == Repair.repairAnvilId) {
|
||||||
|
lastRepairClick = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (anvilId == Repair.salvageAnvilId) {
|
||||||
|
lastSalvageClick = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizeLastAnvilUse(int anvilId) {
|
||||||
|
if (anvilId == Repair.repairAnvilId) {
|
||||||
|
lastRepairClick = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (anvilId == Repair.salvageAnvilId) {
|
||||||
|
lastSalvageClick = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* God Mode
|
* God Mode
|
||||||
*/
|
*/
|
||||||
@@ -400,11 +441,7 @@ public class McMMOPlayer {
|
|||||||
public int getPowerLevel() {
|
public int getPowerLevel() {
|
||||||
int powerLevel = 0;
|
int powerLevel = 0;
|
||||||
|
|
||||||
for (SkillType type : SkillType.values()) {
|
for (SkillType type : SkillType.nonChildSkills()) {
|
||||||
if (type.isChildSkill()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Permissions.skillEnabled(player, type)) {
|
if (Permissions.skillEnabled(player, type)) {
|
||||||
powerLevel += profile.getSkillLevel(type);
|
powerLevel += profile.getSkillLevel(type);
|
||||||
}
|
}
|
||||||
@@ -419,7 +456,7 @@ public class McMMOPlayer {
|
|||||||
* @param skillType Skill being used
|
* @param skillType Skill being used
|
||||||
* @param xp Experience amount to process
|
* @param xp Experience amount to process
|
||||||
*/
|
*/
|
||||||
public void beginXpGain(SkillType skillType, int xp) {
|
public void beginXpGain(SkillType skillType, float xp) {
|
||||||
if (xp == 0) {
|
if (xp == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -450,7 +487,7 @@ public class McMMOPlayer {
|
|||||||
* @param skillType Skill being used
|
* @param skillType Skill being used
|
||||||
* @param xp Experience amount to process
|
* @param xp Experience amount to process
|
||||||
*/
|
*/
|
||||||
public void beginUnsharedXpGain(SkillType skillType, int xp) {
|
public void beginUnsharedXpGain(SkillType skillType, float xp) {
|
||||||
xp = modifyXpGain(skillType, xp);
|
xp = modifyXpGain(skillType, xp);
|
||||||
|
|
||||||
applyXpGain(skillType, xp);
|
applyXpGain(skillType, xp);
|
||||||
@@ -462,19 +499,20 @@ public class McMMOPlayer {
|
|||||||
* @param skillType Skill being used
|
* @param skillType Skill being used
|
||||||
* @param xp Experience amount to add
|
* @param xp Experience amount to add
|
||||||
*/
|
*/
|
||||||
public void applyXpGain(SkillType skillType, int xp) {
|
public void applyXpGain(SkillType skillType, float xp) {
|
||||||
if (skillType.isChildSkill()) {
|
if (skillType.isChildSkill()) {
|
||||||
Set<SkillType> parentSkills = FamilyTree.getParents(skillType);
|
Set<SkillType> parentSkills = FamilyTree.getParents(skillType);
|
||||||
|
|
||||||
for (SkillType parentSkill : parentSkills) {
|
for (SkillType parentSkill : parentSkills) {
|
||||||
if (Permissions.skillEnabled(player, parentSkill)) {
|
applyXpGain(parentSkill, xp / parentSkills.size());
|
||||||
applyXpGain(parentSkill, xp / parentSkills.size());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Permissions.skillEnabled(player, skillType)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skillType, xp);
|
McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skillType, xp);
|
||||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
@@ -483,7 +521,7 @@ public class McMMOPlayer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + event.getXpGained());
|
profile.setSkillXpLevel(skillType, profile.getSkillXpLevelRaw(skillType) + event.getRawXpGained());
|
||||||
|
|
||||||
McMMOHud spoutHud = profile.getSpoutHud();
|
McMMOHud spoutHud = profile.getSpoutHud();
|
||||||
|
|
||||||
@@ -491,6 +529,7 @@ public class McMMOPlayer {
|
|||||||
spoutHud.setLastGained(skillType);
|
spoutHud.setLastGained(skillType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isUsingUnarmed = skillType == SkillType.UNARMED;
|
||||||
SkillUtils.xpCheckSkill(skillType, player, profile);
|
SkillUtils.xpCheckSkill(skillType, player, profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -642,6 +681,10 @@ public class McMMOPlayer {
|
|||||||
partyChatMode = !partyChatMode;
|
partyChatMode = !partyChatMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUsingUnarmed() {
|
||||||
|
return isUsingUnarmed;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifies an experience gain using skill modifiers, global rate and perks
|
* Modifies an experience gain using skill modifiers, global rate and perks
|
||||||
*
|
*
|
||||||
@@ -649,12 +692,12 @@ public class McMMOPlayer {
|
|||||||
* @param xp Experience amount to process
|
* @param xp Experience amount to process
|
||||||
* @return Modified experience
|
* @return Modified experience
|
||||||
*/
|
*/
|
||||||
private int modifyXpGain(SkillType skillType, int xp) {
|
private float modifyXpGain(SkillType skillType, float xp) {
|
||||||
if (player.getGameMode() == GameMode.CREATIVE || (skillType.getMaxLevel() < profile.getSkillLevel(skillType) + 1) || (Config.getInstance().getPowerLevelCap() < getPowerLevel() + 1)) {
|
if (player.getGameMode() == GameMode.CREATIVE || (skillType.getMaxLevel() < profile.getSkillLevel(skillType) + 1) || (Config.getInstance().getPowerLevelCap() < getPowerLevel() + 1)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp = (int) (xp / skillType.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier());
|
xp = (float) (xp / skillType.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier());
|
||||||
|
|
||||||
if (Config.getInstance().getToolModsEnabled()) {
|
if (Config.getInstance().getToolModsEnabled()) {
|
||||||
ItemStack item = player.getItemInHand();
|
ItemStack item = player.getItemInHand();
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -68,6 +68,13 @@ public enum AbilityType {
|
|||||||
null),
|
null),
|
||||||
|
|
||||||
LEAF_BLOWER(
|
LEAF_BLOWER(
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null),
|
||||||
|
|
||||||
|
BLOCK_CRACKER(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
@@ -144,7 +151,6 @@ public enum AbilityType {
|
|||||||
* @return true if the player has permissions, false otherwise
|
* @return true if the player has permissions, false otherwise
|
||||||
*/
|
*/
|
||||||
public boolean getPermissions(Player player) {
|
public boolean getPermissions(Player player) {
|
||||||
|
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case BERSERK:
|
case BERSERK:
|
||||||
return Permissions.berserk(player);
|
return Permissions.berserk(player);
|
||||||
@@ -152,6 +158,9 @@ public enum AbilityType {
|
|||||||
case BLAST_MINING:
|
case BLAST_MINING:
|
||||||
return Permissions.remoteDetonation(player);
|
return Permissions.remoteDetonation(player);
|
||||||
|
|
||||||
|
case BLOCK_CRACKER:
|
||||||
|
return Permissions.blockCracker(player);
|
||||||
|
|
||||||
case GIGA_DRILL_BREAKER:
|
case GIGA_DRILL_BREAKER:
|
||||||
return Permissions.gigaDrillBreaker(player);
|
return Permissions.gigaDrillBreaker(player);
|
||||||
|
|
||||||
@@ -189,6 +198,9 @@ public enum AbilityType {
|
|||||||
case BERSERK:
|
case BERSERK:
|
||||||
return (BlockUtils.affectedByGigaDrillBreaker(blockState) || blockState.getType() == Material.SNOW);
|
return (BlockUtils.affectedByGigaDrillBreaker(blockState) || blockState.getType() == Material.SNOW);
|
||||||
|
|
||||||
|
case BLOCK_CRACKER:
|
||||||
|
return BlockUtils.affectedByBlockCracker(blockState);
|
||||||
|
|
||||||
case GIGA_DRILL_BREAKER:
|
case GIGA_DRILL_BREAKER:
|
||||||
return BlockUtils.affectedByGigaDrillBreaker(blockState);
|
return BlockUtils.affectedByGigaDrillBreaker(blockState);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills;
|
package com.gmail.nossr50.datatypes.skills;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
@@ -20,6 +24,8 @@ import com.gmail.nossr50.skills.taming.TamingManager;
|
|||||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
public enum SkillType {
|
public enum SkillType {
|
||||||
ACROBATICS(AcrobaticsManager.class, Color.WHITE),
|
ACROBATICS(AcrobaticsManager.class, Color.WHITE),
|
||||||
@@ -41,6 +47,19 @@ public enum SkillType {
|
|||||||
private AbilityType ability;
|
private AbilityType ability;
|
||||||
private ToolType tool;
|
private ToolType tool;
|
||||||
|
|
||||||
|
public static final List<String> SKILL_NAMES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ArrayList<String> names = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (SkillType skill : values()) {
|
||||||
|
names.add(SkillUtils.getSkillName(skill));
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(names);
|
||||||
|
SKILL_NAMES = ImmutableList.copyOf(names);
|
||||||
|
}
|
||||||
|
|
||||||
private SkillType(Class<? extends SkillManager> managerClass, Color runescapeColor) {
|
private SkillType(Class<? extends SkillManager> managerClass, Color runescapeColor) {
|
||||||
this.managerClass = managerClass;
|
this.managerClass = managerClass;
|
||||||
this.runescapeColor = runescapeColor;
|
this.runescapeColor = runescapeColor;
|
||||||
@@ -89,7 +108,7 @@ public enum SkillType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public double getXpModifier() {
|
public double getXpModifier() {
|
||||||
return Config.getInstance().getForumulaMultiplier(this);
|
return Config.getInstance().getFormulaSkillModifier(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SkillType getSkill(String skillName) {
|
public static SkillType getSkill(String skillName) {
|
||||||
@@ -122,7 +141,36 @@ public enum SkillType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SkillType[] nonChildSkills() {
|
||||||
|
return new SkillType[] {SkillType.ACROBATICS,
|
||||||
|
SkillType.ARCHERY,
|
||||||
|
SkillType.AXES,
|
||||||
|
SkillType.EXCAVATION,
|
||||||
|
SkillType.FISHING,
|
||||||
|
SkillType.HERBALISM,
|
||||||
|
SkillType.MINING,
|
||||||
|
SkillType.REPAIR,
|
||||||
|
SkillType.SWORDS,
|
||||||
|
SkillType.TAMING,
|
||||||
|
SkillType.UNARMED,
|
||||||
|
SkillType.WOODCUTTING };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SkillType[] childSkills() {
|
||||||
|
return new SkillType[] { SkillType.SMELTING };
|
||||||
|
}
|
||||||
|
|
||||||
public Color getRunescapeModeColor() {
|
public Color getRunescapeModeColor() {
|
||||||
return runescapeColor;
|
return runescapeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SkillType byAbility(AbilityType ability) {
|
||||||
|
for (SkillType type : values()) {
|
||||||
|
if (type.getAbility() == ability) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.gmail.nossr50.datatypes.treasure;
|
||||||
|
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class ShakeTreasure extends Treasure {
|
||||||
|
private EntityType mob;
|
||||||
|
|
||||||
|
public ShakeTreasure(ItemStack drop, int xp, double dropChance, int dropLevel, EntityType mob) {
|
||||||
|
super(drop, xp, dropChance, dropLevel);
|
||||||
|
this.mob = mob;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityType getMob() {
|
||||||
|
return mob;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMob(EntityType mob) {
|
||||||
|
this.mob = mob;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,14 @@ public class McMMOPlayerLevelUpEvent extends McMMOPlayerExperienceEvent {
|
|||||||
this.levelsGained = levelsGained;
|
this.levelsGained = levelsGained;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param levelsGained
|
||||||
|
* @return Set the number of levels gained in this event
|
||||||
|
*/
|
||||||
|
public void setLevelsGained(int levelsGained) {
|
||||||
|
this.levelsGained = levelsGained;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The number of levels gained in this event
|
* @return The number of levels gained in this event
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import com.gmail.nossr50.datatypes.skills.SkillType;
|
|||||||
* Called when a player gains XP in a skill
|
* Called when a player gains XP in a skill
|
||||||
*/
|
*/
|
||||||
public class McMMOPlayerXpGainEvent extends McMMOPlayerExperienceEvent {
|
public class McMMOPlayerXpGainEvent extends McMMOPlayerExperienceEvent {
|
||||||
private int xpGained;
|
private float xpGained;
|
||||||
|
|
||||||
public McMMOPlayerXpGainEvent(Player player, SkillType skill, int xpGained) {
|
public McMMOPlayerXpGainEvent(Player player, SkillType skill, float xpGained) {
|
||||||
super(player, skill);
|
super(player, skill);
|
||||||
this.xpGained = xpGained;
|
this.xpGained = xpGained;
|
||||||
}
|
}
|
||||||
@@ -18,13 +18,29 @@ public class McMMOPlayerXpGainEvent extends McMMOPlayerExperienceEvent {
|
|||||||
/**
|
/**
|
||||||
* @return The amount of experience gained in this event
|
* @return The amount of experience gained in this event
|
||||||
*/
|
*/
|
||||||
public int getXpGained() {
|
public float getRawXpGained() {
|
||||||
return xpGained;
|
return xpGained;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param xpGained int amount of experience gained in this event
|
* @param xpGained int amount of experience gained in this event
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public int getXpGained() {
|
||||||
|
return (int) xpGained;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param xpGained int amount of experience gained in this event
|
||||||
|
*/
|
||||||
|
public void setRawXpGained(float xpGained) {
|
||||||
|
this.xpGained = xpGained;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param xpGained int amount of experience gained in this event
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void setXpGained(int xpGained) {
|
public void setXpGained(int xpGained) {
|
||||||
this.xpGained = xpGained;
|
this.xpGained = xpGained;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.gmail.nossr50.events.fake;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Fish;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerFishEvent;
|
||||||
|
|
||||||
|
public class FakePlayerFishEvent extends PlayerFishEvent {
|
||||||
|
public FakePlayerFishEvent(Player player, Entity entity, Fish hookEntity, State state) {
|
||||||
|
super(player, entity, hookEntity, state);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.gmail.nossr50.events.skills.abilities;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
|
||||||
|
|
||||||
|
public class McMMOPlayerAbilityActivateEvent extends McMMOPlayerSkillEvent implements Cancellable {
|
||||||
|
|
||||||
|
private AbilityType abilityType;
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
public McMMOPlayerAbilityActivateEvent(Player player, SkillType skill) {
|
||||||
|
super(player, skill);
|
||||||
|
abilityType = skill.getAbility();
|
||||||
|
cancelled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The ability type involved in this event
|
||||||
|
*/
|
||||||
|
public AbilityType getAbilityType() {
|
||||||
|
return abilityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean value) {
|
||||||
|
this.cancelled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.gmail.nossr50.events.skills.abilities;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
|
||||||
|
|
||||||
|
public class McMMOPlayerAbilityDeactivateEvent extends McMMOPlayerSkillEvent {
|
||||||
|
|
||||||
|
private AbilityType ability;
|
||||||
|
|
||||||
|
public McMMOPlayerAbilityDeactivateEvent(Player player, SkillType skill) {
|
||||||
|
super(player, skill);
|
||||||
|
this.ability = skill.getAbility();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbilityType getAbility() {
|
||||||
|
return ability;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.gmail.nossr50.events.skills.fishing;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
|
||||||
|
|
||||||
|
public class McMMOPlayerFishingTreasureEvent extends McMMOPlayerSkillEvent implements Cancellable {
|
||||||
|
|
||||||
|
private boolean cancelled = false;
|
||||||
|
private ItemStack treasure;
|
||||||
|
private int xp;
|
||||||
|
|
||||||
|
public McMMOPlayerFishingTreasureEvent(Player player, ItemStack treasure, int xp) {
|
||||||
|
super(player, SkillType.FISHING);
|
||||||
|
this.treasure = treasure;
|
||||||
|
this.xp = xp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getTreasure() {
|
||||||
|
return treasure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTreasure(ItemStack item) {
|
||||||
|
this.treasure = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean newValue) {
|
||||||
|
this.cancelled = newValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getXp() {
|
||||||
|
return xp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setXp(int xp) {
|
||||||
|
this.xp = xp;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.gmail.nossr50.events.skills.fishing;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class McMMOPlayerMagicHunterEvent extends McMMOPlayerFishingTreasureEvent {
|
||||||
|
|
||||||
|
private Map<Enchantment, Integer> enchants;
|
||||||
|
|
||||||
|
public McMMOPlayerMagicHunterEvent(Player player, ItemStack treasure, int xp, Map<Enchantment, Integer> enchants) {
|
||||||
|
super(player, treasure, xp);
|
||||||
|
this.enchants = enchants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Enchantment, Integer> getEnchantments() {
|
||||||
|
return enchants;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.gmail.nossr50.events.skills.fishing;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
|
||||||
|
|
||||||
|
public class McMMOPlayerShakeEvent extends McMMOPlayerSkillEvent implements Cancellable {
|
||||||
|
|
||||||
|
private boolean cancelled = false;
|
||||||
|
private ItemStack drop;
|
||||||
|
|
||||||
|
public McMMOPlayerShakeEvent(Player player, ItemStack drop) {
|
||||||
|
super(player, SkillType.FISHING);
|
||||||
|
this.drop = drop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean newValue) {
|
||||||
|
this.cancelled = newValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getDrop() {
|
||||||
|
return drop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDrop(ItemStack drop) {
|
||||||
|
this.drop = drop;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,14 +28,12 @@ import com.gmail.nossr50.datatypes.skills.SkillType;
|
|||||||
import com.gmail.nossr50.datatypes.skills.ToolType;
|
import com.gmail.nossr50.datatypes.skills.ToolType;
|
||||||
import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
|
import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
|
||||||
import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
|
import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
|
||||||
import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
|
|
||||||
import com.gmail.nossr50.runnables.StickyPistonTrackerTask;
|
import com.gmail.nossr50.runnables.StickyPistonTrackerTask;
|
||||||
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.repair.Repair;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
|
||||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
@@ -63,18 +61,20 @@ public class BlockListener implements Listener {
|
|||||||
Block futureEmptyBlock = event.getBlock().getRelative(direction); // Block that would be air after piston is finished
|
Block futureEmptyBlock = event.getBlock().getRelative(direction); // Block that would be air after piston is finished
|
||||||
|
|
||||||
for (Block b : blocks) {
|
for (Block b : blocks) {
|
||||||
if (BlockUtils.shouldBeWatched(b.getState()) && mcMMO.placeStore.isTrue(b)) {
|
if (BlockUtils.shouldBeWatched(b.getState()) && mcMMO.getPlaceStore().isTrue(b)) {
|
||||||
b.getRelative(direction).setMetadata(mcMMO.blockMetadataKey, mcMMO.metadataValue);
|
b.getRelative(direction).setMetadata(mcMMO.blockMetadataKey, mcMMO.metadataValue);
|
||||||
if (b.equals(futureEmptyBlock)) {
|
if (b.equals(futureEmptyBlock)) {
|
||||||
mcMMO.placeStore.setFalse(b);
|
mcMMO.getPlaceStore().setFalse(b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Block b : blocks) {
|
for (Block b : blocks) {
|
||||||
if (b.getRelative(direction).hasMetadata(mcMMO.blockMetadataKey)) {
|
Block nextBlock = b.getRelative(direction);
|
||||||
mcMMO.placeStore.setTrue(b.getRelative(direction));
|
|
||||||
b.getRelative(direction).removeMetadata(mcMMO.blockMetadataKey, plugin);
|
if (nextBlock.hasMetadata(mcMMO.blockMetadataKey)) {
|
||||||
|
mcMMO.getPlaceStore().setTrue(nextBlock);
|
||||||
|
nextBlock.removeMetadata(mcMMO.blockMetadataKey, plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,15 +106,14 @@ public class BlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BlockState blockState = event.getBlock().getState();
|
BlockState blockState = event.getBlock().getState();
|
||||||
int blockId = blockState.getTypeId();
|
|
||||||
|
|
||||||
/* Check if the blocks placed should be monitored so they do not give out XP in the future */
|
/* Check if the blocks placed should be monitored so they do not give out XP in the future */
|
||||||
if (BlockUtils.shouldBeWatched(blockState)) {
|
if (BlockUtils.shouldBeWatched(blockState)) {
|
||||||
mcMMO.placeStore.setTrue(blockState);
|
mcMMO.getPlaceStore().setTrue(blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Repair.anvilMessagesEnabled && (blockId == Repair.repairAnvilId || blockId == Repair.salvageAnvilId)) {
|
if (Repair.anvilMessagesEnabled && BlockUtils.isMcMMOAnvil(blockState)) {
|
||||||
UserManager.getPlayer(player).getRepairManager().placedAnvilCheck(blockId);
|
UserManager.getPlayer(player).getRepairManager().placedAnvilCheck(blockState.getTypeId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,13 +162,13 @@ public class BlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* MINING */
|
/* MINING */
|
||||||
else if (BlockUtils.affectedBySuperBreaker(blockState) && ItemUtils.isPickaxe(heldItem) && Permissions.skillEnabled(player, SkillType.MINING) && !mcMMO.placeStore.isTrue(blockState)) {
|
else if (BlockUtils.affectedBySuperBreaker(blockState) && ItemUtils.isPickaxe(heldItem) && Permissions.skillEnabled(player, SkillType.MINING) && !mcMMO.getPlaceStore().isTrue(blockState)) {
|
||||||
MiningManager miningManager = mcMMOPlayer.getMiningManager();
|
MiningManager miningManager = mcMMOPlayer.getMiningManager();
|
||||||
miningManager.miningBlockCheck(blockState);
|
miningManager.miningBlockCheck(blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WOOD CUTTING */
|
/* WOOD CUTTING */
|
||||||
else if (BlockUtils.isLog(blockState) && Permissions.skillEnabled(player, SkillType.WOODCUTTING) && !mcMMO.placeStore.isTrue(blockState)) {
|
else if (BlockUtils.isLog(blockState) && Permissions.skillEnabled(player, SkillType.WOODCUTTING) && !mcMMO.getPlaceStore().isTrue(blockState)) {
|
||||||
WoodcuttingManager woodcuttingManager = mcMMOPlayer.getWoodcuttingManager();
|
WoodcuttingManager woodcuttingManager = mcMMOPlayer.getWoodcuttingManager();
|
||||||
|
|
||||||
if (woodcuttingManager.canUseTreeFeller(heldItem)) {
|
if (woodcuttingManager.canUseTreeFeller(heldItem)) {
|
||||||
@@ -181,7 +180,7 @@ public class BlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* EXCAVATION */
|
/* EXCAVATION */
|
||||||
else if (BlockUtils.affectedByGigaDrillBreaker(blockState) && ItemUtils.isShovel(heldItem) && Permissions.skillEnabled(player, SkillType.EXCAVATION) && !mcMMO.placeStore.isTrue(blockState)) {
|
else if (BlockUtils.affectedByGigaDrillBreaker(blockState) && ItemUtils.isShovel(heldItem) && Permissions.skillEnabled(player, SkillType.EXCAVATION) && !mcMMO.getPlaceStore().isTrue(blockState)) {
|
||||||
ExcavationManager excavationManager = mcMMOPlayer.getExcavationManager();
|
ExcavationManager excavationManager = mcMMOPlayer.getExcavationManager();
|
||||||
excavationManager.excavationBlockCheck(blockState);
|
excavationManager.excavationBlockCheck(blockState);
|
||||||
|
|
||||||
@@ -191,7 +190,7 @@ public class BlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Remove metadata from placed watched blocks */
|
/* Remove metadata from placed watched blocks */
|
||||||
mcMMO.placeStore.setFalse(blockState);
|
mcMMO.getPlaceStore().setFalse(blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -298,7 +297,7 @@ public class BlockListener implements Listener {
|
|||||||
* We don't need to check permissions here because they've already been checked for the ability to even activate.
|
* We don't need to check permissions here because they've already been checked for the ability to even activate.
|
||||||
*/
|
*/
|
||||||
if (mcMMOPlayer.getAbilityMode(AbilityType.TREE_FELLER) && BlockUtils.isLog(blockState)) {
|
if (mcMMOPlayer.getAbilityMode(AbilityType.TREE_FELLER) && BlockUtils.isLog(blockState)) {
|
||||||
player.playSound(blockState.getLocation(), Sound.FIZZ, Misc.FIZZ_VOLUME, Misc.FIZZ_PITCH);
|
player.playSound(blockState.getLocation(), Sound.FIZZ, Misc.FIZZ_VOLUME, Misc.getFizzPitch());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,41 +322,31 @@ public class BlockListener implements Listener {
|
|||||||
ItemStack heldItem = player.getItemInHand();
|
ItemStack heldItem = player.getItemInHand();
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
BlockState blockState = block.getState();
|
BlockState blockState = block.getState();
|
||||||
HerbalismManager herbalismManager = mcMMOPlayer.getHerbalismManager();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ABILITY TRIGGER CHECKS
|
* ABILITY TRIGGER CHECKS
|
||||||
*
|
*
|
||||||
* We don't need to check permissions here because they've already been checked for the ability to even activate.
|
* We don't need to check permissions here because they've already been checked for the ability to even activate.
|
||||||
*/
|
*/
|
||||||
if (herbalismManager.canGreenTerraBlock(blockState)) {
|
if (mcMMOPlayer.getAbilityMode(AbilityType.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState)) {
|
||||||
if (herbalismManager.processGreenTerra(blockState)) {
|
if (mcMMOPlayer.getHerbalismManager().processGreenTerra(blockState)) {
|
||||||
blockState.update(true);
|
blockState.update(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mcMMOPlayer.getAbilityMode(AbilityType.BERSERK)) {
|
else if (mcMMOPlayer.getAbilityMode(AbilityType.BERSERK) && heldItem.getType() == Material.AIR) {
|
||||||
if (SkillUtils.triggerCheck(player, block, AbilityType.BERSERK)) {
|
if (SkillUtils.triggerCheck(player, block, AbilityType.BERSERK)) {
|
||||||
if (heldItem.getType() == Material.AIR) {
|
event.setInstaBreak(true);
|
||||||
plugin.getServer().getPluginManager().callEvent(new FakePlayerAnimationEvent(player));
|
player.playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.getPopPitch());
|
||||||
|
|
||||||
event.setInstaBreak(true);
|
|
||||||
player.playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Another perm check for the cracked blocks activation
|
else if (Permissions.blockCracker(player) && SkillUtils.triggerCheck(player, block, AbilityType.BLOCK_CRACKER)) {
|
||||||
else if (BlockUtils.affectedByBlockCracker(blockState)) {
|
if (mcMMOPlayer.getUnarmedManager().blockCrackerCheck(blockState)) {
|
||||||
UnarmedManager unarmedManager = mcMMOPlayer.getUnarmedManager();
|
|
||||||
|
|
||||||
if (unarmedManager.canUseBlockCracker() && SkillUtils.blockBreakSimulate(block, player, false) && unarmedManager.blockCrackerCheck(blockState)) {
|
|
||||||
blockState.update();
|
blockState.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (BlockUtils.isLeaves(blockState)) {
|
else if (mcMMOPlayer.getWoodcuttingManager().canUseLeafBlower(heldItem) && SkillUtils.triggerCheck(player, block, AbilityType.LEAF_BLOWER)) {
|
||||||
if (mcMMOPlayer.getWoodcuttingManager().canUseLeafBlower(heldItem) && SkillUtils.blockBreakSimulate(block, player, true)) {
|
event.setInstaBreak(true);
|
||||||
event.setInstaBreak(true);
|
player.playSound(blockState.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.getPopPitch());
|
||||||
player.playSound(blockState.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package com.gmail.nossr50.listeners;
|
|||||||
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.AnimalTamer;
|
import org.bukkit.entity.AnimalTamer;
|
||||||
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
@@ -15,19 +17,22 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
||||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
import org.bukkit.event.entity.EntityTameEvent;
|
import org.bukkit.event.entity.EntityTameEvent;
|
||||||
import org.bukkit.event.entity.EntityTargetEvent;
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
||||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
|
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
|
||||||
@@ -52,13 +57,35 @@ public class EntityListener implements Listener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
public void onEntityShootBow(EntityShootBowEvent event) {
|
||||||
|
ItemStack bow = event.getBow();
|
||||||
|
|
||||||
|
if (bow == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Entity projectile = event.getProjectile();
|
||||||
|
|
||||||
|
if (!(projectile instanceof Arrow)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bow.containsEnchantment(Enchantment.ARROW_INFINITE)) {
|
||||||
|
projectile.setMetadata(mcMMO.infiniteArrowKey, mcMMO.metadataValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
projectile.setMetadata(mcMMO.bowForceKey, new FixedMetadataValue(plugin, Math.min(event.getForce() * AdvancedConfig.getInstance().getForceMultiplier(), 1.0)));
|
||||||
|
projectile.setMetadata(mcMMO.arrowDistanceKey, new FixedMetadataValue(plugin, Archery.locationToString(projectile.getLocation())));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitor EntityChangeBlock events.
|
* Monitor EntityChangeBlock events.
|
||||||
*
|
*
|
||||||
* @param event The event to watch
|
* @param event The event to watch
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onEntityChangeBlockEvent(EntityChangeBlockEvent event) {
|
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
|
|
||||||
if (!(entity instanceof FallingBlock)) {
|
if (!(entity instanceof FallingBlock)) {
|
||||||
@@ -68,12 +95,12 @@ public class EntityListener implements Listener {
|
|||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
boolean isTracked = entity.hasMetadata(mcMMO.entityMetadataKey);
|
boolean isTracked = entity.hasMetadata(mcMMO.entityMetadataKey);
|
||||||
|
|
||||||
if (mcMMO.placeStore.isTrue(block) && !isTracked) {
|
if (mcMMO.getPlaceStore().isTrue(block) && !isTracked) {
|
||||||
mcMMO.placeStore.setFalse(block);
|
mcMMO.getPlaceStore().setFalse(block);
|
||||||
entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
|
entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
|
||||||
}
|
}
|
||||||
else if (isTracked) {
|
else if (isTracked) {
|
||||||
mcMMO.placeStore.setTrue(block);
|
mcMMO.getPlaceStore().setTrue(block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +111,13 @@ public class EntityListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||||
if (event instanceof FakeEntityDamageByEntityEvent || event.getDamage() <= 0) {
|
if (event instanceof FakeEntityDamageByEntityEvent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int damage = event.getDamage();
|
||||||
|
|
||||||
|
if (damage <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,13 +127,14 @@ public class EntityListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity attacker = event.getDamager();
|
|
||||||
LivingEntity target = (LivingEntity) defender;
|
LivingEntity target = (LivingEntity) defender;
|
||||||
|
|
||||||
if (CombatUtils.isInvincible(target, event.getDamage())) {
|
if (CombatUtils.isInvincible(target, damage)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Entity attacker = event.getDamager();
|
||||||
|
|
||||||
if (attacker instanceof Projectile) {
|
if (attacker instanceof Projectile) {
|
||||||
attacker = ((Projectile) attacker).getShooter();
|
attacker = ((Projectile) attacker).getShooter();
|
||||||
}
|
}
|
||||||
@@ -121,7 +155,7 @@ public class EntityListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PartyManager.inSameParty(defendingPlayer, attackingPlayer) && !(Permissions.friendlyFire(attackingPlayer) && Permissions.friendlyFire(defendingPlayer))) {
|
if (mcMMO.getPartyManager().inSameParty(defendingPlayer, attackingPlayer) && !(Permissions.friendlyFire(attackingPlayer) && Permissions.friendlyFire(defendingPlayer))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -137,7 +171,13 @@ public class EntityListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onEntityDamage(EntityDamageEvent event) {
|
public void onEntityDamage(EntityDamageEvent event) {
|
||||||
if (event instanceof FakeEntityDamageEvent || event.getDamage() <= 0) {
|
if (event instanceof FakeEntityDamageEvent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int damage = event.getDamage();
|
||||||
|
|
||||||
|
if (damage <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,13 +187,14 @@ public class EntityListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DamageCause cause = event.getCause();
|
|
||||||
LivingEntity livingEntity = (LivingEntity) entity;
|
LivingEntity livingEntity = (LivingEntity) entity;
|
||||||
|
|
||||||
if (CombatUtils.isInvincible(livingEntity, event.getDamage())) {
|
if (CombatUtils.isInvincible(livingEntity, damage)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DamageCause cause = event.getCause();
|
||||||
|
|
||||||
if (livingEntity instanceof Player) {
|
if (livingEntity instanceof Player) {
|
||||||
Player player = (Player) entity;
|
Player player = (Player) entity;
|
||||||
|
|
||||||
@@ -286,7 +327,6 @@ public class EntityListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.setFireTicks(0);
|
|
||||||
BleedTimerTask.remove(entity);
|
BleedTimerTask.remove(entity);
|
||||||
Archery.arrowRetrievalCheck(entity);
|
Archery.arrowRetrievalCheck(entity);
|
||||||
}
|
}
|
||||||
@@ -298,14 +338,21 @@ public class EntityListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
||||||
if (Misc.isSpawnerXPEnabled) {
|
switch (event.getSpawnReason()) {
|
||||||
return;
|
case SPAWNER:
|
||||||
}
|
case SPAWNER_EGG:
|
||||||
|
LivingEntity entity = event.getEntity();
|
||||||
|
Entity passenger = entity.getPassenger();
|
||||||
|
|
||||||
SpawnReason reason = event.getSpawnReason();
|
entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
|
||||||
|
|
||||||
if (reason == SpawnReason.SPAWNER || reason == SpawnReason.SPAWNER_EGG) {
|
if (passenger != null) {
|
||||||
event.getEntity().setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
|
passenger.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,19 +365,21 @@ public class EntityListener implements Listener {
|
|||||||
public void onExplosionPrime(ExplosionPrimeEvent event) {
|
public void onExplosionPrime(ExplosionPrimeEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
|
|
||||||
if (entity instanceof TNTPrimed && entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
if (!(entity instanceof TNTPrimed) || !entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
||||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
return;
|
||||||
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
}
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
return;
|
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||||
}
|
|
||||||
|
|
||||||
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
if (Misc.isNPCEntity(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (miningManager.canUseBiggerBombs()) {
|
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
||||||
event.setRadius(miningManager.biggerBombs(event.getRadius()));
|
|
||||||
}
|
if (miningManager.canUseBiggerBombs()) {
|
||||||
|
event.setRadius(miningManager.biggerBombs(event.getRadius()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,20 +392,22 @@ public class EntityListener implements Listener {
|
|||||||
public void onEnitityExplode(EntityExplodeEvent event) {
|
public void onEnitityExplode(EntityExplodeEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
|
|
||||||
if (entity instanceof TNTPrimed && entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
if (!(entity instanceof TNTPrimed) || !entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
||||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
return;
|
||||||
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
}
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
return;
|
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||||
}
|
|
||||||
|
|
||||||
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
if (Misc.isNPCEntity(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (miningManager.canUseBlastMining()) {
|
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
||||||
miningManager.blastMiningDropProcessing(event.getYield(), event.blockList());
|
|
||||||
event.setYield(0);
|
if (miningManager.canUseBlastMining()) {
|
||||||
}
|
miningManager.blastMiningDropProcessing(event.getYield(), event.blockList());
|
||||||
|
event.setYield(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,63 +420,65 @@ public class EntityListener implements Listener {
|
|||||||
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
|
|
||||||
if (entity instanceof Player) {
|
if (!(entity instanceof Player)) {
|
||||||
Player player = (Player) entity;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
Player player = (Player) entity;
|
||||||
|
|
||||||
|
if (Misc.isNPCEntity(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int currentFoodLevel = player.getFoodLevel();
|
||||||
|
int newFoodLevel = event.getFoodLevel();
|
||||||
|
int foodChange = newFoodLevel - currentFoodLevel;
|
||||||
|
|
||||||
|
if (foodChange <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some foods have 3 ranks
|
||||||
|
* Some foods have 5 ranks
|
||||||
|
* The number of ranks is based on how 'common' the item is
|
||||||
|
* We can adjust this quite easily if we find something is giving too much of a bonus
|
||||||
|
*/
|
||||||
|
switch (player.getItemInHand().getType()) {
|
||||||
|
case BAKED_POTATO: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */
|
||||||
|
case BREAD: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
|
||||||
|
case CARROT_ITEM: /* RESTORES 2 HUNGER - RESTORES 4 1/2 HUNGER @ 1000 */
|
||||||
|
case GOLDEN_CARROT: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */
|
||||||
|
case MUSHROOM_SOUP: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
|
||||||
|
case PUMPKIN_PIE: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
|
||||||
|
if (Permissions.farmersDiet(player)) {
|
||||||
|
event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel1, newFoodLevel));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
int currentFoodLevel = player.getFoodLevel();
|
case COOKIE: /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
|
||||||
int newFoodLevel = event.getFoodLevel();
|
case MELON: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
||||||
int foodChange = newFoodLevel - currentFoodLevel;
|
case POISONOUS_POTATO: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
||||||
|
case POTATO_ITEM: /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
|
||||||
if (foodChange <= 0) {
|
if (Permissions.farmersDiet(player)) {
|
||||||
|
event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel2, newFoodLevel));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
case COOKED_FISH: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
|
||||||
* Some foods have 3 ranks
|
if (Permissions.fishermansDiet(player)) {
|
||||||
* Some foods have 5 ranks
|
event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel1, newFoodLevel));
|
||||||
* The number of ranks is based on how 'common' the item is
|
}
|
||||||
* We can adjust this quite easily if we find something is giving too much of a bonus
|
return;
|
||||||
*/
|
|
||||||
switch (player.getItemInHand().getType()) {
|
|
||||||
case BAKED_POTATO: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */
|
|
||||||
case BREAD: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
|
|
||||||
case CARROT_ITEM: /* RESTORES 2 HUNGER - RESTORES 4 1/2 HUNGER @ 1000 */
|
|
||||||
case GOLDEN_CARROT: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */
|
|
||||||
case MUSHROOM_SOUP: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
|
|
||||||
case PUMPKIN_PIE: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
|
|
||||||
if (Permissions.farmersDiet(player)) {
|
|
||||||
event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel1, newFoodLevel));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case COOKIE: /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
|
case RAW_FISH: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
||||||
case MELON: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
if (Permissions.fishermansDiet(player)) {
|
||||||
case POISONOUS_POTATO: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel2, newFoodLevel));
|
||||||
case POTATO_ITEM: /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
|
}
|
||||||
if (Permissions.farmersDiet(player)) {
|
return;
|
||||||
event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel2, newFoodLevel));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case COOKED_FISH: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
|
default:
|
||||||
if (Permissions.fishermansDiet(player)) {
|
return;
|
||||||
event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel1, newFoodLevel));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case RAW_FISH: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
|
|
||||||
if (Permissions.fishermansDiet(player)) {
|
|
||||||
event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel2, newFoodLevel));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.gmail.nossr50.listeners;
|
package com.gmail.nossr50.listeners;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Furnace;
|
import org.bukkit.block.Furnace;
|
||||||
@@ -19,8 +22,10 @@ import org.bukkit.inventory.FurnaceInventory;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
@@ -96,10 +101,11 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
if (furnaceState instanceof Furnace) {
|
if (furnaceState instanceof Furnace) {
|
||||||
ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
|
ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
|
||||||
|
List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
|
||||||
|
|
||||||
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
if (!metadata.isEmpty() && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
||||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
|
if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
|
||||||
return;
|
return;
|
||||||
@@ -117,10 +123,19 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
if (furnaceState instanceof Furnace) {
|
if (furnaceState instanceof Furnace) {
|
||||||
ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
|
ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
|
||||||
|
List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
|
||||||
|
|
||||||
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
if (Config.getInstance().getPotatoEnabled() && smelting.getType() == Material.POTATO_ITEM) {
|
||||||
|
if ((Config.getInstance().getPotatoChance() / 100.0) >= Misc.getRandom().nextDouble()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
furnaceState.getWorld().createExplosion(furnaceState.getLocation(), 4F, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!metadata.isEmpty() && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
||||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
|
if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
|
||||||
return;
|
return;
|
||||||
@@ -138,10 +153,11 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
if (furnaceState instanceof Furnace) {
|
if (furnaceState instanceof Furnace) {
|
||||||
ItemStack result = ((Furnace) furnaceState).getInventory().getResult();
|
ItemStack result = ((Furnace) furnaceState).getInventory().getResult();
|
||||||
|
List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
|
||||||
|
|
||||||
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && result != null && ItemUtils.isSmelted(result)) {
|
if (!metadata.isEmpty() && result != null && ItemUtils.isSmelted(result)) {
|
||||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
if (Misc.isNPCEntity(player)) {
|
||||||
return;
|
return;
|
||||||
@@ -163,26 +179,18 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onCraftItem(CraftItemEvent event) {
|
public void onCraftItem(CraftItemEvent event) {
|
||||||
if (event.getRecipe().getResult() == null) {
|
ItemStack result = event.getRecipe().getResult();
|
||||||
return;
|
final HumanEntity whoClicked = event.getWhoClicked();
|
||||||
}
|
|
||||||
else if (!ItemUtils.isMcMMOItem(event.getRecipe().getResult())) {
|
if (!ItemUtils.isMcMMOItem(result) || Misc.isNPCEntity(whoClicked) || !(whoClicked instanceof Player)) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (event.getWhoClicked() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (!(event.getWhoClicked() instanceof Player)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Player player = (Player) event.getWhoClicked();
|
mcMMO.p.getServer().getScheduler().runTaskLater(mcMMO.p, new Runnable() {
|
||||||
|
|
||||||
mcMMO.p.getServer().getScheduler().scheduleSyncDelayedTask(mcMMO.p, new Runnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
player.updateInventory();
|
((Player) whoClicked).updateInventory();
|
||||||
}
|
}
|
||||||
});
|
}, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ package com.gmail.nossr50.listeners;
|
|||||||
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Fish;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -40,15 +42,19 @@ import com.gmail.nossr50.skills.fishing.FishingManager;
|
|||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.repair.Repair;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
|
import com.gmail.nossr50.skills.repair.RepairManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
|
import com.gmail.nossr50.skills.unarmed.Unarmed;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
import com.gmail.nossr50.util.ChimaeraWing;
|
import com.gmail.nossr50.util.ChimaeraWing;
|
||||||
import com.gmail.nossr50.util.HardcoreManager;
|
import com.gmail.nossr50.util.HardcoreManager;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.MobHealthbarUtils;
|
||||||
import com.gmail.nossr50.util.Motd;
|
import com.gmail.nossr50.util.Motd;
|
||||||
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;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
public class PlayerListener implements Listener {
|
public class PlayerListener implements Listener {
|
||||||
@@ -58,32 +64,41 @@ public class PlayerListener implements Listener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerDeathLowest(PlayerDeathEvent event) {
|
||||||
|
String deathMessage = event.getDeathMessage();
|
||||||
|
|
||||||
|
if (deathMessage == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setDeathMessage(MobHealthbarUtils.fixDeathMessage(deathMessage, event.getEntity()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitor PlayerDeath events.
|
* Monitor PlayerDeath events.
|
||||||
*
|
*
|
||||||
* @param event The event to watch
|
* @param event The event to watch
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerDeath(PlayerDeathEvent event) {
|
public void onPlayerDeathMonitor(PlayerDeathEvent event) {
|
||||||
if (!Config.getInstance().getHardcoreEnabled()) {
|
if (!Config.getInstance().getHardcoreEnabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getEntity();
|
Player player = event.getEntity();
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
if (Misc.isNPCEntity(player) || Permissions.hardcoreBypass(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Permissions.hardcoreBypass(player)) {
|
Player killer = player.getKiller();
|
||||||
Player killer = player.getKiller();
|
|
||||||
|
|
||||||
if (killer != null && Config.getInstance().getHardcoreVampirismEnabled()) {
|
if (killer != null && Config.getInstance().getHardcoreVampirismEnabled()) {
|
||||||
HardcoreManager.invokeVampirism(killer, player);
|
HardcoreManager.invokeVampirism(killer, player);
|
||||||
}
|
|
||||||
|
|
||||||
HardcoreManager.invokeStatPenalty(player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HardcoreManager.invokeStatPenalty(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,7 +107,7 @@ public class PlayerListener implements Listener {
|
|||||||
* @param event The event to watch
|
* @param event The event to watch
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event) {
|
public void onPlayerWorldChange(PlayerChangedWorldEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
if (Misc.isNPCEntity(player)) {
|
||||||
@@ -118,16 +133,19 @@ public class PlayerListener implements Listener {
|
|||||||
* @param event The event to watch
|
* @param event The event to watch
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerLoginEvent(PlayerLoginEvent event) {
|
public void onPlayerLogin(PlayerLoginEvent event) {
|
||||||
if (event.getResult() == Result.ALLOWED) {
|
if (event.getResult() != Result.ALLOWED) {
|
||||||
Player player = event.getPlayer();
|
return;
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserManager.addUser(player).actualizeRespawnATS();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
|
if (Misc.isNPCEntity(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.addUser(player).actualizeRespawnATS();
|
||||||
|
ScoreboardManager.enablePowerLevelDisplay(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -136,16 +154,11 @@ public class PlayerListener implements Listener {
|
|||||||
* @param event The event to modify
|
* @param event The event to modify
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onPlayerDropItemEvent(PlayerDropItemEvent event) {
|
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||||
Player player = event.getPlayer();
|
Item drop = event.getItemDrop();
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
|
||||||
|
|
||||||
if (mcMMOPlayer.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER) || mcMMOPlayer.getAbilityMode(AbilityType.SUPER_BREAKER)) {
|
drop.setMetadata(mcMMO.droppedItemKey, mcMMO.metadataValue);
|
||||||
event.setCancelled(true);
|
SkillUtils.removeAbilityBuff(drop.getItemStack());
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SkillUtils.removeAbilityBuff(event.getItemDrop().getItemStack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -164,6 +177,20 @@ public class PlayerListener implements Listener {
|
|||||||
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
|
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
|
||||||
|
|
||||||
switch (event.getState()) {
|
switch (event.getState()) {
|
||||||
|
case FISHING:
|
||||||
|
if (!Permissions.krakenBypass(player)) {
|
||||||
|
event.setCancelled(fishingManager.exploitPrevention());
|
||||||
|
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fishingManager.canMasterAngler()) {
|
||||||
|
fishingManager.masterAngler(event.getHook());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case CAUGHT_FISH:
|
case CAUGHT_FISH:
|
||||||
fishingManager.handleFishing((Item) event.getCaught());
|
fishingManager.handleFishing((Item) event.getCaught());
|
||||||
|
|
||||||
@@ -178,8 +205,18 @@ public class PlayerListener implements Listener {
|
|||||||
if (fishingManager.canShake(entity)) {
|
if (fishingManager.canShake(entity)) {
|
||||||
fishingManager.shakeCheck((LivingEntity) entity);
|
fishingManager.shakeCheck((LivingEntity) entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IN_GROUND:
|
||||||
|
Fish hook = event.getHook();
|
||||||
|
Block block = event.getPlayer().getTargetBlock(null, 100);
|
||||||
|
|
||||||
|
if (fishingManager.canIceFish(block)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
fishingManager.iceFishing(hook, block);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -193,16 +230,32 @@ public class PlayerListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Item item = event.getItem();
|
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player)) {
|
if (Misc.isNPCEntity(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
Item drop = event.getItem();
|
||||||
|
ItemStack dropStack = drop.getItemStack();
|
||||||
|
|
||||||
if (mcMMOPlayer.inParty() && ItemUtils.isShareable(item.getItemStack())) {
|
if (!drop.hasMetadata(mcMMO.droppedItemKey) && mcMMOPlayer.inParty() && ItemUtils.isShareable(dropStack)) {
|
||||||
ShareHandler.handleItemShare(event, mcMMOPlayer);
|
event.setCancelled(ShareHandler.handleItemShare(drop, mcMMOPlayer));
|
||||||
|
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
player.playSound(player.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.getPopPitch());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((mcMMOPlayer.isUsingUnarmed() && ItemUtils.isShareable(dropStack)) || mcMMOPlayer.getAbilityMode(AbilityType.BERSERK)) {
|
||||||
|
event.setCancelled(Unarmed.handleItemPickup(player.getInventory(), drop));
|
||||||
|
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
player.playSound(player.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.getPopPitch());
|
||||||
|
player.updateInventory();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,10 +272,6 @@ public class PlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UserManager.getPlayer(player).getAbilityMode(AbilityType.BERSERK)) {
|
|
||||||
player.setCanPickupItems(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* GARBAGE COLLECTION */
|
/* GARBAGE COLLECTION */
|
||||||
BleedTimerTask.bleedOut(player); // Bleed it out
|
BleedTimerTask.bleedOut(player); // Bleed it out
|
||||||
}
|
}
|
||||||
@@ -236,10 +285,6 @@ public class PlayerListener implements Listener {
|
|||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (UserManager.getPlayer(player).getAbilityMode(AbilityType.BERSERK)) {
|
|
||||||
player.setCanPickupItems(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.getInstance().getMOTDEnabled() && Permissions.motd(player)) {
|
if (Config.getInstance().getMOTDEnabled() && Permissions.motd(player)) {
|
||||||
Motd.displayAll(player);
|
Motd.displayAll(player);
|
||||||
}
|
}
|
||||||
@@ -248,7 +293,7 @@ public class PlayerListener implements Listener {
|
|||||||
player.sendMessage(LocaleLoader.getString("XPRate.Event", Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
player.sendMessage(LocaleLoader.getString("XPRate.Event", Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.updateNotifications(player) && mcMMO.p.updateAvailable) {
|
if (Permissions.updateNotifications(player) && plugin.isUpdateAvailable()) {
|
||||||
player.sendMessage(LocaleLoader.getString("UpdateChecker.outdated"));
|
player.sendMessage(LocaleLoader.getString("UpdateChecker.outdated"));
|
||||||
player.sendMessage(LocaleLoader.getString("UpdateChecker.newavailable"));
|
player.sendMessage(LocaleLoader.getString("UpdateChecker.newavailable"));
|
||||||
}
|
}
|
||||||
@@ -278,14 +323,20 @@ public class PlayerListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onPlayerInteractLowest(PlayerInteractEvent event) {
|
public void onPlayerInteractLowest(PlayerInteractEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
Block block = event.getClickedBlock();
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
ItemStack heldItem = player.getItemInHand();
|
ItemStack heldItem = player.getItemInHand();
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
// This shouldn't be possible - this is probably a band-aid for a larger issue somewhere else.
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MiningManager miningManager = mcMMOPlayer.getMiningManager();
|
MiningManager miningManager = mcMMOPlayer.getMiningManager();
|
||||||
|
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
@@ -293,16 +344,26 @@ public class PlayerListener implements Listener {
|
|||||||
int blockID = block.getTypeId();
|
int blockID = block.getTypeId();
|
||||||
|
|
||||||
/* REPAIR CHECKS */
|
/* REPAIR CHECKS */
|
||||||
if (blockID == Repair.repairAnvilId && Permissions.skillEnabled(player, SkillType.REPAIR) && mcMMO.repairableManager.isRepairable(heldItem)) {
|
if (blockID == Repair.repairAnvilId && Permissions.skillEnabled(player, SkillType.REPAIR) && mcMMO.getRepairableManager().isRepairable(heldItem)) {
|
||||||
UserManager.getPlayer(player).getRepairManager().handleRepair(heldItem);
|
RepairManager repairManager = mcMMOPlayer.getRepairManager();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.updateInventory();
|
|
||||||
|
// Make sure the player knows what he's doing when trying to repair an enchanted item
|
||||||
|
if (!(heldItem.getEnchantments().size() > 0) || repairManager.checkConfirmation(blockID, true)) {
|
||||||
|
repairManager.handleRepair(heldItem);
|
||||||
|
player.updateInventory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* SALVAGE CHECKS */
|
/* SALVAGE CHECKS */
|
||||||
else if (blockID == Repair.salvageAnvilId && Permissions.salvage(player) && Repair.isSalvageable(heldItem)) {
|
else if (blockID == Repair.salvageAnvilId && Permissions.salvage(player) && Repair.isSalvageable(heldItem) && !ItemUtils.isChainmailArmor(heldItem)) {
|
||||||
UserManager.getPlayer(player).getRepairManager().handleSalvage(block.getLocation(), heldItem);
|
RepairManager repairManager = mcMMOPlayer.getRepairManager();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.updateInventory();
|
|
||||||
|
// Make sure the player knows what he's doing when trying to salvage an enchanted item
|
||||||
|
if (!(heldItem.getEnchantments().size() > 0) || repairManager.checkConfirmation(blockID, true)) {
|
||||||
|
repairManager.handleSalvage(block.getLocation(), heldItem);
|
||||||
|
player.updateInventory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* BLAST MINING CHECK */
|
/* BLAST MINING CHECK */
|
||||||
else if (miningManager.canDetonate()) {
|
else if (miningManager.canDetonate()) {
|
||||||
@@ -316,6 +377,32 @@ public class PlayerListener implements Listener {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LEFT_CLICK_BLOCK:
|
||||||
|
blockID = block.getTypeId();
|
||||||
|
|
||||||
|
/* REPAIR CHECKS */
|
||||||
|
if (blockID == Repair.repairAnvilId && Permissions.skillEnabled(player, SkillType.REPAIR) && mcMMO.getRepairableManager().isRepairable(heldItem)) {
|
||||||
|
RepairManager repairManager = mcMMOPlayer.getRepairManager();
|
||||||
|
|
||||||
|
// Cancel repairing an enchanted item
|
||||||
|
if (repairManager.checkConfirmation(blockID, false) && Config.getInstance().getRepairConfirmRequired()) {
|
||||||
|
mcMMOPlayer.setLastAnvilUse(Repair.repairAnvilId, 0);
|
||||||
|
player.sendMessage(LocaleLoader.getString("Skills.Cancelled", LocaleLoader.getString("Repair.Pretty.Name")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* SALVAGE CHECKS */
|
||||||
|
else if (blockID == Repair.salvageAnvilId && Permissions.salvage(player) && Repair.isSalvageable(heldItem)) {
|
||||||
|
RepairManager repairManager = mcMMOPlayer.getRepairManager();
|
||||||
|
|
||||||
|
// Cancel salvaging an enchanted item
|
||||||
|
if (repairManager.checkConfirmation(blockID, false) && Config.getInstance().getRepairConfirmRequired()) {
|
||||||
|
mcMMOPlayer.setLastAnvilUse(Repair.salvageAnvilId, 0);
|
||||||
|
player.sendMessage(LocaleLoader.getString("Skills.Cancelled", LocaleLoader.getString("Salvage.Pretty.Name")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case RIGHT_CLICK_AIR:
|
case RIGHT_CLICK_AIR:
|
||||||
/* BLAST MINING CHECK */
|
/* BLAST MINING CHECK */
|
||||||
if (miningManager.canDetonate()) {
|
if (miningManager.canDetonate()) {
|
||||||
@@ -345,6 +432,11 @@ public class PlayerListener implements Listener {
|
|||||||
ItemStack heldItem = player.getItemInHand();
|
ItemStack heldItem = player.getItemInHand();
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
// This shouldn't be possible - this is probably a band-aid for a larger issue somewhere else.
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
case RIGHT_CLICK_BLOCK:
|
case RIGHT_CLICK_BLOCK:
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
@@ -441,22 +533,27 @@ public class PlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isAsync = event.isAsynchronous();
|
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
mcMMO.p.debug(player.getName() + " is currently chatting, but has never logged on to the server.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mcMMOPlayer.getPartyChatMode()) {
|
if (mcMMOPlayer.getPartyChatMode()) {
|
||||||
Party party = mcMMOPlayer.getParty();
|
Party party = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
|
mcMMOPlayer.togglePartyChat();
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
player.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatManager.handlePartyChat(plugin, party, player.getName(), player.getDisplayName(), event.getMessage(), isAsync);
|
ChatManager.handlePartyChat(plugin, party, player.getName(), player.getDisplayName(), event.getMessage(), event.isAsynchronous());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
else if (mcMMOPlayer.getAdminChatMode()) {
|
else if (mcMMOPlayer.getAdminChatMode()) {
|
||||||
ChatManager.handleAdminChat(plugin, player.getName(), player.getDisplayName(), event.getMessage(), isAsync);
|
ChatManager.handleAdminChat(plugin, player.getName(), player.getDisplayName(), event.getMessage(), event.isAsynchronous());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,6 @@ import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
|||||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
|
|
||||||
public class SelfListener implements Listener {
|
public class SelfListener implements Listener {
|
||||||
protected Player player;
|
|
||||||
|
|
||||||
protected float skillValue;
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
||||||
if (!Config.getInstance().getLevelUpEffectsEnabled()) {
|
if (!Config.getInstance().getLevelUpEffectsEnabled()) {
|
||||||
@@ -26,8 +22,8 @@ public class SelfListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
skillValue = event.getSkillLevel();
|
float skillValue = event.getSkillLevel();
|
||||||
|
|
||||||
if ((skillValue % tier) == 0) {
|
if ((skillValue % tier) == 0) {
|
||||||
ParticleEffectUtils.runescapeModeCelebration(player, event.getSkill());
|
ParticleEffectUtils.runescapeModeCelebration(player, event.getSkill());
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import org.getspout.spoutapi.gui.Button;
|
|||||||
import org.getspout.spoutapi.gui.ScreenType;
|
import org.getspout.spoutapi.gui.ScreenType;
|
||||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
import org.getspout.spoutapi.player.SpoutPlayer;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.spout.buttons.McMMOButton;
|
import com.gmail.nossr50.datatypes.spout.buttons.McMMOButton;
|
||||||
import com.gmail.nossr50.datatypes.spout.huds.McMMOHud;
|
import com.gmail.nossr50.datatypes.spout.huds.McMMOHud;
|
||||||
import com.gmail.nossr50.datatypes.spout.popups.McMMOMenu;
|
import com.gmail.nossr50.datatypes.spout.popups.McMMOMenu;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.spout.SpoutUtils;
|
|
||||||
|
|
||||||
public class SpoutListener implements Listener {
|
public class SpoutListener implements Listener {
|
||||||
|
|
||||||
@@ -32,8 +32,8 @@ public class SpoutListener implements Listener {
|
|||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(spoutPlayer);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(spoutPlayer);
|
||||||
|
|
||||||
// TODO: Add custom titles based on skills
|
// TODO: Add custom titles based on skills
|
||||||
if (SpoutUtils.showPowerLevel) {
|
if (SpoutConfig.getInstance().getShowPowerLevel()) {
|
||||||
spoutPlayer.setTitle(LocaleLoader.getString("Spout.Title", spoutPlayer.getName(), mcMMOPlayer.getPowerLevel()));
|
spoutPlayer.setTitle(LocaleLoader.getString("Spout.Title", spoutPlayer.getTitle(), mcMMOPlayer.getPowerLevel()));
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer.getProfile().setSpoutHud(new McMMOHud(mcMMOPlayer)); // Setup Party HUD stuff
|
mcMMOPlayer.getProfile().setSpoutHud(new McMMOHud(mcMMOPlayer)); // Setup Party HUD stuff
|
||||||
@@ -81,7 +81,7 @@ public class SpoutListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getKey() == SpoutUtils.menuKey) {
|
if (event.getKey() == SpoutConfig.getInstance().getMenuKey()) {
|
||||||
McMMOHud spoutHud = UserManager.getPlayer(spoutPlayer).getProfile().getSpoutHud();
|
McMMOHud spoutHud = UserManager.getPlayer(spoutPlayer).getProfile().getSpoutHud();
|
||||||
|
|
||||||
if (!spoutHud.isMenuOpened()) {
|
if (!spoutHud.isMenuOpened()) {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@@ -19,7 +18,12 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.util.blockmeta.conversion.BlockStoreConversionMain;
|
import com.gmail.nossr50.util.blockmeta.conversion.BlockStoreConversionMain;
|
||||||
|
|
||||||
public class WorldListener implements Listener {
|
public class WorldListener implements Listener {
|
||||||
private ArrayList<BlockStoreConversionMain> converters = new ArrayList<BlockStoreConversionMain>();
|
private final ArrayList<BlockStoreConversionMain> converters = new ArrayList<BlockStoreConversionMain>();
|
||||||
|
private final mcMMO plugin;
|
||||||
|
|
||||||
|
public WorldListener(final mcMMO plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitor StructureGrow events.
|
* Monitor StructureGrow events.
|
||||||
@@ -28,12 +32,12 @@ public class WorldListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onStructureGrow(StructureGrowEvent event) {
|
public void onStructureGrow(StructureGrowEvent event) {
|
||||||
Location location = event.getLocation();
|
if (!mcMMO.getPlaceStore().isTrue(event.getLocation().getBlock())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mcMMO.placeStore.isTrue(location.getBlockX(), location.getBlockY(), location.getBlockZ(), location.getWorld())) {
|
for (BlockState blockState : event.getBlocks()) {
|
||||||
for (BlockState blockState : event.getBlocks()) {
|
mcMMO.getPlaceStore().setFalse(blockState);
|
||||||
mcMMO.placeStore.setFalse(blockState);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,13 +49,12 @@ public class WorldListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onWorldInit(WorldInitEvent event) {
|
public void onWorldInit(WorldInitEvent event) {
|
||||||
World world = event.getWorld();
|
World world = event.getWorld();
|
||||||
File dataDir = new File(world.getWorldFolder(), "mcmmo_data");
|
|
||||||
|
|
||||||
if (!dataDir.exists() || mcMMO.p == null) {
|
if (!new File(world.getWorldFolder(), "mcmmo_data").exists() || plugin == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.p.getLogger().info("Converting block storage for " + world.getName() + " to a new format.");
|
plugin.getLogger().info("Converting block storage for " + world.getName() + " to a new format.");
|
||||||
|
|
||||||
BlockStoreConversionMain converter = new BlockStoreConversionMain(world);
|
BlockStoreConversionMain converter = new BlockStoreConversionMain(world);
|
||||||
converter.run();
|
converter.run();
|
||||||
@@ -65,7 +68,7 @@ public class WorldListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onWorldUnload(WorldUnloadEvent event) {
|
public void onWorldUnload(WorldUnloadEvent event) {
|
||||||
mcMMO.placeStore.unloadWorld(event.getWorld());
|
mcMMO.getPlaceStore().unloadWorld(event.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,6 +80,6 @@ public class WorldListener implements Listener {
|
|||||||
public void onChunkUnload(ChunkUnloadEvent event) {
|
public void onChunkUnload(ChunkUnloadEvent event) {
|
||||||
Chunk chunk = event.getChunk();
|
Chunk chunk = event.getChunk();
|
||||||
|
|
||||||
mcMMO.placeStore.chunkUnloaded(chunk.getX(), chunk.getZ(), event.getWorld());
|
mcMMO.getPlaceStore().chunkUnloaded(chunk.getX(), chunk.getZ(), event.getWorld());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,12 @@ import com.gmail.nossr50.config.mods.CustomToolConfig;
|
|||||||
import com.gmail.nossr50.config.spout.SpoutConfig;
|
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.datatypes.player.McMMOPlayer;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
|
||||||
import com.gmail.nossr50.listeners.BlockListener;
|
import com.gmail.nossr50.listeners.BlockListener;
|
||||||
import com.gmail.nossr50.listeners.EntityListener;
|
import com.gmail.nossr50.listeners.EntityListener;
|
||||||
import com.gmail.nossr50.listeners.InventoryListener;
|
import com.gmail.nossr50.listeners.InventoryListener;
|
||||||
import com.gmail.nossr50.listeners.PlayerListener;
|
import com.gmail.nossr50.listeners.PlayerListener;
|
||||||
import com.gmail.nossr50.listeners.SelfListener;
|
import com.gmail.nossr50.listeners.SelfListener;
|
||||||
|
import com.gmail.nossr50.listeners.SpoutListener;
|
||||||
import com.gmail.nossr50.listeners.WorldListener;
|
import com.gmail.nossr50.listeners.WorldListener;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.metrics.MetricsManager;
|
import com.gmail.nossr50.metrics.MetricsManager;
|
||||||
@@ -39,7 +37,6 @@ import com.gmail.nossr50.runnables.SaveTimerTask;
|
|||||||
import com.gmail.nossr50.runnables.database.UserPurgeTask;
|
import com.gmail.nossr50.runnables.database.UserPurgeTask;
|
||||||
import com.gmail.nossr50.runnables.party.PartyAutoKickTask;
|
import com.gmail.nossr50.runnables.party.PartyAutoKickTask;
|
||||||
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
|
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
|
||||||
import com.gmail.nossr50.runnables.skills.SkillMonitorTask;
|
|
||||||
import com.gmail.nossr50.skills.child.ChildConfig;
|
import com.gmail.nossr50.skills.child.ChildConfig;
|
||||||
import com.gmail.nossr50.skills.repair.Repairable;
|
import com.gmail.nossr50.skills.repair.Repairable;
|
||||||
import com.gmail.nossr50.skills.repair.RepairableManager;
|
import com.gmail.nossr50.skills.repair.RepairableManager;
|
||||||
@@ -56,41 +53,44 @@ import com.gmail.nossr50.util.player.UserManager;
|
|||||||
import com.gmail.nossr50.util.spout.SpoutUtils;
|
import com.gmail.nossr50.util.spout.SpoutUtils;
|
||||||
|
|
||||||
public class mcMMO extends JavaPlugin {
|
public class mcMMO extends JavaPlugin {
|
||||||
private final PlayerListener playerListener = new PlayerListener(this);
|
/* Managers */
|
||||||
private final BlockListener blockListener = new BlockListener(this);
|
private static ChunkManager placeStore;
|
||||||
private final EntityListener entityListener = new EntityListener(this);
|
private static RepairableManager repairableManager;
|
||||||
private final InventoryListener inventoryListener = new InventoryListener(this);
|
private static DatabaseManager databaseManager;
|
||||||
private final SelfListener selfListener = new SelfListener();
|
private static PartyManager partyManager;
|
||||||
private final WorldListener worldListener = new WorldListener();
|
|
||||||
|
|
||||||
public static mcMMO p;
|
/* File Paths */
|
||||||
|
|
||||||
public static ChunkManager placeStore;
|
|
||||||
public static RepairableManager repairableManager;
|
|
||||||
|
|
||||||
// Jar Stuff
|
|
||||||
public static File mcmmo;
|
|
||||||
|
|
||||||
// File Paths
|
|
||||||
private static String mainDirectory;
|
private static String mainDirectory;
|
||||||
private static String flatFileDirectory;
|
private static String flatFileDirectory;
|
||||||
private static String usersFile;
|
private static String usersFile;
|
||||||
private static String modDirectory;
|
private static String modDirectory;
|
||||||
|
|
||||||
// Update Check
|
public static mcMMO p;
|
||||||
public boolean updateAvailable;
|
|
||||||
|
|
||||||
// Spout Check
|
// Jar Stuff
|
||||||
public static boolean spoutEnabled = false;
|
public static File mcmmo;
|
||||||
|
|
||||||
|
// Update Check
|
||||||
|
private boolean updateAvailable;
|
||||||
|
|
||||||
|
/* Plugin Checks */
|
||||||
|
private static boolean spoutEnabled;
|
||||||
|
private static boolean combatTagEnabled;
|
||||||
|
|
||||||
// XP Event Check
|
// XP Event Check
|
||||||
private boolean xpEventEnabled = false;
|
private boolean xpEventEnabled;
|
||||||
|
|
||||||
// Metadata Values
|
/* Metadata Values */
|
||||||
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
||||||
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
||||||
public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
|
public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
|
||||||
public final static String tntMetadataKey = "mcMMO: Tracked TNT";
|
public final static String tntMetadataKey = "mcMMO: Tracked TNT";
|
||||||
|
public final static String customNameKey = "mcMMO: Custom Name";
|
||||||
|
public final static String customVisibleKey = "mcMMO: Name Visibility";
|
||||||
|
public final static String droppedItemKey = "mcMMO: Tracked Item";
|
||||||
|
public final static String infiniteArrowKey = "mcMMO: Infinite Arrow";
|
||||||
|
public final static String bowForceKey = "mcMMO: Bow Force";
|
||||||
|
public final static String arrowDistanceKey = "mcMMO: Arrow Distance";
|
||||||
|
|
||||||
public static FixedMetadataValue metadataValue;
|
public static FixedMetadataValue metadataValue;
|
||||||
|
|
||||||
@@ -108,33 +108,23 @@ public class mcMMO extends JavaPlugin {
|
|||||||
setupSpout();
|
setupSpout();
|
||||||
loadConfigFiles();
|
loadConfigFiles();
|
||||||
|
|
||||||
if (!Config.getInstance().getUseMySQL()) {
|
combatTagEnabled = getServer().getPluginManager().getPlugin("CombatTag") != null;
|
||||||
UserManager.loadUsers();
|
|
||||||
}
|
databaseManager = new DatabaseManager(this, Config.getInstance().getUseMySQL());
|
||||||
|
|
||||||
registerEvents();
|
registerEvents();
|
||||||
registerCustomRecipes();
|
registerCustomRecipes();
|
||||||
|
|
||||||
PartyManager.loadParties();
|
partyManager = new PartyManager(this);
|
||||||
|
|
||||||
// Setup the leader boards
|
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
|
||||||
// TODO: Why do we have to check for a connection that hasn't be made yet?
|
|
||||||
DatabaseManager.checkConnected();
|
|
||||||
DatabaseManager.createStructure();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LeaderboardManager.updateLeaderboards();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : getServer().getOnlinePlayers()) {
|
for (Player player : getServer().getOnlinePlayers()) {
|
||||||
UserManager.addUser(player); // In case of reload add all users back into UserManager
|
UserManager.addUser(player); // In case of reload add all users back into UserManager
|
||||||
}
|
}
|
||||||
|
|
||||||
getLogger().info("Version " + getDescription().getVersion() + " is enabled!");
|
debug("Version " + getDescription().getVersion() + " is enabled!");
|
||||||
|
|
||||||
scheduleTasks();
|
scheduleTasks();
|
||||||
registerCommands();
|
CommandRegistrationManager.registerCommands();
|
||||||
|
|
||||||
MetricsManager.setup();
|
MetricsManager.setup();
|
||||||
|
|
||||||
@@ -166,9 +156,8 @@ public class mcMMO extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
try {
|
try {
|
||||||
reloadDisableHelper(); // Prevent Berserk from getting "stuck"
|
|
||||||
UserManager.saveAll(); // Make sure to save player information if the server shuts down
|
UserManager.saveAll(); // Make sure to save player information if the server shuts down
|
||||||
PartyManager.saveParties(); // Save our parties
|
partyManager.saveParties(); // Save our parties
|
||||||
placeStore.saveAll(); // Save our metadata
|
placeStore.saveAll(); // Save our metadata
|
||||||
placeStore.cleanUp(); // Cleanup empty metadata stores
|
placeStore.cleanUp(); // Cleanup empty metadata stores
|
||||||
}
|
}
|
||||||
@@ -196,7 +185,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getLogger().info("Was disabled."); // How informative!
|
debug("Was disabled."); // How informative!
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getMainDirectory() {
|
public static String getMainDirectory() {
|
||||||
@@ -215,6 +204,10 @@ public class mcMMO extends JavaPlugin {
|
|||||||
return modDirectory;
|
return modDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUpdateAvailable() {
|
||||||
|
return updateAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isXPEventEnabled() {
|
public boolean isXPEventEnabled() {
|
||||||
return xpEventEnabled;
|
return xpEventEnabled;
|
||||||
}
|
}
|
||||||
@@ -231,6 +224,30 @@ public class mcMMO extends JavaPlugin {
|
|||||||
getLogger().info("[Debug] " + message);
|
getLogger().info("[Debug] " + message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ChunkManager getPlaceStore() {
|
||||||
|
return placeStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DatabaseManager getDatabaseManager() {
|
||||||
|
return databaseManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RepairableManager getRepairableManager() {
|
||||||
|
return repairableManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PartyManager getPartyManager() {
|
||||||
|
return partyManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSpoutEnabled() {
|
||||||
|
return spoutEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCombatTagEnabled() {
|
||||||
|
return combatTagEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the various storage file paths
|
* Setup the various storage file paths
|
||||||
*/
|
*/
|
||||||
@@ -302,8 +319,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
spoutEnabled = true;
|
spoutEnabled = true;
|
||||||
|
|
||||||
SpoutConfig.getInstance();
|
SpoutConfig.getInstance();
|
||||||
SpoutUtils.setupSpoutConfigs();
|
getServer().getPluginManager().registerEvents(new SpoutListener(), this);
|
||||||
SpoutUtils.registerCustomEvent();
|
|
||||||
SpoutUtils.preCacheFiles();
|
SpoutUtils.preCacheFiles();
|
||||||
SpoutUtils.reloadSpoutPlayers(); // Handle spout players after a /reload
|
SpoutUtils.reloadSpoutPlayers(); // Handle spout players after a /reload
|
||||||
}
|
}
|
||||||
@@ -313,52 +329,12 @@ public class mcMMO extends JavaPlugin {
|
|||||||
PluginManager pluginManager = getServer().getPluginManager();
|
PluginManager pluginManager = getServer().getPluginManager();
|
||||||
|
|
||||||
// Register events
|
// Register events
|
||||||
pluginManager.registerEvents(playerListener, this);
|
pluginManager.registerEvents(new PlayerListener(this), this);
|
||||||
pluginManager.registerEvents(blockListener, this);
|
pluginManager.registerEvents(new BlockListener(this), this);
|
||||||
pluginManager.registerEvents(entityListener, this);
|
pluginManager.registerEvents(new EntityListener(this), this);
|
||||||
pluginManager.registerEvents(inventoryListener, this);
|
pluginManager.registerEvents(new InventoryListener(this), this);
|
||||||
pluginManager.registerEvents(selfListener, this);
|
pluginManager.registerEvents(new SelfListener(), this);
|
||||||
pluginManager.registerEvents(worldListener, this);
|
pluginManager.registerEvents(new WorldListener(this), this);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register the commands.
|
|
||||||
*/
|
|
||||||
private void registerCommands() {
|
|
||||||
CommandRegistrationManager.registerSkillCommands();
|
|
||||||
|
|
||||||
// mc* commands
|
|
||||||
CommandRegistrationManager.registerMcpurgeCommand();
|
|
||||||
CommandRegistrationManager.registerMcremoveCommand();
|
|
||||||
CommandRegistrationManager.registerMcabilityCommand();
|
|
||||||
CommandRegistrationManager.registerMcgodCommand();
|
|
||||||
CommandRegistrationManager.registerMcmmoCommand();
|
|
||||||
CommandRegistrationManager.registerMcrefreshCommand();
|
|
||||||
CommandRegistrationManager.registerMctopCommand();
|
|
||||||
CommandRegistrationManager.registerMcrankCommand();
|
|
||||||
CommandRegistrationManager.registerMcstatsCommand();
|
|
||||||
|
|
||||||
// Party commands
|
|
||||||
CommandRegistrationManager.registerAdminChatCommand();
|
|
||||||
CommandRegistrationManager.registerPartyCommand();
|
|
||||||
CommandRegistrationManager.registerPartyChatCommand();
|
|
||||||
CommandRegistrationManager.registerPtpCommand();
|
|
||||||
|
|
||||||
// Other commands
|
|
||||||
CommandRegistrationManager.registerAddxpCommand();
|
|
||||||
CommandRegistrationManager.registerAddlevelsCommand();
|
|
||||||
CommandRegistrationManager.registerMmoeditCommand();
|
|
||||||
CommandRegistrationManager.registerInspectCommand();
|
|
||||||
CommandRegistrationManager.registerXprateCommand();
|
|
||||||
CommandRegistrationManager.registerMmoupdateCommand();
|
|
||||||
CommandRegistrationManager.registerSkillresetCommand();
|
|
||||||
CommandRegistrationManager.registerHardcoreCommand();
|
|
||||||
CommandRegistrationManager.registerVampirismCommand();
|
|
||||||
CommandRegistrationManager.registerMcnotifyCommand();
|
|
||||||
|
|
||||||
// Spout commands
|
|
||||||
CommandRegistrationManager.registerXplockCommand();
|
|
||||||
CommandRegistrationManager.registerMchudCommand();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCustomRecipes() {
|
private void registerCustomRecipes() {
|
||||||
@@ -370,52 +346,29 @@ public class mcMMO extends JavaPlugin {
|
|||||||
private void scheduleTasks() {
|
private void scheduleTasks() {
|
||||||
// Periodic save timer (Saves every 10 minutes by default)
|
// Periodic save timer (Saves every 10 minutes by default)
|
||||||
long saveIntervalTicks = Config.getInstance().getSaveInterval() * 1200;
|
long saveIntervalTicks = Config.getInstance().getSaveInterval() * 1200;
|
||||||
|
|
||||||
new SaveTimerTask().runTaskTimer(this, saveIntervalTicks, saveIntervalTicks);
|
new SaveTimerTask().runTaskTimer(this, saveIntervalTicks, saveIntervalTicks);
|
||||||
|
|
||||||
// Regen & Cooldown timer (Runs every second)
|
|
||||||
new SkillMonitorTask().runTaskTimer(this, 20, 20);
|
|
||||||
|
|
||||||
// Bleed timer (Runs every two seconds)
|
// Bleed timer (Runs every two seconds)
|
||||||
new BleedTimerTask().runTaskTimer(this, 40, 40);
|
new BleedTimerTask().runTaskTimer(this, 40, 40);
|
||||||
|
|
||||||
// Old & Powerless User remover
|
// Old & Powerless User remover
|
||||||
int purgeInterval = Config.getInstance().getPurgeInterval();
|
long purgeIntervalTicks = Config.getInstance().getPurgeInterval() * 60 * 60 * 20;
|
||||||
UserPurgeTask userPurgeTask = new UserPurgeTask();
|
|
||||||
|
|
||||||
if (purgeInterval == 0) {
|
if (purgeIntervalTicks == 0) {
|
||||||
userPurgeTask.runTaskLater(this, 40);
|
new UserPurgeTask().runTaskLater(this, 40); // Start 2 seconds after startup.
|
||||||
}
|
}
|
||||||
else if (purgeInterval > 0) {
|
else if (purgeIntervalTicks > 0) {
|
||||||
long purgeIntervalTicks = purgeInterval * 60 * 60 * 20;
|
new UserPurgeTask().runTaskTimer(this, purgeIntervalTicks, purgeIntervalTicks);
|
||||||
|
|
||||||
userPurgeTask.runTaskTimer(this, purgeIntervalTicks, purgeIntervalTicks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically remove old members from parties
|
// Automatically remove old members from parties
|
||||||
long kickInterval = Config.getInstance().getAutoPartyKickInterval();
|
long kickIntervalTicks = Config.getInstance().getAutoPartyKickInterval() * 60 * 60 * 20;
|
||||||
PartyAutoKickTask partyAutoKickTask = new PartyAutoKickTask();
|
|
||||||
|
|
||||||
if (kickInterval == 0) {
|
if (kickIntervalTicks == 0) {
|
||||||
partyAutoKickTask.runTaskLater(this, 40); // Start 2 seconds after startup.
|
new PartyAutoKickTask().runTaskLater(this, 40); // Start 2 seconds after startup.
|
||||||
}
|
}
|
||||||
else if (kickInterval > 0) {
|
else if (kickIntervalTicks > 0) {
|
||||||
long kickIntervalTicks = kickInterval * 60 * 60 * 20;
|
new PartyAutoKickTask().runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
|
||||||
|
|
||||||
partyAutoKickTask.runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Because /reload is the biggest piece of garbage in existence,
|
|
||||||
* we have to do some special checks to keep it from breaking everything.
|
|
||||||
*/
|
|
||||||
private void reloadDisableHelper() {
|
|
||||||
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers().values()) {
|
|
||||||
if (mcMMOPlayer.getAbilityMode(AbilityType.BERSERK)) {
|
|
||||||
mcMMOPlayer.setAbilityMode(AbilityType.BERSERK, false);
|
|
||||||
mcMMOPlayer.getPlayer().setCanPickupItems(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,11 @@ package com.gmail.nossr50.party;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.Server;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@@ -15,18 +16,23 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.party.PartyLoaderTask;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public final class PartyManager {
|
public class PartyManager {
|
||||||
private static String partiesFilePath = mcMMO.p.getDataFolder().getPath() + File.separator + "FlatFileStuff" + File.separator + "parties.yml";
|
private final mcMMO plugin;
|
||||||
private static List<Party> parties = new ArrayList<Party>();
|
private final String partiesFilePath = mcMMO.getFlatFileDirectory() + "parties.yml";
|
||||||
|
private final List<Party> parties = new ArrayList<Party>();
|
||||||
|
private final File partyFile = new File(partiesFilePath);
|
||||||
|
|
||||||
private PartyManager() {}
|
public PartyManager(final mcMMO plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
|
||||||
public static boolean checkPartyExistence(Player player, Party party, String partyName) {
|
loadParties();
|
||||||
if (party == null) {
|
}
|
||||||
|
|
||||||
|
public boolean checkPartyExistence(Player player, String partyName) {
|
||||||
|
if (getParty(partyName) == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,8 +40,12 @@ public final class PartyManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean changeOrJoinParty(McMMOPlayer mcMMOPlayer, Player player, Party oldParty, String newPartyName) {
|
public boolean changeOrJoinParty(McMMOPlayer mcMMOPlayer, String newPartyName) {
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
if (mcMMOPlayer.inParty()) {
|
if (mcMMOPlayer.inParty()) {
|
||||||
|
Party oldParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
if (!handlePartyChangeEvent(player, oldParty.getName(), newPartyName, EventReason.CHANGED_PARTIES)) {
|
if (!handlePartyChangeEvent(player, oldParty.getName(), newPartyName, EventReason.CHANGED_PARTIES)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -56,7 +66,7 @@ public final class PartyManager {
|
|||||||
* @param secondPlayer The second player
|
* @param secondPlayer The second player
|
||||||
* @return true if they are in the same party, false otherwise
|
* @return true if they are in the same party, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean inSameParty(Player firstPlayer, Player secondPlayer) {
|
public boolean inSameParty(Player firstPlayer, Player secondPlayer) {
|
||||||
McMMOPlayer firstMcMMOPlayer = UserManager.getPlayer(firstPlayer);
|
McMMOPlayer firstMcMMOPlayer = UserManager.getPlayer(firstPlayer);
|
||||||
McMMOPlayer secondMcMMOPlayer = UserManager.getPlayer(secondPlayer);
|
McMMOPlayer secondMcMMOPlayer = UserManager.getPlayer(secondPlayer);
|
||||||
|
|
||||||
@@ -81,15 +91,20 @@ public final class PartyManager {
|
|||||||
* @param range The distance
|
* @param range The distance
|
||||||
* @return the near party members
|
* @return the near party members
|
||||||
*/
|
*/
|
||||||
public static List<Player> getNearMembers(Player player, Party party, double range) {
|
public List<Player> getNearbyPartyMembers(Player player, double range) {
|
||||||
List<Player> nearMembers = new ArrayList<Player>();
|
List<Player> nearMembers = new ArrayList<Player>();
|
||||||
|
Party party = UserManager.getPlayer(player).getParty();
|
||||||
|
|
||||||
if (party != null) {
|
if (party != null) {
|
||||||
|
Location playerLocation = player.getLocation();
|
||||||
|
|
||||||
for (Player member : party.getOnlineMembers()) {
|
for (Player member : party.getOnlineMembers()) {
|
||||||
if (!player.getName().equalsIgnoreCase(member.getName()) && !member.isDead() && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
|
if (!player.equals(member) && !member.isValid() && Misc.isNear(playerLocation, member.getLocation(), range)) {
|
||||||
nearMembers.add(member);
|
nearMembers.add(member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nearMembers;
|
return nearMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,9 +114,7 @@ public final class PartyManager {
|
|||||||
* @param player The player to check
|
* @param player The player to check
|
||||||
* @return all the players in the player's party
|
* @return all the players in the player's party
|
||||||
*/
|
*/
|
||||||
public static List<OfflinePlayer> getAllMembers(Player player) {
|
public LinkedHashSet<String> getAllMembers(Party party) {
|
||||||
Party party = UserManager.getPlayer(player).getParty();
|
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -115,7 +128,7 @@ public final class PartyManager {
|
|||||||
* @param partyName The party to check
|
* @param partyName The party to check
|
||||||
* @return all online players in this party
|
* @return all online players in this party
|
||||||
*/
|
*/
|
||||||
public static List<Player> getOnlineMembers(String partyName) {
|
public List<Player> getOnlineMembers(String partyName) {
|
||||||
Party party = getParty(partyName);
|
Party party = getParty(partyName);
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
@@ -125,29 +138,13 @@ public final class PartyManager {
|
|||||||
return party.getOnlineMembers();
|
return party.getOnlineMembers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all online players in this party.
|
|
||||||
*
|
|
||||||
* @param player The player to check
|
|
||||||
* @return all online players in this party
|
|
||||||
*/
|
|
||||||
public static List<Player> getOnlineMembers(Player player) {
|
|
||||||
Party party = getPlayerParty(player.getName());
|
|
||||||
|
|
||||||
if (party == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return getOnlineMembers(party.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve a party by its name
|
* Retrieve a party by its name
|
||||||
*
|
*
|
||||||
* @param partyName The party name
|
* @param partyName The party name
|
||||||
* @return the existing party, null otherwise
|
* @return the existing party, null otherwise
|
||||||
*/
|
*/
|
||||||
public static Party getParty(String partyName) {
|
public Party getParty(String partyName) {
|
||||||
for (Party party : parties) {
|
for (Party party : parties) {
|
||||||
if (party.getName().equals(partyName)) {
|
if (party.getName().equals(partyName)) {
|
||||||
return party;
|
return party;
|
||||||
@@ -163,10 +160,10 @@ public final class PartyManager {
|
|||||||
* @param playerName The member name
|
* @param playerName The member name
|
||||||
* @return the existing party, null otherwise
|
* @return the existing party, null otherwise
|
||||||
*/
|
*/
|
||||||
public static Party getPlayerParty(String playerName) {
|
public Party getPlayerParty(String playerName) {
|
||||||
for (Party party : parties) {
|
for (Party party : parties) {
|
||||||
for (OfflinePlayer member : party.getMembers()) {
|
for (String memberName : party.getMembers()) {
|
||||||
if (member.getName().equalsIgnoreCase(playerName)) {
|
if (memberName.equalsIgnoreCase(playerName)) {
|
||||||
return party;
|
return party;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,7 +177,7 @@ public final class PartyManager {
|
|||||||
*
|
*
|
||||||
* @return the list of parties.
|
* @return the list of parties.
|
||||||
*/
|
*/
|
||||||
public static List<Party> getParties() {
|
public List<Party> getParties() {
|
||||||
return parties;
|
return parties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,10 +187,10 @@ public final class PartyManager {
|
|||||||
* @param player The player to remove
|
* @param player The player to remove
|
||||||
* @param party The party
|
* @param party The party
|
||||||
*/
|
*/
|
||||||
public static void removeFromParty(OfflinePlayer player, Party party) {
|
public void removeFromParty(OfflinePlayer player, Party party) {
|
||||||
List<OfflinePlayer> members = party.getMembers();
|
LinkedHashSet<String> members = party.getMembers();
|
||||||
|
|
||||||
members.remove(player);
|
members.remove(player.getName());
|
||||||
|
|
||||||
if (members.isEmpty()) {
|
if (members.isEmpty()) {
|
||||||
parties.remove(party);
|
parties.remove(party);
|
||||||
@@ -201,19 +198,13 @@ public final class PartyManager {
|
|||||||
else {
|
else {
|
||||||
// If the leaving player was the party leader, appoint a new leader from the party members
|
// If the leaving player was the party leader, appoint a new leader from the party members
|
||||||
if (party.getLeader().equalsIgnoreCase(player.getName())) {
|
if (party.getLeader().equalsIgnoreCase(player.getName())) {
|
||||||
String newLeader = members.get(0).getName();
|
party.setLeader(members.iterator().next());
|
||||||
party.setLeader(newLeader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
informPartyMembersQuit(player, party);
|
informPartyMembersQuit(player, party);
|
||||||
}
|
}
|
||||||
|
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player.getName());
|
processPlayerLeaving(UserManager.getPlayer(player));
|
||||||
|
|
||||||
if (mcMMOPlayer != null) {
|
|
||||||
mcMMOPlayer.removeParty();
|
|
||||||
mcMMOPlayer.setItemShareModifier(10);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,16 +212,11 @@ public final class PartyManager {
|
|||||||
*
|
*
|
||||||
* @param party The party to remove
|
* @param party The party to remove
|
||||||
*/
|
*/
|
||||||
public static void disbandParty(Party party) {
|
public void disbandParty(Party party) {
|
||||||
List<OfflinePlayer> members = party.getMembers();
|
LinkedHashSet<String> members = party.getMembers();
|
||||||
|
|
||||||
for (OfflinePlayer member : members) {
|
for (String memberName : members) {
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(member.getName());
|
processPlayerLeaving(UserManager.getPlayer(memberName));
|
||||||
|
|
||||||
if (mcMMOPlayer != null) {
|
|
||||||
mcMMOPlayer.removeParty();
|
|
||||||
mcMMOPlayer.setItemShareModifier(10);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
members.clear();
|
members.clear();
|
||||||
@@ -241,11 +227,10 @@ public final class PartyManager {
|
|||||||
* Create a new party
|
* Create a new party
|
||||||
*
|
*
|
||||||
* @param player The player to add to the party
|
* @param player The player to add to the party
|
||||||
* @param mcMMOPlayer The player to add to the party
|
|
||||||
* @param partyName The party to add the player to
|
* @param partyName The party to add the player to
|
||||||
* @param password The password for this party, null if there was no password
|
* @param password The password for this party, null if there was no password
|
||||||
*/
|
*/
|
||||||
public static void createParty(Player player, McMMOPlayer mcMMOPlayer, String partyName, String password) {
|
public void createParty(Player player, String partyName, String password) {
|
||||||
partyName = partyName.replace(".", "");
|
partyName = partyName.replace(".", "");
|
||||||
Party party = getParty(partyName);
|
Party party = getParty(partyName);
|
||||||
|
|
||||||
@@ -269,7 +254,7 @@ public final class PartyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Party.Create", party.getName()));
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Create", party.getName()));
|
||||||
addToParty(player, mcMMOPlayer, party);
|
addToParty(player, party);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -280,17 +265,18 @@ public final class PartyManager {
|
|||||||
* @param party The party to add the player to
|
* @param party The party to add the player to
|
||||||
* @param password the password for this party, null if there was no password
|
* @param password the password for this party, null if there was no password
|
||||||
*/
|
*/
|
||||||
public static void joinParty(Player player, McMMOPlayer mcMMOPlayer, Party party, String password) {
|
public void joinParty(Player player, Party party, String password) {
|
||||||
if (!checkPartyPassword(player, party, password)) {
|
if (!checkPartyPassword(player, party, password)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mcMMOPlayer.getParty() == party) {
|
// // Pretty sure this isn't possible.
|
||||||
return;
|
// if (mcMMOPlayer.getParty() == party) {
|
||||||
}
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Party.Join", party.getName()));
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Join", party.getName()));
|
||||||
addToParty(player, mcMMOPlayer, party);
|
addToParty(player, party);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -301,7 +287,7 @@ public final class PartyManager {
|
|||||||
* @param password The password provided by the player
|
* @param password The password provided by the player
|
||||||
* @return true if the player can join the party
|
* @return true if the player can join the party
|
||||||
*/
|
*/
|
||||||
public static boolean checkPartyPassword(Player player, Party party, String password) {
|
public boolean checkPartyPassword(Player player, Party party, String password) {
|
||||||
// Don't care about passwords if it isn't locked
|
// Don't care about passwords if it isn't locked
|
||||||
if (party.isLocked()) {
|
if (party.isLocked()) {
|
||||||
String partyPassword = party.getPassword();
|
String partyPassword = party.getPassword();
|
||||||
@@ -331,20 +317,22 @@ public final class PartyManager {
|
|||||||
* @param Player The plaer to add to the party
|
* @param Player The plaer to add to the party
|
||||||
* @param mcMMOPlayer The player to add to the party
|
* @param mcMMOPlayer The player to add to the party
|
||||||
*/
|
*/
|
||||||
public static void joinInvitedParty(Player player, McMMOPlayer mcMMOPlayer) {
|
public void joinInvitedParty(Player player) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
Party invite = mcMMOPlayer.getPartyInvite();
|
Party invite = mcMMOPlayer.getPartyInvite();
|
||||||
|
|
||||||
if (mcMMOPlayer.getParty() == invite) {
|
if (mcMMOPlayer.getParty() == invite) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parties.contains(invite)) {
|
// // Pretty sure this isn't possible
|
||||||
parties.add(invite);
|
// if (!parties.contains(invite)) {
|
||||||
}
|
// parties.add(invite);
|
||||||
|
// }
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Invite.Accepted", invite.getName()));
|
player.sendMessage(LocaleLoader.getString("Commands.Invite.Accepted", invite.getName()));
|
||||||
mcMMOPlayer.removePartyInvite();
|
mcMMOPlayer.removePartyInvite();
|
||||||
addToParty(player, mcMMOPlayer, invite);
|
addToParty(player, invite);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -354,14 +342,21 @@ public final class PartyManager {
|
|||||||
* @param mcMMOPlayer The player to add to the party
|
* @param mcMMOPlayer The player to add to the party
|
||||||
* @param party The party
|
* @param party The party
|
||||||
*/
|
*/
|
||||||
public static void addToParty(OfflinePlayer player, McMMOPlayer mcMMOPlayer, Party party) {
|
public void addToParty(OfflinePlayer player, Party party) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
if (mcMMOPlayer.getParty() == party) {
|
if (mcMMOPlayer.getParty() == party) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!parties.contains(party)) {
|
||||||
|
parties.add(party);
|
||||||
|
}
|
||||||
|
|
||||||
informPartyMembersJoin(player, party);
|
informPartyMembersJoin(player, party);
|
||||||
mcMMOPlayer.setParty(party);
|
mcMMOPlayer.setParty(party);
|
||||||
party.getMembers().add(player);
|
|
||||||
|
party.getMembers().add(player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -370,7 +365,7 @@ public final class PartyManager {
|
|||||||
* @param partyName The party name
|
* @param partyName The party name
|
||||||
* @return the leader of the party
|
* @return the leader of the party
|
||||||
*/
|
*/
|
||||||
public static String getPartyLeader(String partyName) {
|
public String getPartyLeader(String partyName) {
|
||||||
Party party = getParty(partyName);
|
Party party = getParty(partyName);
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
@@ -386,7 +381,7 @@ public final class PartyManager {
|
|||||||
* @param playerName The name of the player to set as leader
|
* @param playerName The name of the player to set as leader
|
||||||
* @param party The party
|
* @param party The party
|
||||||
*/
|
*/
|
||||||
public static void setPartyLeader(String playerName, Party party) {
|
public void setPartyLeader(String playerName, Party party) {
|
||||||
String leaderName = party.getLeader();
|
String leaderName = party.getLeader();
|
||||||
|
|
||||||
for (Player member : party.getOnlineMembers()) {
|
for (Player member : party.getOnlineMembers()) {
|
||||||
@@ -411,7 +406,9 @@ public final class PartyManager {
|
|||||||
* @param mcMMOPlayer The player to check
|
* @param mcMMOPlayer The player to check
|
||||||
* @return true if the player can invite
|
* @return true if the player can invite
|
||||||
*/
|
*/
|
||||||
public static boolean canInvite(Player player, Party party) {
|
public boolean canInvite(Player player) {
|
||||||
|
Party party = getPlayerParty(player.getName());
|
||||||
|
|
||||||
if (party.isLocked() && !party.getLeader().equalsIgnoreCase(player.getName())) {
|
if (party.isLocked() && !party.getLeader().equalsIgnoreCase(player.getName())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -419,48 +416,15 @@ public final class PartyManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a string is a valid party name.
|
|
||||||
*
|
|
||||||
* @param partyName The party name to check
|
|
||||||
* @return true if this is a valid party, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isParty(String partyName) {
|
|
||||||
for (Party party : parties) {
|
|
||||||
if (party.getName().equals(partyName)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load party file.
|
* Load party file.
|
||||||
*/
|
*/
|
||||||
public static void loadParties() {
|
private void loadParties() {
|
||||||
try {
|
if (!partyFile.exists()) {
|
||||||
mcMMO.p.getServer().getOfflinePlayer("nossr50"); // TODO: Find a less-hacky way to manage reloading.
|
|
||||||
}
|
|
||||||
catch (IndexOutOfBoundsException ex){
|
|
||||||
new PartyLoaderTask().runTaskLater(mcMMO.p, 0);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
File file = new File(partiesFilePath);
|
YamlConfiguration partiesFile = YamlConfiguration.loadConfiguration(partyFile);
|
||||||
|
|
||||||
if (!file.exists()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
YamlConfiguration partiesFile = new YamlConfiguration();
|
|
||||||
|
|
||||||
try {
|
|
||||||
partiesFile.load(file);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String partyName : partiesFile.getConfigurationSection("").getKeys(false)) {
|
for (String partyName : partiesFile.getConfigurationSection("").getKeys(false)) {
|
||||||
Party party = new Party();
|
Party party = new Party();
|
||||||
@@ -469,15 +433,14 @@ public final class PartyManager {
|
|||||||
party.setLeader(partiesFile.getString(partyName + ".Leader"));
|
party.setLeader(partiesFile.getString(partyName + ".Leader"));
|
||||||
party.setPassword(partiesFile.getString(partyName + ".Password"));
|
party.setPassword(partiesFile.getString(partyName + ".Password"));
|
||||||
party.setLocked(partiesFile.getBoolean(partyName + ".Locked"));
|
party.setLocked(partiesFile.getBoolean(partyName + ".Locked"));
|
||||||
party.setXpShareMode(ShareHandler.ShareMode.getFromString(partiesFile.getString(partyName + ".ExpShareMode")));
|
party.setXpShareMode(ShareHandler.ShareMode.getShareMode(partiesFile.getString(partyName + ".ExpShareMode", "NONE")));
|
||||||
party.setItemShareMode(ShareHandler.ShareMode.getFromString(partiesFile.getString(partyName + ".ItemShareMode")));
|
party.setItemShareMode(ShareHandler.ShareMode.getShareMode(partiesFile.getString(partyName + ".ItemShareMode", "NONE")));
|
||||||
|
|
||||||
List<String> memberNames = partiesFile.getStringList(partyName + ".Members");
|
List<String> memberNames = partiesFile.getStringList(partyName + ".Members");
|
||||||
List<OfflinePlayer> members = party.getMembers();
|
LinkedHashSet<String> members = party.getMembers();
|
||||||
Server server = mcMMO.p.getServer();
|
|
||||||
|
|
||||||
for (String memberName : memberNames) {
|
for (String memberName : memberNames) {
|
||||||
members.add(server.getOfflinePlayer(memberName));
|
members.add(memberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
parties.add(party);
|
parties.add(party);
|
||||||
@@ -487,11 +450,9 @@ public final class PartyManager {
|
|||||||
/**
|
/**
|
||||||
* Save party file.
|
* Save party file.
|
||||||
*/
|
*/
|
||||||
public static void saveParties() {
|
public void saveParties() {
|
||||||
File file = new File(partiesFilePath);
|
if (partyFile.exists()) {
|
||||||
|
partyFile.delete();
|
||||||
if (file.exists()) {
|
|
||||||
file.delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
YamlConfiguration partiesFile = new YamlConfiguration();
|
YamlConfiguration partiesFile = new YamlConfiguration();
|
||||||
@@ -507,15 +468,17 @@ public final class PartyManager {
|
|||||||
|
|
||||||
List<String> memberNames = new ArrayList<String>();
|
List<String> memberNames = new ArrayList<String>();
|
||||||
|
|
||||||
for (OfflinePlayer member : party.getMembers()) {
|
for (String member : party.getMembers()) {
|
||||||
memberNames.add(member.getName());
|
if (!memberNames.contains(member)) {
|
||||||
|
memberNames.add(member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
partiesFile.set(partyName + ".Members", memberNames);
|
partiesFile.set(partyName + ".Members", memberNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
partiesFile.save(new File(partiesFilePath));
|
partiesFile.save(partyFile);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -531,7 +494,7 @@ public final class PartyManager {
|
|||||||
* @param reason The reason for changing parties
|
* @param reason The reason for changing parties
|
||||||
* @return true if the change event was successful, false otherwise
|
* @return true if the change event was successful, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean handlePartyChangeEvent(Player player, String oldPartyName, String newPartyName, EventReason reason) {
|
public boolean handlePartyChangeEvent(Player player, String oldPartyName, String newPartyName, EventReason reason) {
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, oldPartyName, newPartyName, reason);
|
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, oldPartyName, newPartyName, reason);
|
||||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
@@ -544,7 +507,7 @@ public final class PartyManager {
|
|||||||
* @param player The player that joins
|
* @param player The player that joins
|
||||||
* @param party The concerned party
|
* @param party The concerned party
|
||||||
*/
|
*/
|
||||||
private static void informPartyMembersJoin(OfflinePlayer player, Party party) {
|
private void informPartyMembersJoin(OfflinePlayer player, Party party) {
|
||||||
for (Player member : party.getOnlineMembers()) {
|
for (Player member : party.getOnlineMembers()) {
|
||||||
if (!member.equals(player)) {
|
if (!member.equals(player)) {
|
||||||
member.sendMessage(LocaleLoader.getString("Party.InformedOnJoin", player.getName()));
|
member.sendMessage(LocaleLoader.getString("Party.InformedOnJoin", player.getName()));
|
||||||
@@ -558,11 +521,21 @@ public final class PartyManager {
|
|||||||
* @param player The player that quits
|
* @param player The player that quits
|
||||||
* @param party The concerned party
|
* @param party The concerned party
|
||||||
*/
|
*/
|
||||||
private static void informPartyMembersQuit(OfflinePlayer player, Party party) {
|
private void informPartyMembersQuit(OfflinePlayer player, Party party) {
|
||||||
for (Player member : party.getOnlineMembers()) {
|
for (Player member : party.getOnlineMembers()) {
|
||||||
if (!member.equals(player)) {
|
if (!member.equals(player)) {
|
||||||
member.sendMessage(LocaleLoader.getString("Party.InformedOnQuit", player.getName()));
|
member.sendMessage(LocaleLoader.getString("Party.InformedOnQuit", player.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processPlayerLeaving(McMMOPlayer mcMMOPlayer) {
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.removeParty();
|
||||||
|
mcMMOPlayer.setPartyChat(false);
|
||||||
|
mcMMOPlayer.setItemShareModifier(10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,17 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.config.party.ItemWeightConfig;
|
import com.gmail.nossr50.config.party.ItemWeightConfig;
|
||||||
|
import com.gmail.nossr50.datatypes.party.ItemShareType;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public final class ShareHandler {
|
public final class ShareHandler {
|
||||||
@@ -22,15 +23,19 @@ public final class ShareHandler {
|
|||||||
EQUAL,
|
EQUAL,
|
||||||
RANDOM;
|
RANDOM;
|
||||||
|
|
||||||
public static ShareMode getFromString(String string) {
|
public static ShareMode getShareMode(String string) {
|
||||||
try {
|
try {
|
||||||
return valueOf(string);
|
return valueOf(string);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException exception) {
|
catch (IllegalArgumentException ex) {
|
||||||
return NONE;
|
if (string.equalsIgnoreCase("even")) {
|
||||||
}
|
return EQUAL;
|
||||||
catch (NullPointerException exception) {
|
}
|
||||||
return NONE;
|
else if (CommandUtils.shouldDisableToggle(string)) {
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -48,13 +53,11 @@ public final class ShareHandler {
|
|||||||
* @param skillType Skill being used
|
* @param skillType Skill being used
|
||||||
* @return True is the xp has been shared
|
* @return True is the xp has been shared
|
||||||
*/
|
*/
|
||||||
public static boolean handleXpShare(int xp, McMMOPlayer mcMMOPlayer, SkillType skillType) {
|
public static boolean handleXpShare(float xp, McMMOPlayer mcMMOPlayer, SkillType skillType) {
|
||||||
Party party = mcMMOPlayer.getParty();
|
switch (mcMMOPlayer.getParty().getXpShareMode()) {
|
||||||
|
|
||||||
switch (party.getXpShareMode()) {
|
|
||||||
case EQUAL:
|
case EQUAL:
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
nearMembers = mcMMO.getPartyManager().getNearbyPartyMembers(player, Config.getInstance().getPartyShareRange());
|
||||||
|
|
||||||
if (nearMembers.isEmpty()) {
|
if (nearMembers.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
@@ -67,18 +70,17 @@ public final class ShareHandler {
|
|||||||
shareBonus = Config.getInstance().getPartyShareBonusCap();
|
shareBonus = Config.getInstance().getPartyShareBonusCap();
|
||||||
}
|
}
|
||||||
|
|
||||||
double splitXp = xp / partySize * shareBonus;
|
float splitXp = (float) (xp / partySize * shareBonus);
|
||||||
int roundedXp = (int) Math.ceil(splitXp);
|
|
||||||
|
|
||||||
for (Player member : nearMembers) {
|
for (Player member : nearMembers) {
|
||||||
UserManager.getPlayer(member).beginUnsharedXpGain(skillType, roundedXp);
|
UserManager.getPlayer(member).beginUnsharedXpGain(skillType, splitXp);
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMOPlayer.beginUnsharedXpGain(skillType, roundedXp);
|
mcMMOPlayer.beginUnsharedXpGain(skillType, splitXp);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case NONE:
|
case NONE:
|
||||||
// Fallthrough
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -91,9 +93,8 @@ public final class ShareHandler {
|
|||||||
* @param mcMMOPlayer Player who picked up the item
|
* @param mcMMOPlayer Player who picked up the item
|
||||||
* @return True if the item has been shared
|
* @return True if the item has been shared
|
||||||
*/
|
*/
|
||||||
public static boolean handleItemShare(PlayerPickupItemEvent event, McMMOPlayer mcMMOPlayer) {
|
public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) {
|
||||||
Item item = event.getItem();
|
ItemStack itemStack = drop.getItemStack();
|
||||||
ItemStack itemStack = item.getItemStack();
|
|
||||||
Party party = mcMMOPlayer.getParty();
|
Party party = mcMMOPlayer.getParty();
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
Player winningPlayer = null;
|
Player winningPlayer = null;
|
||||||
@@ -101,23 +102,16 @@ public final class ShareHandler {
|
|||||||
ItemStack newStack = itemStack.clone();
|
ItemStack newStack = itemStack.clone();
|
||||||
newStack.setAmount(1);
|
newStack.setAmount(1);
|
||||||
|
|
||||||
if (ItemUtils.isMobDrop(itemStack) && !party.sharingLootDrops()) {
|
ItemShareType dropType = ItemShareType.getShareType(itemStack);
|
||||||
return false;
|
|
||||||
}
|
if (dropType == null || !party.sharingDrops(dropType)) {
|
||||||
else if (ItemUtils.isMiningDrop(itemStack) && !party.sharingMiningDrops()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isHerbalismDrop(itemStack) && !party.sharingHerbalismDrops()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isWoodcuttingDrop(itemStack) && !party.sharingWoodcuttingDrops()) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (party.getItemShareMode()) {
|
switch (party.getItemShareMode()) {
|
||||||
case EQUAL:
|
case EQUAL:
|
||||||
McMMOPlayer mcMMOTarget;
|
McMMOPlayer mcMMOTarget;
|
||||||
nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
nearMembers = mcMMO.getPartyManager().getNearbyPartyMembers(player, Config.getInstance().getPartyShareRange());
|
||||||
|
|
||||||
if (nearMembers.isEmpty()) {
|
if (nearMembers.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
@@ -126,8 +120,7 @@ public final class ShareHandler {
|
|||||||
nearMembers.add(player);
|
nearMembers.add(player);
|
||||||
partySize = nearMembers.size();
|
partySize = nearMembers.size();
|
||||||
|
|
||||||
event.setCancelled(true);
|
drop.remove();
|
||||||
item.remove();
|
|
||||||
int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
|
int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
|
||||||
|
|
||||||
for (int i = 0; i < itemStack.getAmount(); i++) {
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
||||||
@@ -163,8 +156,9 @@ public final class ShareHandler {
|
|||||||
winningPlayer.updateInventory();
|
winningPlayer.updateInventory();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case RANDOM:
|
case RANDOM:
|
||||||
nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
nearMembers = mcMMO.getPartyManager().getNearbyPartyMembers(player, Config.getInstance().getPartyShareRange());
|
||||||
|
|
||||||
if (nearMembers.isEmpty()) {
|
if (nearMembers.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
@@ -172,8 +166,7 @@ public final class ShareHandler {
|
|||||||
|
|
||||||
partySize = nearMembers.size() + 1;
|
partySize = nearMembers.size() + 1;
|
||||||
|
|
||||||
event.setCancelled(true);
|
drop.remove();
|
||||||
item.remove();
|
|
||||||
|
|
||||||
for (int i = 0; i < itemStack.getAmount(); i++) {
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
||||||
int randomMember = Misc.getRandom().nextInt(partySize);
|
int randomMember = Misc.getRandom().nextInt(partySize);
|
||||||
@@ -192,8 +185,8 @@ public final class ShareHandler {
|
|||||||
winningPlayer.updateInventory();
|
winningPlayer.updateInventory();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case NONE:
|
case NONE:
|
||||||
// Fallthrough
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.gmail.nossr50.runnables;
|
||||||
|
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
|
||||||
|
public class MobHealthDisplayUpdaterTask extends BukkitRunnable {
|
||||||
|
private LivingEntity target;
|
||||||
|
private String oldName;
|
||||||
|
private boolean oldNameVisible;
|
||||||
|
|
||||||
|
public MobHealthDisplayUpdaterTask(LivingEntity target) {
|
||||||
|
if (target.isValid()) {
|
||||||
|
this.target = target;
|
||||||
|
this.oldName = target.getMetadata(mcMMO.customNameKey).get(0).asString();
|
||||||
|
this.oldNameVisible = target.getMetadata(mcMMO.customVisibleKey).get(0).asBoolean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (target.isValid()) {
|
||||||
|
target.setCustomNameVisible(oldNameVisible);
|
||||||
|
target.setCustomName(oldName);
|
||||||
|
target.removeMetadata(mcMMO.customNameKey, mcMMO.p);
|
||||||
|
target.removeMetadata(mcMMO.customVisibleKey, mcMMO.p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,6 @@ public class SaveTimerTask extends BukkitRunnable {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
PartyManager.saveParties();
|
mcMMO.getPartyManager().saveParties();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ public class StickyPistonTrackerTask extends BukkitRunnable {
|
|||||||
Block newBlock = block.getRelative(direction);
|
Block newBlock = block.getRelative(direction);
|
||||||
Block originalBlock = newBlock.getRelative(direction);
|
Block originalBlock = newBlock.getRelative(direction);
|
||||||
|
|
||||||
if (originalBlock.getType() != Material.AIR || !mcMMO.placeStore.isTrue(originalBlock)) {
|
if (originalBlock.getType() != Material.AIR || !mcMMO.getPlaceStore().isTrue(originalBlock)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.placeStore.setFalse(originalBlock);
|
mcMMO.getPlaceStore().setFalse(originalBlock);
|
||||||
mcMMO.placeStore.setTrue(newBlock);
|
mcMMO.getPlaceStore().setTrue(newBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.database.DatabaseManager;
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.database.FlatfileDatabaseManager;
|
||||||
|
import com.gmail.nossr50.database.SQLDatabaseManager;
|
||||||
|
|
||||||
public class McrankCommandAsyncTask extends BukkitRunnable {
|
public class McrankCommandAsyncTask extends BukkitRunnable {
|
||||||
private final String playerName;
|
private final String playerName;
|
||||||
@@ -19,7 +21,7 @@ public class McrankCommandAsyncTask extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Map<String, Integer> skills = DatabaseManager.readSQLRank(playerName);
|
Map<String, Integer> skills = Config.getInstance().getUseMySQL() ? SQLDatabaseManager.readSQLRank(playerName) : FlatfileDatabaseManager.getPlayerRanks(playerName);
|
||||||
|
|
||||||
new McrankCommandDisplayTask(skills, sender, playerName).runTaskLater(mcMMO.p, 1);
|
new McrankCommandDisplayTask(skills, sender, playerName).runTaskLater(mcMMO.p, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
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.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -24,27 +25,22 @@ public class McrankCommandDisplayTask extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Player player = mcMMO.p.getServer().getPlayer(playerName);
|
||||||
|
Integer rank;
|
||||||
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Heading"));
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Heading"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Player", playerName));
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Player", playerName));
|
||||||
|
|
||||||
for (SkillType skillType : SkillType.values()) {
|
for (SkillType skill : SkillType.nonChildSkills()) {
|
||||||
if ((sender instanceof Player && !Permissions.skillEnabled(sender, skillType)) || skillType.isChildSkill()) {
|
if (player != null && !Permissions.skillEnabled(player, skill)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skills.get(skillType.name()) == null) {
|
rank = skills.get(skill.name());
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skillType), LocaleLoader.getString("Commands.mcrank.Unranked")));
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skill), (rank == null ? LocaleLoader.getString("Commands.mcrank.Unranked") : rank)));
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Skill", SkillUtils.getSkillName(skillType), skills.get(skillType.name())));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skills.get("ALL") == null) {
|
rank = skills.get("ALL");
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Overall", LocaleLoader.getString("Commands.mcrank.Unranked")));
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Overall", (rank == null ? LocaleLoader.getString("Commands.mcrank.Unranked") : rank)));
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrank.Overall", skills.get("ALL")));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,31 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.runnables.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
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.DatabaseManager;
|
import com.gmail.nossr50.database.SQLDatabaseManager;
|
||||||
|
|
||||||
public class MctopCommandAsyncTask extends BukkitRunnable {
|
public class MctopCommandAsyncTask extends BukkitRunnable {
|
||||||
|
|
||||||
private CommandSender sender;
|
private CommandSender sender;
|
||||||
private String query;
|
private String query;
|
||||||
private int page;
|
private int page;
|
||||||
|
|
||||||
public MctopCommandAsyncTask(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.equalsIgnoreCase("ALL") ? "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing" : query;
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
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");
|
final Collection<ArrayList<String>> userStats = SQLDatabaseManager.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").values();
|
||||||
|
|
||||||
new MctopCommandDisplayTask(userslist, page, tablePrefix, sender).runTaskLater(mcMMO.p, 1);
|
new MctopCommandDisplayTask(userStats, page, tablePrefix, sender).runTaskLater(mcMMO.p, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.runnables.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -11,13 +11,13 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
public class MctopCommandDisplayTask extends BukkitRunnable {
|
public class MctopCommandDisplayTask extends BukkitRunnable {
|
||||||
private HashMap<Integer, ArrayList<String>> userslist;
|
private Collection<ArrayList<String>> userStats;
|
||||||
private CommandSender sender;
|
private CommandSender sender;
|
||||||
private String query;
|
private String query;
|
||||||
private int page;
|
private int page;
|
||||||
|
|
||||||
public MctopCommandDisplayTask(HashMap<Integer, ArrayList<String>> userslist, int page, String query, CommandSender sender) {
|
public MctopCommandDisplayTask(Collection<ArrayList<String>> userStats, int page, String query, CommandSender sender) {
|
||||||
this.userslist = userslist;
|
this.userStats = userStats;
|
||||||
this.page = page;
|
this.page = page;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
@@ -33,13 +33,12 @@ public class MctopCommandDisplayTask extends BukkitRunnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int place = (page * 10) - 9;
|
int place = (page * 10) - 9;
|
||||||
for (int i = 1; i <= 10; i++) {
|
|
||||||
if (userslist.get(i) == null) {
|
for (ArrayList<String> stat : userStats) {
|
||||||
break;
|
String digit = (place < 10) ? "0" : "" + String.valueOf(place);
|
||||||
}
|
|
||||||
|
|
||||||
// Format: 1. Playername - skill value
|
// Format: 1. Playername - skill value
|
||||||
sender.sendMessage(place + ". " + ChatColor.GREEN + userslist.get(i).get(1) + " - " + ChatColor.WHITE + userslist.get(i).get(0));
|
sender.sendMessage(digit + ". " + ChatColor.GREEN + stat.get(1) + " - " + ChatColor.WHITE + stat.get(0));
|
||||||
place++;
|
place++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
|
|
||||||
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.DatabaseManager;
|
import com.gmail.nossr50.database.SQLDatabaseManager;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
@@ -158,7 +158,7 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check to see if the user is in the DB
|
// Check to see if the user is in the DB
|
||||||
id = DatabaseManager.getInt("SELECT id FROM "
|
id = SQLDatabaseManager.getInt("SELECT id FROM "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "users WHERE user = '" + playerName + "'");
|
+ "users WHERE user = '" + playerName + "'");
|
||||||
|
|
||||||
@@ -166,11 +166,11 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
theCount++;
|
theCount++;
|
||||||
|
|
||||||
// Update the skill values
|
// Update the skill values
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "users SET lastlogin = " + 0
|
+ "users SET lastlogin = " + 0
|
||||||
+ " WHERE id = " + id);
|
+ " WHERE id = " + id);
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "skills SET "
|
+ "skills SET "
|
||||||
+ " taming = taming+" + StringUtils.getInt(taming)
|
+ " taming = taming+" + StringUtils.getInt(taming)
|
||||||
@@ -186,7 +186,7 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
+ ", acrobatics = acrobatics+" + StringUtils.getInt(acrobatics)
|
+ ", acrobatics = acrobatics+" + StringUtils.getInt(acrobatics)
|
||||||
+ ", fishing = fishing+" + StringUtils.getInt(fishing)
|
+ ", fishing = fishing+" + StringUtils.getInt(fishing)
|
||||||
+ " WHERE user_id = " + id);
|
+ " WHERE user_id = " + id);
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "experience SET "
|
+ "experience SET "
|
||||||
+ " taming = " + StringUtils.getInt(tamingXP)
|
+ " taming = " + StringUtils.getInt(tamingXP)
|
||||||
@@ -207,24 +207,24 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
theCount++;
|
theCount++;
|
||||||
|
|
||||||
// Create the user in the DB
|
// Create the user in the DB
|
||||||
DatabaseManager.write("INSERT INTO "
|
SQLDatabaseManager.write("INSERT INTO "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "users (user, lastlogin) VALUES ('"
|
+ "users (user, lastlogin) VALUES ('"
|
||||||
+ playerName + "',"
|
+ playerName + "',"
|
||||||
+ System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR + ")");
|
+ System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR + ")");
|
||||||
id = DatabaseManager.getInt("SELECT id FROM "
|
id = SQLDatabaseManager.getInt("SELECT id FROM "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "users WHERE user = '"
|
+ "users WHERE user = '"
|
||||||
+ playerName + "'");
|
+ playerName + "'");
|
||||||
DatabaseManager.write("INSERT INTO "
|
SQLDatabaseManager.write("INSERT INTO "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "skills (user_id) VALUES (" + id + ")");
|
+ "skills (user_id) VALUES (" + id + ")");
|
||||||
DatabaseManager.write("INSERT INTO "
|
SQLDatabaseManager.write("INSERT INTO "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "experience (user_id) VALUES (" + id
|
+ "experience (user_id) VALUES (" + id
|
||||||
+ ")");
|
+ ")");
|
||||||
// Update the skill values
|
// Update the skill values
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "users SET lastlogin = " + 0
|
+ "users SET lastlogin = " + 0
|
||||||
+ " WHERE id = " + id);
|
+ " WHERE id = " + id);
|
||||||
@@ -234,7 +234,7 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
+ "users SET party = '" + party
|
+ "users SET party = '" + party
|
||||||
+ "' WHERE id = " + id);
|
+ "' WHERE id = " + id);
|
||||||
*/
|
*/
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "skills SET "
|
+ "skills SET "
|
||||||
+ " taming = taming+" + StringUtils.getInt(taming)
|
+ " taming = taming+" + StringUtils.getInt(taming)
|
||||||
@@ -250,7 +250,7 @@ public class SQLConversionTask extends BukkitRunnable {
|
|||||||
+ ", acrobatics = acrobatics+" + StringUtils.getInt(acrobatics)
|
+ ", acrobatics = acrobatics+" + StringUtils.getInt(acrobatics)
|
||||||
+ ", fishing = fishing+" + StringUtils.getInt(fishing)
|
+ ", fishing = fishing+" + StringUtils.getInt(fishing)
|
||||||
+ " WHERE user_id = " + id);
|
+ " WHERE user_id = " + id);
|
||||||
DatabaseManager.write("UPDATE "
|
SQLDatabaseManager.write("UPDATE "
|
||||||
+ tablePrefix
|
+ tablePrefix
|
||||||
+ "experience SET "
|
+ "experience SET "
|
||||||
+ " taming = " + StringUtils.getInt(tamingXP)
|
+ " taming = " + StringUtils.getInt(tamingXP)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user