diff --git a/Changelog.txt b/Changelog.txt index 5d689991d..fd95f141e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -14,9 +14,6 @@ Version 2.2.000 Added Sub-Skill named Crossbows Limit Break to Crossbows Permission node descriptions had mentions of ability changed to sub-skill and other minor corrections - Smelting now has a Bonus Drops section in config.yml - Second Smelt now only doubles smelting results for items which have bonus drop entries in the config - Fixed an array out of index bug for inventory click events mcMMO will now register arrows shot from the offhand as being from either Archery or Crossbows (before mcMMO ignored offhand Archery) (These permissions are all included in the mcmmo.defaults node) @@ -32,6 +29,30 @@ Version 2.2.000 New permission node 'mcmmo.ability.crossbows.crossbowslimitbreak' New permission node 'mcmmo.ability.crossbows.coneofdeath' + + The Party system has some new features, and a lot of bad features were removed completely, read the notes + Parties can no longer have passwords (see notes) + Parties can no longer be locked (see notes) + Parties no longer have item share (see notes) + Party alliances are gone (see notes) + Parties are always private (see notes) + Party members can be promoted to Officer by the Party Leader (officers are mini-party leaders) + Added Party Officer chat, only other officers (including the party leader) can read and participate + Added the following party subcommands: promote, demote + Removed the following party subcommands: join, lock, unlock, password, alliance, item share + + Added permission node 'mcmmo.chat.officerpartychat' + + The following permission nodes were removed because their related feature was removed + Removed permission node 'mcmmo.commands.party.unlock' + Removed permission node 'mcmmo.commands.party.alliance' + Removed permission node 'mcmmo.commands.party.password' + Removed permission node 'mcmmo.commands.party.itemshare' + + The following permission nodes were removed because permissions for these commands don't make sense, if you want to disable party commands just negate 'mcmmo.commands.party' + Removed permission node 'mcmmo.commands.party.quit' + Removed permission node 'mcmmo.commands.party.kick' + Added new locale string 'Overhaul.Name.Tridents' Added new locale string 'Tridents.SubSkill.TridentsLimitBreak.Name' Added new locale string 'Tridents.SubSkill.TridentsLimitBreak.Description' @@ -60,6 +81,10 @@ Version 2.2.000 Notes: These are the first new skills that I've written for mcMMO in about 9 years, I'll be listening closely to feedback and tweaking them often. + Parties got unnecessarily complex in my absence, I have removed many party features in order to simplify parties and bring them closer to my vision. I have also added new features which should improve parties where it matters. + About the removed party features, all the features I removed I consider poor quality features and I don't think they belong in mcMMO. Feel free to yell at me in discord if you disagree. + I don't know what genius decided to make parties public by default, when I found out that parties had been changed to such a system I could barely contain my disgust. Parties are back to being private, you get invited by a party leader or party officer. That is the only way to join a party. + Version 2.1.145 Reverted 'Changed one of the PlayerInteractEvent listeners to ignore cancelled events' from 2.1.144 diff --git a/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java b/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java index 23b4c8658..f1633ab76 100644 --- a/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.commands; -import com.gmail.nossr50.commands.party.PartySubcommandType; +import com.gmail.nossr50.commands.party.PartySubCommandType; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; @@ -109,7 +109,7 @@ public class McmmoCommand implements CommandExecutor { sender.sendMessage(ChatColor.DARK_AQUA + " /party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite")); sender.sendMessage(ChatColor.DARK_AQUA + " /party accept " + LocaleLoader.getString("Commands.Party.Accept")); - if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) { + if (Permissions.partySubcommand(sender, PartySubCommandType.TELEPORT)) { sender.sendMessage(ChatColor.DARK_AQUA + " /party teleport <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Teleport")); } } diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyAcceptCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyAcceptCommand.java index 7f92a4228..cb7120107 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyAcceptCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyAcceptCommand.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyChangePasswordCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyChangePasswordCommand.java index 2bc18b607..6d4f38dc7 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyChangePasswordCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyChangePasswordCommand.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java index c59b13bb6..062049c5d 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java @@ -1,7 +1,6 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.commands.chat.PartyChatCommand; -import com.gmail.nossr50.commands.party.alliance.PartyAllianceCommand; import com.gmail.nossr50.commands.party.teleport.PtpCommand; import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.player.McMMOPlayer; @@ -31,7 +30,7 @@ public class PartyCommand implements TabExecutor { static { ArrayList subcommands = new ArrayList<>(); - for (PartySubcommandType subcommand : PartySubcommandType.values()) { + for (PartySubCommandType subcommand : PartySubCommandType.values()) { subcommands.add(subcommand.toString()); } @@ -39,24 +38,19 @@ public class PartyCommand implements TabExecutor { PARTY_SUBCOMMANDS = ImmutableList.copyOf(subcommands); } - private final CommandExecutor partyJoinCommand = new PartyJoinCommand(); private final CommandExecutor partyAcceptCommand = new PartyAcceptCommand(); private final CommandExecutor partyCreateCommand = new PartyCreateCommand(); private final CommandExecutor partyQuitCommand = new PartyQuitCommand(); private final CommandExecutor partyXpShareCommand = new PartyXpShareCommand(); - private final CommandExecutor partyItemShareCommand = new PartyItemShareCommand(); private final CommandExecutor partyInviteCommand = new PartyInviteCommand(); private final CommandExecutor partyKickCommand = new PartyKickCommand(); private final CommandExecutor partyDisbandCommand = new PartyDisbandCommand(); private final CommandExecutor partyChangeOwnerCommand = new PartyChangeOwnerCommand(); - private final CommandExecutor partyLockCommand = new PartyLockCommand(); - private final CommandExecutor partyChangePasswordCommand = new PartyChangePasswordCommand(); private final CommandExecutor partyRenameCommand = new PartyRenameCommand(); private final CommandExecutor partyInfoCommand = new PartyInfoCommand(); private final CommandExecutor partyHelpCommand = new PartyHelpCommand(); private final CommandExecutor partyTeleportCommand = new PtpCommand(); private final CommandExecutor partyChatCommand = new PartyChatCommand(); - private final CommandExecutor partyAllianceCommand = new PartyAllianceCommand(); @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { @@ -92,21 +86,19 @@ public class PartyCommand implements TabExecutor { return partyInfoCommand.onCommand(sender, command, label, args); } - PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]); + PartySubCommandType subcommand = PartySubCommandType.getSubcommand(args[0]); if (subcommand == null) { return printUsage(player); } // Can't use this for lock/unlock since they're handled by the same command - if (subcommand != PartySubcommandType.LOCK && subcommand != PartySubcommandType.UNLOCK && !Permissions.partySubcommand(sender, subcommand)) { + if (!Permissions.partySubcommand(sender, subcommand)) { sender.sendMessage(command.getPermissionMessage()); return true; } switch (subcommand) { - case JOIN: - return partyJoinCommand.onCommand(sender, command, label, args); case ACCEPT: return partyAcceptCommand.onCommand(sender, command, label, args); case CREATE: @@ -147,23 +139,14 @@ public class PartyCommand implements TabExecutor { switch (subcommand) { case XPSHARE: return partyXpShareCommand.onCommand(sender, command, label, args); - case ITEMSHARE: - return partyItemShareCommand.onCommand(sender, command, label, args); case KICK: return partyKickCommand.onCommand(sender, command, label, args); case DISBAND: return partyDisbandCommand.onCommand(sender, command, label, args); case OWNER: return partyChangeOwnerCommand.onCommand(sender, command, label, args); - case LOCK: - case UNLOCK: - return partyLockCommand.onCommand(sender, command, label, args); - case PASSWORD: - return partyChangePasswordCommand.onCommand(sender, command, label, args); case RENAME: return partyRenameCommand.onCommand(sender, command, label, args); - case ALLIANCE: - return partyAllianceCommand.onCommand(sender, command, label, args); default: break; } @@ -177,7 +160,7 @@ public class PartyCommand implements TabExecutor { case 1: return StringUtil.copyPartialMatches(args[0], PARTY_SUBCOMMANDS, new ArrayList<>(PARTY_SUBCOMMANDS.size())); case 2: - PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]); + PartySubCommandType subcommand = PartySubCommandType.getSubcommand(args[0]); if (subcommand == null) { return ImmutableList.of(); @@ -223,7 +206,7 @@ public class PartyCommand implements TabExecutor { return ImmutableList.of(); } case 3: - if (PartySubcommandType.getSubcommand(args[0]) == PartySubcommandType.ITEMSHARE && isItemShareCategory(args[1])) { + if (PartySubCommandType.getSubcommand(args[0]) == PartySubCommandType.ITEMSHARE && isItemShareCategory(args[1])) { return StringUtil.copyPartialMatches(args[2], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<>(CommandUtils.TRUE_FALSE_OPTIONS.size())); } diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyCreateCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyCreateCommand.java index e8f716785..38a43976c 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyCreateCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyCreateCommand.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyDisbandCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyDisbandCommand.java index 05923e69d..0c06173ba 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyDisbandCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyDisbandCommand.java @@ -1,8 +1,10 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.datatypes.party.Party; +import com.gmail.nossr50.datatypes.party.PartyMember; import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -21,7 +23,7 @@ public class PartyDisbandCommand implements CommandExecutor { Party playerParty = mcMMO.getUserManager().getPlayer((Player) sender).getParty(); String partyName = playerParty.getPartyName(); - for (Player member : playerParty.getPartyMembers()) { + for (PartyMember member : playerParty.getPartyMembers()) { if (!mcMMO.getPartyManager().handlePartyChangeEvent(member, partyName, null, EventReason.KICKED_FROM_PARTY)) { return true; } diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java index 8e401e0b0..0f0a7d232 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java @@ -3,10 +3,9 @@ package com.gmail.nossr50.commands.party; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.PartyFeature; -import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.locale.LocaleLoader; -import org.bukkit.ChatColor; +import com.gmail.nossr50.mcMMO; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -88,34 +87,18 @@ public class PartyInfoCommand implements CommandExecutor { private void displayShareModeInfo(Player player, Party party) { boolean xpShareEnabled = isUnlockedFeature(party, PartyFeature.XP_SHARE); - boolean itemShareEnabled = isUnlockedFeature(party, PartyFeature.ITEM_SHARE); - boolean itemSharingActive = (party.getItemShareMode() != ShareMode.NONE); - if (!xpShareEnabled && !itemShareEnabled) { + if (!xpShareEnabled) { return; } String expShareInfo = ""; - String itemShareInfo = ""; - String separator = ""; if (xpShareEnabled) { expShareInfo = LocaleLoader.getString("Commands.Party.ExpShare", party.getXpShareMode().toString()); } - if (itemShareEnabled) { - itemShareInfo = LocaleLoader.getString("Commands.Party.ItemShare", party.getItemShareMode().toString()); - } - - if (xpShareEnabled && itemShareEnabled) { - separator = ChatColor.DARK_GRAY + " || "; - } - - player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + expShareInfo + separator + itemShareInfo); - - if (itemSharingActive) { - player.sendMessage(LocaleLoader.getString("Commands.Party.ItemShareCategories", party.getItemShareCategories())); - } + player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + expShareInfo); } private void displayMemberInfo(Player player, McMMOPlayer mmoPlayer, Party party) { diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyInviteCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyInviteCommand.java index 93cf08aac..1b52601e2 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyInviteCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyInviteCommand.java @@ -4,6 +4,7 @@ import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.commands.CommandUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyItemShareCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyItemShareCommand.java deleted file mode 100644 index 81f16dc5b..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyItemShareCommand.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.gmail.nossr50.commands.party; - -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.PartyFeature; -import com.gmail.nossr50.datatypes.party.ShareMode; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.util.StringUtils; -import com.gmail.nossr50.util.commands.CommandUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.Locale; - -public class PartyItemShareCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if(mcMMO.getUserManager().getPlayer((Player) sender) == null) - { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - - Party party = mcMMO.getUserManager().getPlayer((Player) sender).getParty(); - - if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ITEM_SHARE)) { - sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.4")); - return true; - } - - switch (args.length) { - case 2: - ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase(Locale.ENGLISH)); - - if (mode == null) { - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "")); - return true; - } - - handleChangingShareMode(party, mode); - return true; - - case 3: - boolean toggle; - - if (CommandUtils.shouldEnableToggle(args[2])) { - toggle = true; - } - else if (CommandUtils.shouldDisableToggle(args[2])) { - toggle = false; - } - else { - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", " ")); - return true; - } - - try { - handleToggleItemShareCategory(party, ItemShareType.valueOf(args[1].toUpperCase(Locale.ENGLISH)), toggle); - } - catch (IllegalArgumentException ex) { - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", " ")); - } - - return true; - - default: - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "")); - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", " ")); - return true; - } - } - - private void handleChangingShareMode(Party party, ShareMode mode) { - party.setItemShareMode(mode); - - String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Item"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString()))); - - for (Player member : party.getPartyMembers()) { - member.sendMessage(changeModeMessage); - } - } - - private void handleToggleItemShareCategory(Party party, ItemShareType type, boolean toggle) { - party.setSharingDrops(type, toggle); - - String toggleMessage = LocaleLoader.getString("Commands.Party.ToggleShareCategory", StringUtils.getCapitalized(type.toString()), toggle ? "enabled" : "disabled"); - - for (Player member : party.getPartyMembers()) { - member.sendMessage(toggleMessage); - } - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyJoinCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyJoinCommand.java deleted file mode 100644 index df4e0a7ea..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyJoinCommand.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.gmail.nossr50.commands.party; - -import com.gmail.nossr50.datatypes.party.Party; -import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.util.commands.CommandUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PartyJoinCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - switch (args.length) { - case 2: - case 3: - String targetName = CommandUtils.getMatchedPlayerName(args[1]); - McMMOPlayer mcMMOTarget = mcMMO.getUserManager().getPlayer(targetName); - - if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) { - return true; - } - - Player target = mcMMOTarget.getPlayer(); - - if (!mcMMOTarget.inParty()) { - sender.sendMessage(LocaleLoader.getString("Party.PlayerNotInParty", targetName)); - return true; - } - - Player player = (Player) sender; - - if(mcMMO.getUserManager().getPlayer((Player) sender) == null) - { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - - McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player); - Party targetParty = mcMMOTarget.getParty(); - - if (player.equals(target) || (mmoPlayer.inParty() && mmoPlayer.getParty().equals(targetParty))) { - sender.sendMessage(LocaleLoader.getString("Party.Join.Self")); - return true; - } - - String password = getPassword(args); - - // Make sure party passwords match - if (!mcMMO.getPartyManager().checkPartyPassword(player, targetParty, password)) { - return true; - } - - String partyName = targetParty.getPartyName(); - - // Changing parties - if (!mcMMO.getPartyManager().changeOrJoinParty(mmoPlayer, partyName)) { - return true; - } - - if(mcMMO.getPartyManager().isPartyFull(player, targetParty)) - { - player.sendMessage(LocaleLoader.getString("Commands.Party.PartyFull", targetParty.toString())); - return true; - } - - player.sendMessage(LocaleLoader.getString("Commands.Party.Join", partyName)); - mcMMO.getPartyManager().addToParty(mmoPlayer, targetParty); - return true; - - default: - sender.sendMessage(LocaleLoader.getString("Commands.Usage.3", "party", "join", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">", "[" + LocaleLoader.getString("Commands.Usage.Password") + "]")); - return true; - } - } - - private String getPassword(String[] args) { - if (args.length == 3) { - return args[2]; - } - - return null; - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyLockCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyLockCommand.java deleted file mode 100644 index fb09fd10b..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyLockCommand.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.gmail.nossr50.commands.party; - -import com.gmail.nossr50.datatypes.party.Party; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.util.Permissions; -import com.gmail.nossr50.util.commands.CommandUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PartyLockCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - switch (args.length) { - case 1: - if (args[0].equalsIgnoreCase("lock")) { - togglePartyLock(sender, true); - } - else if (args[0].equalsIgnoreCase("unlock")) { - togglePartyLock(sender, false); - } - - return true; - - case 2: - if (!args[0].equalsIgnoreCase("lock")) { - sendUsageStrings(sender); - return true; - } - - if (CommandUtils.shouldEnableToggle(args[1])) { - togglePartyLock(sender, true); - } - else if (CommandUtils.shouldDisableToggle(args[1])) { - togglePartyLock(sender, false); - } - else { - sendUsageStrings(sender); - } - - return true; - - default: - sendUsageStrings(sender); - return true; - } - } - - private void sendUsageStrings(CommandSender sender) { - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "lock", "[on|off]")); - sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "unlock")); - } - - private void togglePartyLock(CommandSender sender, boolean lock) { - if(mcMMO.getUserManager().getPlayer((Player) sender) == null) - { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return; - } - - Party party = mcMMO.getUserManager().getPlayer((Player) sender).getParty(); - - if (!Permissions.partySubcommand(sender, lock ? PartySubcommandType.LOCK : PartySubcommandType.UNLOCK)) { - sender.sendMessage(LocaleLoader.getString("mcMMO.NoPermission")); - return; - } - - if (lock == party.isLocked()) { - sender.sendMessage(LocaleLoader.getString("Party." + (lock ? "IsLocked" : "IsntLocked"))); - return; - } - - party.setPartyLock(lock); - sender.sendMessage(LocaleLoader.getString("Party." + (lock ? "Locked" : "Unlocked"))); - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartySubcommandType.java b/src/main/java/com/gmail/nossr50/commands/party/PartySubCommandType.java similarity index 63% rename from src/main/java/com/gmail/nossr50/commands/party/PartySubcommandType.java rename to src/main/java/com/gmail/nossr50/commands/party/PartySubCommandType.java index f4ebdb510..9f6cdc2e0 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartySubcommandType.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartySubCommandType.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.commands.party; -public enum PartySubcommandType { +public enum PartySubCommandType { JOIN, ACCEPT, CREATE, @@ -8,21 +8,18 @@ public enum PartySubcommandType { INFO, QUIT, XPSHARE, - ITEMSHARE, INVITE, KICK, DISBAND, OWNER, - LOCK, - UNLOCK, - PASSWORD, RENAME, TELEPORT, CHAT, - ALLIANCE; + PROMOTE, + DEMOTE; - public static PartySubcommandType getSubcommand(String commandName) { - for (PartySubcommandType command : values()) { + public static PartySubCommandType getSubcommand(String commandName) { + for (PartySubCommandType command : values()) { if (command.name().equalsIgnoreCase(commandName)) { return command; } @@ -39,14 +36,8 @@ public enum PartySubcommandType { } else if (commandName.equalsIgnoreCase("xpshare") || commandName.equalsIgnoreCase("shareexp") || commandName.equalsIgnoreCase("sharexp")) { return XPSHARE; + } else { + return null; } - else if (commandName.equalsIgnoreCase("shareitem") || commandName.equalsIgnoreCase("shareitems")) { - return ITEMSHARE; - } - else if (commandName.equalsIgnoreCase("ally")) { - return ALLIANCE; - } - - return null; } } diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyXpShareCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyXpShareCommand.java index e450291f8..1dba9afca 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyXpShareCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyXpShareCommand.java @@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.PartyFeature; import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.commands.CommandUtils; import org.bukkit.command.Command; diff --git a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceAcceptCommand.java b/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceAcceptCommand.java deleted file mode 100644 index 227dc78f3..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceAcceptCommand.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.gmail.nossr50.commands.party.alliance; - -import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.locale.LocaleLoader; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PartyAllianceAcceptCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length == 2) { - if (mcMMO.getUserManager().getPlayer((Player) sender) == null) { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - Player player = (Player) sender; - McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player); - - if (!mmoPlayer.hasPartyAllianceInvite()) { - sender.sendMessage(LocaleLoader.getString("mcMMO.NoInvites")); - return true; - } - - if (mmoPlayer.getParty().getAlly() != null) { - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.AlreadyAllies")); - return true; - } - - mcMMO.getPartyManager().acceptAllianceInvite(mmoPlayer); - return true; - } - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "alliance", "accept")); - return true; - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceCommand.java b/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceCommand.java deleted file mode 100644 index 93be5afdb..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceCommand.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.gmail.nossr50.commands.party.alliance; - -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.party.Party; -import com.gmail.nossr50.datatypes.party.PartyFeature; -import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.util.commands.CommandUtils; -import com.google.common.collect.ImmutableList; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabExecutor; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class PartyAllianceCommand implements TabExecutor { - private Player player; - private Party playerParty; - private Party targetParty; - - public static final List ALLIANCE_SUBCOMMANDS = ImmutableList.of("invite", "accept", "disband"); - - private final CommandExecutor partyAllianceInviteCommand = new PartyAllianceInviteCommand(); - private final CommandExecutor partyAllianceAcceptCommand = new PartyAllianceAcceptCommand(); - private final CommandExecutor partyAllianceDisbandCommand = new PartyAllianceDisbandCommand(); - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (CommandUtils.noConsoleUsage(sender)) { - return true; - } - - if(mcMMO.getUserManager().getPlayer((Player) sender) == null) - { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - - player = (Player) sender; - McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player); - - playerParty = mmoPlayer.getParty(); - - switch (args.length) { - case 1: - if (playerParty.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ALLIANCE)) { - sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.3")); - return true; - } - - if (playerParty.getAlly() == null) { - printUsage(); - return true; - } - - targetParty = playerParty.getAlly(); - - displayPartyHeader(); - displayMemberInfo(mmoPlayer); - return true; - - case 2: - case 3: - if (playerParty.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ALLIANCE)) { - sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.3")); - return true; - } - - if (args[1].equalsIgnoreCase("invite")) { - return partyAllianceInviteCommand.onCommand(sender, command, label, args); - } - - if (args[1].equalsIgnoreCase("accept")) { - return partyAllianceAcceptCommand.onCommand(sender, command, label, args); - } - - if (args[1].equalsIgnoreCase("disband")) { - return partyAllianceDisbandCommand.onCommand(sender, command, label, args); - } - - if (playerParty.getAlly() == null) { - printUsage(); - return true; - } - - targetParty = playerParty.getAlly(); - - displayPartyHeader(); - displayMemberInfo(mmoPlayer); - return true; - - default: - return false; - } - } - - private boolean printUsage() { - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Help.0")); - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Help.1")); - return true; - } - - @Override - public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length == 1) { - List matches = StringUtil.copyPartialMatches(args[0], ALLIANCE_SUBCOMMANDS, new ArrayList<>(ALLIANCE_SUBCOMMANDS.size())); - - if (matches.size() == 0) { - List playerNames = CommandUtils.getOnlinePlayerNames(commandSender); - return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<>(playerNames.size())); - } - - return matches; - } - return ImmutableList.of(); - } - - private void displayPartyHeader() { - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Header")); - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Ally", playerParty.getPartyName(), targetParty.getPartyName())); - } - - private void displayMemberInfo(McMMOPlayer mmoPlayer) { - List nearMembers = mcMMO.getPartyManager().getNearMembers(mmoPlayer); - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Members.Header")); - player.sendMessage(playerParty.createMembersList(player)); - player.sendMessage(ChatColor.DARK_GRAY + "----------------------------"); - player.sendMessage(targetParty.createMembersList(player)); - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceDisbandCommand.java b/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceDisbandCommand.java deleted file mode 100644 index 779c6c0af..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceDisbandCommand.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.gmail.nossr50.commands.party.alliance; - -import com.gmail.nossr50.datatypes.party.Party; -import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.locale.LocaleLoader; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PartyAllianceDisbandCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length == 2) { - if (mcMMO.getUserManager().getPlayer((Player) sender) == null) { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - Player player = (Player) sender; - McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player); - Party party = mmoPlayer.getParty(); - - if (party.getAlly() == null) { - sender.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.None")); - return true; - } - - mcMMO.getPartyManager().disbandAlliance(player, party, party.getAlly()); - return true; - } - sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "alliance", "disband")); - return true; - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceInviteCommand.java b/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceInviteCommand.java deleted file mode 100644 index 652ee8391..000000000 --- a/src/main/java/com/gmail/nossr50/commands/party/alliance/PartyAllianceInviteCommand.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.gmail.nossr50.commands.party.alliance; - -import com.gmail.nossr50.datatypes.party.Party; -import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.util.commands.CommandUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PartyAllianceInviteCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length == 3) { - String targetName = CommandUtils.getMatchedPlayerName(args[2]); - McMMOPlayer mcMMOTarget = mcMMO.getUserManager().getOfflinePlayer(targetName); - - if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) { - return false; - } - - Player target = mcMMOTarget.getPlayer(); - - if (mcMMO.getUserManager().getPlayer((Player) sender) == null) { - sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); - return true; - } - - Player player = (Player) sender; - McMMOPlayer mmoPlayer = mcMMO.getUserManager().getPlayer(player); - String playerName = player.getName(); - - if (player.equals(target)) { - sender.sendMessage(LocaleLoader.getString("Party.Invite.Self")); - return true; - } - - if (!mcMMOTarget.inParty()) { - player.sendMessage(LocaleLoader.getString("Party.PlayerNotInParty", targetName)); - return true; - } - - if (mcMMO.getPartyManager().inSameParty(player, target)) { - sender.sendMessage(LocaleLoader.getString("Party.Player.InSameParty", targetName)); - return true; - } - - if (!mcMMOTarget.getParty().getLeader().getUniqueId().equals(target.getUniqueId())) { - player.sendMessage(LocaleLoader.getString("Party.Target.NotOwner", targetName)); - return true; - } - - Party playerParty = mmoPlayer.getParty(); - - if (playerParty.getAlly() != null) { - player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.AlreadyAllies")); - return true; - } - - mcMMOTarget.setPartyAllianceInvite(playerParty); - - sender.sendMessage(LocaleLoader.getString("Commands.Invite.Success")); - target.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Invite.0", playerParty.getPartyName(), playerName)); - target.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Invite.1")); - return true; - } - sender.sendMessage(LocaleLoader.getString("Commands.Usage.3", "party", "alliance", "invite", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">")); - return true; - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptAnyCommand.java b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptAnyCommand.java index da465eb67..af494c4a4 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptAnyCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptAnyCommand.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party.teleport; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.Permissions; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptCommand.java b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptCommand.java index 988cdb937..70e864145 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpAcceptCommand.java @@ -3,6 +3,7 @@ package com.gmail.nossr50.commands.party.teleport; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.SkillUtils; import org.bukkit.World; diff --git a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpToggleCommand.java b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpToggleCommand.java index c67c3e0e4..adde34859 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpToggleCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpToggleCommand.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party.teleport; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.Permissions; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyData.java b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyData.java index 37cb7098e..0dab2868d 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyData.java +++ b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyData.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.datatypes.dirtydata; import com.gmail.nossr50.datatypes.mutableprimitives.MutableBoolean; +import com.google.common.base.Objects; import org.jetbrains.annotations.NotNull; public class DirtyData { @@ -35,4 +36,17 @@ public class DirtyData { this.data = data; setDirty(true); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DirtyData dirtyData = (DirtyData) o; + return Objects.equal(getData(), dirtyData.getData()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getData()); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataMap.java b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataMap.java index 77c494b7e..ff2f64bbd 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataMap.java +++ b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataMap.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.datatypes.dirtydata; import com.gmail.nossr50.datatypes.mutableprimitives.MutableBoolean; +import com.google.common.base.Objects; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -145,4 +146,17 @@ public class DirtyDataMap { setDirty(); return dataMap.merge(key, value, remappingFunction); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DirtyDataMap that = (DirtyDataMap) o; + return Objects.equal(getDataMap(), that.getDataMap()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getDataMap()); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataSet.java b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataSet.java new file mode 100644 index 000000000..d9a8c83bb --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/dirtydata/DirtyDataSet.java @@ -0,0 +1,129 @@ +package com.gmail.nossr50.datatypes.dirtydata; + +import com.gmail.nossr50.datatypes.mutableprimitives.MutableBoolean; +import com.google.common.base.Objects; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.Spliterator; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.stream.Stream; + +public class DirtyDataSet { + + private final @NotNull MutableBoolean dirtyFlag; //Can be pointed at a reference + private @NotNull Set dataSet; + + public DirtyDataSet(@NotNull Set data, @NotNull MutableBoolean referenceFlag) { + this.dataSet = data; + this.dirtyFlag = referenceFlag; + } + + public boolean isDirty() { + return dirtyFlag.getImmutableCopy(); + } + + private void setDirty() { + dirtyFlag.setBoolean(true); + } + + public void setData(@NotNull Set dataSet) { + this.dataSet = dataSet; + setDirty(); + } + + public @NotNull Set getDataSet() { + setDirty(); + return dataSet; + } + + /* Set Interface Delegates */ + + public int size() { + return dataSet.size(); + } + + public boolean isEmpty() { + return dataSet.isEmpty(); + } + + public boolean contains(Object o) { + return dataSet.contains(o); + } + + public Iterator iterator() { + return dataSet.iterator(); + } + + public Object[] toArray() { + return dataSet.toArray(); + } + + public T[] toArray(@NotNull T[] ts) { + return dataSet.toArray(ts); + } + + public boolean add(E e) { + return dataSet.add(e); + } + + public boolean remove(Object o) { + return dataSet.remove(o); + } + + public boolean containsAll(@NotNull Collection collection) { + return dataSet.containsAll(collection); + } + + public boolean addAll(@NotNull Collection collection) { + return dataSet.addAll(collection); + } + + public boolean retainAll(@NotNull Collection collection) { + return dataSet.retainAll(collection); + } + + public boolean removeAll(@NotNull Collection collection) { + return dataSet.removeAll(collection); + } + + public void clear() { + dataSet.clear(); + } + + public Spliterator spliterator() { + return dataSet.spliterator(); + } + + public boolean removeIf(Predicate filter) { + return dataSet.removeIf(filter); + } + + public Stream stream() { + return dataSet.stream(); + } + + public Stream parallelStream() { + return dataSet.parallelStream(); + } + + public void forEach(Consumer action) { + dataSet.forEach(action); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DirtyDataSet that = (DirtyDataSet) o; + return Objects.equal(getDataSet(), that.getDataSet()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getDataSet()); + } +} diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableBoolean.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableBoolean.java index de4cd6804..89eabf72e 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableBoolean.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableBoolean.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableBoolean { private boolean bool; @@ -14,4 +16,17 @@ public class MutableBoolean { public void setBoolean(boolean bool) { this.bool = bool; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableBoolean that = (MutableBoolean) o; + return bool == that.bool; + } + + @Override + public int hashCode() { + return Objects.hashCode(bool); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableByte.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableByte.java index ea823957e..226750967 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableByte.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableByte.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableByte { private byte byteValue; @@ -16,4 +18,16 @@ public class MutableByte { this.byteValue = byteValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableByte that = (MutableByte) o; + return byteValue == that.byteValue; + } + + @Override + public int hashCode() { + return Objects.hashCode(byteValue); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableChar.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableChar.java index 83531fafe..9c8084342 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableChar.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableChar.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableChar { private char charValue; @@ -16,4 +18,16 @@ public class MutableChar { this.charValue = charValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableChar that = (MutableChar) o; + return charValue == that.charValue; + } + + @Override + public int hashCode() { + return Objects.hashCode(charValue); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableDouble.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableDouble.java index cb911869c..e00d24aa7 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableDouble.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableDouble.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableDouble { private double doubleValue; @@ -16,4 +18,16 @@ public class MutableDouble { this.doubleValue = doubleValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableDouble that = (MutableDouble) o; + return Double.compare(that.doubleValue, doubleValue) == 0; + } + + @Override + public int hashCode() { + return Objects.hashCode(doubleValue); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableFloat.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableFloat.java index 6d4e8a750..518f1bfb1 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableFloat.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableFloat.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableFloat { private float floatValue; @@ -16,4 +18,16 @@ public class MutableFloat { this.floatValue = floatValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableFloat that = (MutableFloat) o; + return Float.compare(that.floatValue, floatValue) == 0; + } + + @Override + public int hashCode() { + return Objects.hashCode(floatValue); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableInteger.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableInteger.java index baab364a4..be4814a0f 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableInteger.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableInteger.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableInteger { private int integer; @@ -14,4 +16,17 @@ public class MutableInteger { public void setInt(int integer) { this.integer = integer; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableInteger that = (MutableInteger) o; + return integer == that.integer; + } + + @Override + public int hashCode() { + return Objects.hashCode(integer); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableLong.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableLong.java index f02e0f682..c40fafaa9 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableLong.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableLong.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableLong { private long longValue; @@ -16,4 +18,16 @@ public class MutableLong { this.longValue = longValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableLong that = (MutableLong) o; + return longValue == that.longValue; + } + + @Override + public int hashCode() { + return Objects.hashCode(longValue); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableShort.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableShort.java index 0213956c8..3843ad835 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableShort.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableShort.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; + public class MutableShort { private short shortValue; @@ -16,4 +18,16 @@ public class MutableShort { this.shortValue = shortValue; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableShort that = (MutableShort) o; + return shortValue == that.shortValue; + } + + @Override + public int hashCode() { + return Objects.hashCode(shortValue); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableString.java b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableString.java index 9f8ca6b95..c7201aa61 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableString.java +++ b/src/main/java/com/gmail/nossr50/datatypes/mutableprimitives/MutableString.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.datatypes.mutableprimitives; +import com.google.common.base.Objects; import org.jetbrains.annotations.NotNull; public class MutableString { @@ -18,4 +19,16 @@ public class MutableString { this.string = string; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MutableString that = (MutableString) o; + return Objects.equal(string, that.string); + } + + @Override + public int hashCode() { + return Objects.hashCode(string); + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/Party.java b/src/main/java/com/gmail/nossr50/datatypes/party/Party.java index 980ac2019..572792da2 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/party/Party.java +++ b/src/main/java/com/gmail/nossr50/datatypes/party/Party.java @@ -3,65 +3,69 @@ package com.gmail.nossr50.datatypes.party; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.util.Misc; -import org.bukkit.ChatColor; +import com.google.common.base.Objects; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; public class Party { - private final String partyName; - private String partyPassword; - private boolean partyLock; + private final @NotNull PersistentPartyData persistentPartyData; + private final @NotNull PartyMemberManager partyMemberManager; + private final @NotNull PartyExperienceManager partyExperienceManager; - private final PartyMemberManager partyMemberManager; - private final PartyItemShareManager partyItemShareManager; - private final PartyExperienceManager partyExperienceManager; - private final PartyAllianceManager partyAllianceManager; + public Party(@NotNull PersistentPartyData persistentPartyData) { + this.persistentPartyData = persistentPartyData; - public Party(Persistent) + //Initialize Managers + partyMemberManager = new PartyMemberManager(); + partyExperienceManager = new PartyExperienceManager(); + } - public HashSet getPartyMembers() { + public @NotNull PartyMemberManager getPartyMemberManager() { + return partyMemberManager; + } + + public @NotNull PartyExperienceManager getPartyExperienceManager() { + return partyExperienceManager; + } + + public Set getPartyMembers() { return partyMemberManager.getPartyMembers(); } public String getPartyName() { - return partyName; - } - - public String getPartyPassword() { - return partyPassword; - } - - public boolean isLocked() { - return partyLock; - } - - public Party getAlly() { - return ally; - } - - public void setPartyName(String partyName) { - this.partyName = partyName; + return persistentPartyData.getPartyName(); } public void setLeader(UUID newPartyLeader) { this.partyMemberManager = ; } - public void setPartyPassword(String partyPassword) { - this.partyPassword = partyPassword; - } - - public void setPartyLock(boolean partyLock) { - this.partyLock = partyLock; - } - public boolean hasMember(Player player) { + return hasMember(player.getUniqueId()); + } + + public boolean hasMember(OfflinePlayer offlinePlayer) { + return hasMember(offlinePlayer.getUniqueId()); + } + + public boolean hasMember(UUID playerUUID) { for(PartyMember partyMember : getPartyMembers()) { - if(partyMember.getUniqueId().equals(player.getUniqueId())) + if(partyMember.getUniqueId().equals(playerUUID)) + return true; + } + + return false; + } + + public boolean hasMember(String playerName) { + for(PartyMember partyMember : getPartyMembers()) { + if(partyMember.getName().equalsIgnoreCase(playerName)) return true; } @@ -78,15 +82,7 @@ public class Party { public String createMembersList(Player player) { /* BUILD THE PARTY LIST WITH FORMATTING */ boolean useDisplayNames = Config.getInstance().getPartyDisplayNames(); - StringBuilder formattedPartyMemberList = new StringBuilder(); - - PartyMember partyLeader = getLeader(); - - //First add the party leader - memberList.append(PARTY_LEADER_PREFIX); - - return memberList.toString(); } /** @@ -118,10 +114,14 @@ public class Party { @Override public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Party party = (Party) o; + return Objects.equal(persistentPartyData, party.persistentPartyData); } @Override public int hashCode() { - return ; + return Objects.hashCode(persistentPartyData); } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/PartyAllianceManager.java b/src/main/java/com/gmail/nossr50/datatypes/party/PartyAllianceManager.java deleted file mode 100644 index ea2a50c16..000000000 --- a/src/main/java/com/gmail/nossr50/datatypes/party/PartyAllianceManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.gmail.nossr50.datatypes.party; - -public class PartyAllianceManager { - private Party ally; - private Party allianceInvite; - - public void setPartyAllianceInvite(Party allianceInvite) { - this.allianceInvite = allianceInvite; - } - - public Party getPartyAllianceInvite() { - return allianceInvite; - } - - public boolean hasPartyAllianceInvite() { - return (allianceInvite != null); - } - - public void removePartyAllianceInvite() { - allianceInvite = null; - } - - public void setAlly(Party ally) { - this.ally = ally; - } -} diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/PartyFeature.java b/src/main/java/com/gmail/nossr50/datatypes/party/PartyFeature.java index 55fa2688f..8daa43f21 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/party/PartyFeature.java +++ b/src/main/java/com/gmail/nossr50/datatypes/party/PartyFeature.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.datatypes.party; -import com.gmail.nossr50.commands.party.PartySubcommandType; +import com.gmail.nossr50.commands.party.PartySubCommandType; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Permissions; @@ -23,22 +23,22 @@ public enum PartyFeature { } public boolean hasPermission(Player player) { - PartySubcommandType partySubCommandType; + PartySubCommandType partySubCommandType; switch (this) { case CHAT: - partySubCommandType = PartySubcommandType.CHAT; + partySubCommandType = PartySubCommandType.CHAT; break; case TELEPORT: - partySubCommandType = PartySubcommandType.TELEPORT; + partySubCommandType = PartySubCommandType.TELEPORT; break; case ALLIANCE: - partySubCommandType = PartySubcommandType.ALLIANCE; + partySubCommandType = PartySubCommandType.ALLIANCE; break; case ITEM_SHARE: - partySubCommandType = PartySubcommandType.ITEMSHARE; + partySubCommandType = PartySubCommandType.ITEMSHARE; break; case XP_SHARE: - partySubCommandType = PartySubcommandType.XPSHARE; + partySubCommandType = PartySubCommandType.XPSHARE; break; default: return false; diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/PartyMember.java b/src/main/java/com/gmail/nossr50/datatypes/party/PartyMember.java index 6db58ab49..d5a5240f9 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/party/PartyMember.java +++ b/src/main/java/com/gmail/nossr50/datatypes/party/PartyMember.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.datatypes.party; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -7,37 +8,49 @@ import org.jetbrains.annotations.Nullable; import java.util.UUID; public class PartyMember { - private final OfflinePlayer offlinePlayer; - private PartyMemberRank partyMemberRank; - private final PartyTeleportRecord partyTeleportRecord; - + private String playerName; + private final @NotNull UUID playerUUID; + private @Nullable OfflinePlayer offlinePlayer; + private @NotNull PartyMemberRank partyMemberRank; + private @Nullable PartyTeleportRecord partyTeleportRecord; private int itemShareModifier; - public PartyMember(OfflinePlayer offlinePlayer, PartyMemberRank partyMemberRank) { - this.offlinePlayer = offlinePlayer; + public PartyMember(@NotNull UUID playerUUID, @NotNull PartyMemberRank partyMemberRank) { + this.playerUUID = playerUUID; this.partyMemberRank = partyMemberRank; - this.partyTeleportRecord = new PartyTeleportRecord(); } public OfflinePlayer getOfflinePlayer() { + if(offlinePlayer == null) + offlinePlayer = Bukkit.getOfflinePlayer(playerUUID); + + return offlinePlayer; } - public PartyMemberRank getPartyMemberRank() { + public @NotNull PartyMemberRank getPartyMemberRank() { return partyMemberRank; } - public void setPartyMemberRank(PartyMemberRank partyMemberRank) { + public void setPartyMemberRank(@NotNull PartyMemberRank partyMemberRank) { this.partyMemberRank = partyMemberRank; } public @NotNull UUID getUniqueId() { - return offlinePlayer.getUniqueId(); + return playerUUID; } - @Nullable + @NotNull public String getName() { - return offlinePlayer.getName(); + if(playerName == null) { + if(getOfflinePlayer().getName() != null) + playerName = getOfflinePlayer().getName(); + } + + if(playerName == null) + return playerUUID.toString(); + else + return playerName; } public int getItemShareModifier() { @@ -52,7 +65,7 @@ public class PartyMember { itemShareModifier = Math.max(10, modifier); } - public PartyTeleportRecord getPartyTeleportRecord() { + public @Nullable PartyTeleportRecord getPartyTeleportRecord() { return partyTeleportRecord; } diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/PartyMemberManager.java b/src/main/java/com/gmail/nossr50/datatypes/party/PartyMemberManager.java index ace917b3b..0132156e0 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/party/PartyMemberManager.java +++ b/src/main/java/com/gmail/nossr50/datatypes/party/PartyMemberManager.java @@ -4,47 +4,19 @@ import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import java.util.Collection; import java.util.HashSet; -import java.util.Map; +import java.util.Set; public class PartyMemberManager { - private final @NotNull Map partyMembers; - private @NotNull PartyMember partyLeaderRef; - private final @NotNull HashSet partyOfficers; - public PartyMemberManager(@NotNull HashSet partyMembers) { - this.partyMembers = partyMembers; + private final @NotNull PersistentPartyData persistentPartyData; + + public PartyMemberManager(@NotNull PersistentPartyData persistentPartyData, @NotNull HashSet partyMembers) { + this.persistentPartyData = persistentPartyData; } - public PartyMemberManager(@NotNull Player partyLeader) { - addPartyMember(partyLeader, PartyMemberRank.LEADER); - } - - public @NotNull Collection getPartyMembers() { - return partyMembers.values(); - } - - private void registerSpecialPartyMembers() { - clearOfficers(); - - for(PartyMember partyMember : partyMembers) { - switch (partyMember.getPartyMemberRank()) { - - case MEMBER: - break; - case OFFICER: - partyOfficers.add(partyMember); - break; - case LEADER: - partyLeaderRef = partyMember; - break; - } - } - } - - private void clearOfficers() { - partyOfficers.clear(); + public @NotNull Set getPartyMembers() { + return persistentPartyData.getPartyMembers(); } public void addPartyMember(OfflinePlayer player, PartyMemberRank partyMemberRank) { diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/PersistentPartyData.java b/src/main/java/com/gmail/nossr50/datatypes/party/PersistentPartyData.java new file mode 100644 index 000000000..113cdb4ec --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/party/PersistentPartyData.java @@ -0,0 +1,51 @@ +package com.gmail.nossr50.datatypes.party; + +import com.gmail.nossr50.datatypes.dirtydata.DirtyData; +import com.gmail.nossr50.datatypes.dirtydata.DirtyDataSet; +import com.gmail.nossr50.datatypes.mutableprimitives.MutableBoolean; +import com.gmail.nossr50.datatypes.mutableprimitives.MutableString; +import com.google.common.base.Objects; +import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.Set; + +public class PersistentPartyData { + + private final @NotNull MutableBoolean dirtyFlag; //Dirty values in this class will change this flag as needed + private final @NotNull DirtyData partyName; + private final @NotNull DirtyDataSet partyMembers; //TODO: Add cache for subsets + + public PersistentPartyData(@NotNull String partyName, + @NotNull Set partyMembers) { + dirtyFlag = new MutableBoolean(false); + this.partyName = new DirtyData<>(new MutableString(partyName), dirtyFlag); + this.partyMembers = new DirtyDataSet<>(new HashSet<>(partyMembers), dirtyFlag); + } + + public String getPartyName() { + return partyName.getData().getImmutableCopy(); + } + + public Set getPartyMembers() { + return partyMembers.getDataSet(); + } + + public boolean isDataDirty() { + return dirtyFlag.getImmutableCopy(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PersistentPartyData that = (PersistentPartyData) o; + return Objects.equal(getPartyName(), that.getPartyName()) && + Objects.equal(getPartyMembers(), that.getPartyMembers()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getPartyName(), getPartyMembers()); + } +} diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java b/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java index 8cf157545..2fdccdd54 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java @@ -25,6 +25,8 @@ import java.util.UUID; public class PersistentPlayerData { + private final @NotNull MutableBoolean dirtyFlag; //Dirty values in this class will change this flag as needed + /* Player Stuff */ private final @NotNull DirtyData playerName; private final @NotNull UUID playerUUID; @@ -34,7 +36,6 @@ public class PersistentPlayerData { /* HUDs */ private final @NotNull DirtyData mobHealthBarType; - private final @NotNull MutableBoolean dirtyFlag; //Dirty values in this class will change this flag as needed /* Skill Data */ private final @NotNull DirtyDataMap skillLevelValues; diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java b/src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java index 625a3f707..8040288fe 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java @@ -1,8 +1,11 @@ package com.gmail.nossr50.datatypes.player; import com.gmail.nossr50.datatypes.MobHealthBarType; +import com.gmail.nossr50.datatypes.party.Party; +import com.gmail.nossr50.mcMMO; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.UUID; @@ -134,6 +137,10 @@ public class PlayerProfile { return cooldownManager; } + public @Nullable Party getParty(){ + return mcMMO.getPartyManager().getParty(persistentPlayerData.getPlayerUUID()); + } + /** * Whether or not this player is excluded from leaderboards * @return true if the player is excluded from leaderboards diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java index f6eba059a..331c61e75 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java @@ -5,7 +5,6 @@ import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.player.McMMOPlayer; -import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; diff --git a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java index 8a7b166d2..3da0da262 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java @@ -12,7 +12,6 @@ import com.gmail.nossr50.skills.alchemy.Alchemy; import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer; import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.Permissions; -import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.skills.SkillUtils; import com.gmail.nossr50.worldguard.WorldGuardManager; import com.gmail.nossr50.worldguard.WorldGuardUtils; diff --git a/src/main/java/com/gmail/nossr50/party/PartyManager.java b/src/main/java/com/gmail/nossr50/party/PartyManager.java index 19a1eee6a..226fc1817 100644 --- a/src/main/java/com/gmail/nossr50/party/PartyManager.java +++ b/src/main/java/com/gmail/nossr50/party/PartyManager.java @@ -6,6 +6,7 @@ import com.gmail.nossr50.datatypes.database.UpgradeType; import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.party.ItemShareType; import com.gmail.nossr50.datatypes.party.Party; +import com.gmail.nossr50.datatypes.party.PartyMember; import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.PlayerProfile; @@ -120,29 +121,6 @@ public final class PartyManager { return firstParty.equals(secondParty); } - public boolean areAllies(Player firstPlayer, Player secondPlayer) { - //Profile not loaded - if(mcMMO.getUserManager().getPlayer(firstPlayer) == null) - { - return false; - } - - //Profile not loaded - if(mcMMO.getUserManager().getPlayer(secondPlayer) == null) - { - return false; - } - - Party firstParty = mcMMO.getUserManager().getPlayer(firstPlayer).getParty(); - Party secondParty = mcMMO.getUserManager().getPlayer(secondPlayer).getParty(); - - if (firstParty == null || secondParty == null || firstParty.getAlly() == null || secondParty.getAlly() == null) { - return false; - } - - return firstParty.equals(secondParty.getAlly()) && secondParty.equals(firstParty.getAlly()); - } - /** * Get the near party members. * @@ -157,7 +135,7 @@ public final class PartyManager { Player player = mmoPlayer.getPlayer(); double range = Config.getInstance().getPartyShareRange(); - for (Player member : party.getPartyMembers()) { + for (PartyMember member : party.getPartyMembers()) { if (!player.equals(member) && member.isValid() && Misc.isNear(player.getLocation(), member.getLocation(), range)) { nearMembers.add(member); } diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index b1acacdb1..b6b497039 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.util; -import com.gmail.nossr50.commands.party.PartySubcommandType; +import com.gmail.nossr50.commands.party.PartySubCommandType; import com.gmail.nossr50.datatypes.skills.ItemType; import com.gmail.nossr50.datatypes.skills.MaterialType; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; @@ -206,7 +206,7 @@ public final class Permissions { */ public static boolean partySizeBypass(Permissible permissible) { return permissible.hasPermission("mcmmo.bypass.partylimit" ); } public static boolean party(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.party"); } - public static boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) { return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean partySubcommand(Permissible permissible, PartySubCommandType subcommand) { return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase(Locale.ENGLISH)); } public static boolean friendlyFire(Permissible permissible) { return permissible.hasPermission("mcmmo.party.friendlyfire"); } /* TELEPORT */ diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8720c605f..006e40d91 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1081,15 +1081,9 @@ permissions: mcmmo.commands.party.invite: true mcmmo.commands.party.itemshare: true mcmmo.commands.party.join: true - mcmmo.commands.party.kick: true - mcmmo.commands.party.lock: true mcmmo.commands.party.owner: true - mcmmo.commands.party.password: true - mcmmo.commands.party.quit: true mcmmo.commands.party.rename: true mcmmo.commands.party.teleport: true - mcmmo.commands.party.unlock: true - mcmmo.commands.party.alliance: true mcmmo.commands.party: description: Allows access to the party command mcmmo.commands.party.accept: @@ -1098,6 +1092,7 @@ permissions: description: Dummy permission for mcmmo.chat.partychat children: mcmmo.chat.partychat: true + mcmmo.chat.officerpartychat: true mcmmo.commands.party.create: description: Allows access to the party create command mcmmo.commands.party.disband: @@ -1114,26 +1109,14 @@ permissions: description: Allows access to the party itemshare command mcmmo.commands.party.join: description: Allows access to the party join command - mcmmo.commands.party.kick: - description: Allows access to the party kick command - mcmmo.commands.party.lock: - description: Allows access to the party lock command mcmmo.commands.party.owner: description: Allows access to the party owner command - mcmmo.commands.party.password: - description: Allows access to the party password command - mcmmo.commands.party.quit: - description: Allows access to the party quit command mcmmo.commands.party.rename: description: Allows access to the party rename command mcmmo.commands.party.teleport: description: Dummy permission for mcmmo.commands.ptp children: mcmmo.commands.ptp: true - mcmmo.commands.party.unlock: - description: Allows access to the party unlock command - mcmmo.commands.party.alliance: - description: Allows access to the party alliance command mcmmo.commands.ptp.*: default: false description: Implies access to all mcmmo.commands.ptp permissions.