From 8cace99444b57e0b98b1245a24f4bdb4bcc2deec Mon Sep 17 00:00:00 2001 From: Driftay Date: Wed, 25 Mar 2020 00:56:39 -0400 Subject: [PATCH] Changelog will be posted, add alot --- .../java/com/massivecraft/factions/Conf.java | 13 +- .../com/massivecraft/factions/FLocation.java | 9 +- .../com/massivecraft/factions/FPlayer.java | 10 ++ .../com/massivecraft/factions/Faction.java | 2 + .../massivecraft/factions/FactionsPlugin.java | 4 +- .../massivecraft/factions/cmd/Aliases.java | 2 + .../massivecraft/factions/cmd/CmdDelHome.java | 51 +++++++ .../massivecraft/factions/cmd/CmdDisband.java | 3 +- .../massivecraft/factions/cmd/CmdInspect.java | 2 +- .../massivecraft/factions/cmd/CmdJoin.java | 2 +- .../massivecraft/factions/cmd/CmdLeave.java | 3 +- .../massivecraft/factions/cmd/CmdStealth.java | 1 - .../massivecraft/factions/cmd/CmdStuck.java | 2 - .../massivecraft/factions/cmd/FCmdRoot.java | 6 +- .../factions/cmd/claim/CmdClaimFill.java | 130 ++++++++++++++++ .../factions/cmd/tnt/CmdTntFill.java | 41 ++--- .../factions/discord/CmdInviteBot.java | 2 +- .../factions/discord/Discord.java | 81 +++++++--- .../factions/discord/DiscordListener.java | 11 +- .../factions/discord/DiscordSetupAttempt.java | 59 ++++++-- .../factions/discord/FactionChatHandler.java | 8 +- .../factions/event/PowerLossEvent.java | 22 ++- .../factions/event/PowerRegenEvent.java | 31 ++-- .../factions/integration/Worldguard.java | 41 +++-- .../listeners/FactionsEntityListener.java | 30 ++-- .../listeners/FactionsExploitListener.java | 1 - .../listeners/FactionsPlayerListener.java | 11 +- .../factions/missions/MissionGUI.java | 10 +- .../factions/struct/Permission.java | 1 + .../massivecraft/factions/tag/FactionTag.java | 6 +- .../massivecraft/factions/tag/GeneralTag.java | 1 - .../massivecraft/factions/tag/PlayerTag.java | 9 +- .../com/massivecraft/factions/util/CC.java | 3 +- .../util/ClipPlaceholderAPIManager.java | 39 ++++- .../factions/util/FactionWarpsFrame.java | 4 +- .../factions/util/InventoryTypeAdapter.java | 1 - .../factions/util/ItemBuilder.java | 1 + .../massivecraft/factions/util/ItemUtil.java | 6 +- .../massivecraft/factions/util/JSONUtils.java | 5 +- .../com/massivecraft/factions/util/Pair.java | 9 +- .../massivecraft/factions/util/Updater.java | 5 +- .../massivecraft/factions/util/UtilFly.java | 2 + .../massivecraft/factions/util/XMaterial.java | 3 +- .../util/serializable/ClickableItemStack.java | 1 + .../factions/util/serializable/GUIMenu.java | 37 +++-- .../util/serializable/InventoryItem.java | 4 +- .../massivecraft/factions/zcore/MPlugin.java | 2 +- .../zcore/fperms/DefaultPermissions.java | 2 - .../fperms/gui/PermissableActionFrame.java | 4 +- .../zcore/fupgrades/FUpgradeFrame.java | 10 +- .../zcore/fupgrades/UpgradesListener.java | 140 +++++++++--------- .../factions/zcore/persist/MemoryFPlayer.java | 83 ++++++++--- .../factions/zcore/persist/MemoryFaction.java | 57 ++++--- .../zcore/persist/MemoryFactions.java | 11 +- .../zcore/persist/json/JSONFactions.java | 1 - .../factions/zcore/util/PermUtil.java | 2 +- .../massivecraft/factions/zcore/util/TL.java | 16 +- src/main/resources/config.yml | 26 +++- 58 files changed, 750 insertions(+), 329 deletions(-) create mode 100644 src/main/java/com/massivecraft/factions/cmd/CmdDelHome.java create mode 100644 src/main/java/com/massivecraft/factions/cmd/claim/CmdClaimFill.java diff --git a/src/main/java/com/massivecraft/factions/Conf.java b/src/main/java/com/massivecraft/factions/Conf.java index 158eb3a3..7b1a9529 100644 --- a/src/main/java/com/massivecraft/factions/Conf.java +++ b/src/main/java/com/massivecraft/factions/Conf.java @@ -1,7 +1,6 @@ package com.massivecraft.factions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.massivecraft.factions.integration.dynmap.DynmapStyle; import com.massivecraft.factions.util.XMaterial; import com.massivecraft.factions.zcore.fperms.DefaultPermissions; @@ -99,6 +98,12 @@ public class Conf { public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction. public static boolean worldGuardChecking = false; public static boolean worldGuardBuildPriority = false; + + + //Claim Fill + public static int maxFillClaimCount = 25; + public static int maxFillClaimDistance = 5; + public static boolean factionsDrainEnabled = false; //RESERVE public static boolean useReserveSystem = true; @@ -132,7 +137,7 @@ public class Conf { public static Boolean factionDiscordTags = false; public static String factionTag = "(NAME) [FACTION]"; public static Boolean factionRoles = false; - public static List factionRoleColor = new ArrayList(){{ + public static List factionRoleColor = new ArrayList() {{ add(25); add(162); add(203); @@ -590,7 +595,9 @@ public class Conf { FactionsPlugin.getInstance().persist.save(i); } - public static void saveSync() { FactionsPlugin.instance.persist.saveSync(i); } + public static void saveSync() { + FactionsPlugin.instance.persist.saveSync(i); + } public enum Backend { JSON, diff --git a/src/main/java/com/massivecraft/factions/FLocation.java b/src/main/java/com/massivecraft/factions/FLocation.java index be7508a6..65584214 100644 --- a/src/main/java/com/massivecraft/factions/FLocation.java +++ b/src/main/java/com/massivecraft/factions/FLocation.java @@ -14,6 +14,7 @@ import java.util.Set; public class FLocation implements Serializable { private static final long serialVersionUID = -8292915234027387983L; private static final boolean worldBorderSupport; + static { boolean worldBorderClassPresent = false; try { @@ -150,7 +151,9 @@ public class FLocation implements Serializable { return "" + x + "," + z; } - public String formatXAndZ(String splitter) { return chunkToBlock(this.x) + "x" + splitter + " " + chunkToBlock(this.z) + "z"; } + public String formatXAndZ(String splitter) { + return chunkToBlock(this.x) + "x" + splitter + " " + chunkToBlock(this.z) + "z"; + } //----------------------------------------------// // Misc Geometry @@ -178,8 +181,8 @@ public class FLocation implements Serializable { } public boolean isInChunk(Location loc) { - if(loc == null) return false; - if(loc.getWorld() == null) return false; + if (loc == null) return false; + if (loc.getWorld() == null) return false; Chunk chunk = loc.getChunk(); return loc.getWorld().getName().equalsIgnoreCase(getWorldName()) && chunk.getX() == x && chunk.getZ() == z; diff --git a/src/main/java/com/massivecraft/factions/FPlayer.java b/src/main/java/com/massivecraft/factions/FPlayer.java index 75c32f49..e20a7b55 100644 --- a/src/main/java/com/massivecraft/factions/FPlayer.java +++ b/src/main/java/com/massivecraft/factions/FPlayer.java @@ -34,60 +34,70 @@ public interface FPlayer extends EconomyParticipator { /** * Determine if a player has enemies nearby based on the enemy check task in CmdFly * NOTE: THIS VALUE IS ONLY UPDATED WHEN A USER IS USING FLY + * * @return enemiesNearby as a boolean */ boolean hasEnemiesNearby(); /** * Set if this FPlayer has an enemy nearby + * * @param b enemiesNearby */ void setEnemiesNearby(Boolean b); /** * Get if a player has setup their Discord before + * * @return if the player setup Discord as a boolean */ boolean discordSetup(); /** * Get the players Discord user ID + * * @return players Discord user ID as a String */ String discordUserID(); /** * Set the players Boolean defining if the player has setup their Discord + * * @param b Boolean for discordSetup to be defined to */ void setDiscordSetup(Boolean b); /** * Set the players Discord user ID + * * @param s String for their user ID to be set to */ void setDiscordUserID(String s); /** * Get the players Discord user (If the player has not setup Discord it will return null!) + * * @return User from players set Discord User ID */ User discordUser(); /** * Used to check if this player should be served titles + * * @return if this FPlayer has titles enabled as a boolean */ boolean hasTitlesEnabled(); /** * Used to set if player should be served titles + * * @param b Boolean to titlesEnabled to */ void setTitlesEnabled(Boolean b); /** * Used to determine if a player is in their faction's chest + * * @return if player is in their faction's as a boolean */ boolean isInFactionsChest(); diff --git a/src/main/java/com/massivecraft/factions/Faction.java b/src/main/java/com/massivecraft/factions/Faction.java index d9f7cb08..d2b8e509 100644 --- a/src/main/java/com/massivecraft/factions/Faction.java +++ b/src/main/java/com/massivecraft/factions/Faction.java @@ -247,6 +247,8 @@ public interface Faction extends EconomyParticipator { void setHome(Location home); + void deleteHome(); + long getFoundedDate(); void setFoundedDate(long newDate); diff --git a/src/main/java/com/massivecraft/factions/FactionsPlugin.java b/src/main/java/com/massivecraft/factions/FactionsPlugin.java index de1a60f0..459ada70 100755 --- a/src/main/java/com/massivecraft/factions/FactionsPlugin.java +++ b/src/main/java/com/massivecraft/factions/FactionsPlugin.java @@ -81,6 +81,7 @@ public class FactionsPlugin extends MPlugin { public boolean mc115 = false; public boolean useNonPacketParticles = false; public boolean factionsFlight = false; + public List itemList = getConfig().getStringList("fchest.Items-Not-Allowed"); SkriptAddon skriptAddon; private FactionsPlayerListener factionsPlayerListener; private boolean locked = false; @@ -90,7 +91,6 @@ public class FactionsPlugin extends MPlugin { private ClipPlaceholderAPIManager clipPlaceholderAPIManager; private boolean mvdwPlaceholderAPIManager = false; private Listener[] eventsListener; - public List itemList = getConfig().getStringList("fchest.Items-Not-Allowed"); private Worldguard wg; private FLogManager fLogManager; private List reserveObjects; @@ -437,7 +437,7 @@ public class FactionsPlugin extends MPlugin { file.getParentFile().mkdirs(); file.createNewFile(); } - Files.write(Paths.get(file.getPath()),getGsonBuilder().create().toJson(reserveObjects).getBytes()); + Files.write(Paths.get(file.getPath()), getGsonBuilder().create().toJson(reserveObjects).getBytes()); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/massivecraft/factions/cmd/Aliases.java b/src/main/java/com/massivecraft/factions/cmd/Aliases.java index 35e351ac..806bd1ef 100644 --- a/src/main/java/com/massivecraft/factions/cmd/Aliases.java +++ b/src/main/java/com/massivecraft/factions/cmd/Aliases.java @@ -21,8 +21,10 @@ public class Aliases { public static ArrayList claim_auto = new ArrayList<>(Collections.singletonList("autoclaim")); public static ArrayList claim_claim = new ArrayList<>(Collections.singletonList("claim")); public static ArrayList claim_at = new ArrayList<>(Collections.singletonList("claimat")); + public static ArrayList claim_claimFill = new ArrayList<>(Arrays.asList("claimfill", "cf")); public static ArrayList claim_line = new ArrayList<>(Arrays.asList("claimline", "cl")); public static ArrayList claim_corner = new ArrayList<>(Arrays.asList("corner")); + public static ArrayList delfHome = new ArrayList<>(Arrays.asList("delhome", "deletehome")); public static ArrayList unclaim_all_safe = new ArrayList<>(Arrays.asList("safeunclaimall", "safedeclaimall")); public static ArrayList unclaim_unclaim = new ArrayList<>(Arrays.asList("unclaim", "declaim")); public static ArrayList unclaim_all_unsafe = new ArrayList<>(Arrays.asList("unclaimall", "declaimall")); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdDelHome.java b/src/main/java/com/massivecraft/factions/cmd/CmdDelHome.java new file mode 100644 index 00000000..dbc71e28 --- /dev/null +++ b/src/main/java/com/massivecraft/factions/cmd/CmdDelHome.java @@ -0,0 +1,51 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FactionsPlugin; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; +import com.massivecraft.factions.zcore.util.TL; + +/** + * Factions - Developed by Driftay. + * All rights reserved 2020. + * Creation Date: 3/24/2020 + */ +public class CmdDelHome extends FCommand { + + public CmdDelHome() { + this.aliases.addAll(Aliases.delfHome); + + this.requirements = new CommandRequirements.Builder(Permission.DELHOME) + .memberOnly() + .withAction(PermissableAction.SETHOME) + .build(); + } + + + @Override + public void perform(CommandContext context) { + FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> { + //Check if homes are enabled + if (!Conf.homesEnabled) { + context.msg(TL.COMMAND_SETHOME_DISABLED); + return; + } + //If They Don't Have Home + if (!context.faction.hasHome()) { + context.msg(TL.COMMAND_HOME_NOHOME.toString()); + context.msg(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUsageTemplate(context)); + return; + } + + context.faction.deleteHome(); + context.faction.msg(TL.COMMAND_DELHOME_SUCCESS, context.fPlayer.describeTo(context.faction, true)); + + }); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_DELHOME_DESCRIPTION; + } +} diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java b/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java index 822e97b1..b9ed8f59 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java @@ -9,7 +9,6 @@ import com.massivecraft.factions.zcore.fperms.Access; import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.Bukkit; -import org.bukkit.Sound; import org.bukkit.command.ConsoleCommandSender; import java.util.HashMap; @@ -79,7 +78,7 @@ public class CmdDisband extends FCommand { } if (!access) { - if(Conf.useDisbandGUI && !context.fPlayer.isAdminBypassing() || !context.player.isOp()) { + if (Conf.useDisbandGUI && !context.fPlayer.isAdminBypassing() || !context.player.isOp()) { if (!disbandMap.containsKey(context.player.getUniqueId().toString())) { new FDisbandFrame(context.faction).buildGUI(context.fPlayer); return; diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java b/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java index 6458ac67..1d2e396a 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java @@ -22,7 +22,7 @@ public class CmdInspect extends FCommand { @Override public void perform(CommandContext context) { - if(!Conf.useInspectSystem){ + if (!Conf.useInspectSystem) { context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Inspection"); return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java b/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java index 9a2d38c5..1a2380d0 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java @@ -127,7 +127,7 @@ public class CmdJoin extends FCommand { } faction.deinvite(fplayer); - + try { context.fPlayer.setRole(faction.getDefaultRole()); FactionsPlugin.instance.logFactionEvent(faction, FLogType.INVITES, context.fPlayer.getName(), CC.Green + "joined", "the faction"); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java b/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java index c4745bcc..68f9d820 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java @@ -21,8 +21,7 @@ public class CmdLeave extends FCommand { @Override public void perform(CommandContext context) { - - context.fPlayer.leave(true); + context.fPlayer.leave(true); } @Override diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdStealth.java b/src/main/java/com/massivecraft/factions/cmd/CmdStealth.java index a127e971..deb7428e 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdStealth.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdStealth.java @@ -1,7 +1,6 @@ package com.massivecraft.factions.cmd; import com.massivecraft.factions.Conf; -import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.zcore.util.TL; diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java b/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java index 3da47187..a12b6649 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java @@ -41,8 +41,6 @@ public class CmdStuck extends FCommand { } - - if (FactionsPlugin.getInstance().getStuckMap().containsKey(player.getUniqueId())) { long wait = FactionsPlugin.getInstance().getTimers().get(player.getUniqueId()) - System.currentTimeMillis(); String time = DurationFormatUtils.formatDuration(wait, TL.COMMAND_STUCK_TIMEFORMAT.toString(), true); diff --git a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java index 53c5e320..53117f57 100644 --- a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java +++ b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java @@ -168,6 +168,8 @@ public class FCmdRoot extends FCommand implements CommandExecutor { public CmdLookup cmdLookup = new CmdLookup(); public CmdAudit cmdAudit = new CmdAudit(); public CmdReserve cmdReserve = new CmdReserve(); + public CmdDelHome cmdDelHome = new CmdDelHome(); + public CmdClaimFill cmdClaimFill = new CmdClaimFill(); //Variables to know if we already setup certain sub commands public Boolean discordEnabled = false; public Boolean checkEnabled = false; @@ -213,6 +215,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor { this.addSubCommand(this.cmdCreate); this.addSubCommand(this.cmdDeinvite); this.addSubCommand(this.cmdDescription); + this.addSubCommand(this.cmdDelHome); this.addSubCommand(this.cmdDisband); this.addSubCommand(this.cmdHelp); this.addSubCommand(this.cmdHome); @@ -263,6 +266,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor { this.addSubCommand(this.cmdDelFWarp); this.addSubCommand(this.cmdModifyPower); this.addSubCommand(this.cmdLogins); + this.addSubCommand(this.cmdClaimFill); this.addSubCommand(this.cmdClaimLine); this.addSubCommand(this.cmdAHome); this.addSubCommand(this.cmdPerm); @@ -355,7 +359,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor { fAuditEnabled = true; } - if(Conf.useStrikeSystem){ + if (Conf.useStrikeSystem) { this.addSubCommand(this.cmdStrikes); fStrikes = true; } diff --git a/src/main/java/com/massivecraft/factions/cmd/claim/CmdClaimFill.java b/src/main/java/com/massivecraft/factions/cmd/claim/CmdClaimFill.java new file mode 100644 index 00000000..d63bf26d --- /dev/null +++ b/src/main/java/com/massivecraft/factions/cmd/claim/CmdClaimFill.java @@ -0,0 +1,130 @@ +package com.massivecraft.factions.cmd.claim; + +/** + * Created by FactionsUUID Team + */ + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.cmd.Aliases; +import com.massivecraft.factions.cmd.CommandContext; +import com.massivecraft.factions.cmd.CommandRequirements; +import com.massivecraft.factions.cmd.FCommand; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.Access; +import com.massivecraft.factions.zcore.fperms.PermissableAction; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Location; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; +import java.util.Set; + +public class CmdClaimFill extends FCommand { + + public CmdClaimFill() { + + // Aliases + this.aliases.addAll(Aliases.claim_claimFill); + + // Args + this.optionalArgs.put("limit", String.valueOf(Conf.maxFillClaimCount)); + this.optionalArgs.put("faction", "you"); + + this.requirements = new CommandRequirements.Builder(Permission.CLAIM_FILL) + .playerOnly() + .build(); + } + + @Override + public void perform(CommandContext context) { + // Args + final int limit = context.argAsInt(0, Conf.maxFillClaimCount); + + if (limit > Conf.maxFillClaimCount) { + context.msg(TL.COMMAND_CLAIMFILL_ABOVEMAX, Conf.maxFillClaimCount); + return; + } + + final Faction forFaction = context.argAsFaction(2, context.faction); + Location location = context.player.getLocation(); + FLocation loc = new FLocation(location); + + Faction currentFaction = Board.getInstance().getFactionAt(loc); + + if (currentFaction.equals(forFaction)) { + context.msg(TL.CLAIM_ALREADYOWN, forFaction.describeTo(context.fPlayer, true)); + return; + } + + if (!currentFaction.isWilderness()) { + context.msg(TL.COMMAND_CLAIMFILL_ALREADYCLAIMED); + return; + } + + if (!context.fPlayer.isAdminBypassing() && forFaction.getAccess(context.fPlayer, PermissableAction.TERRITORY) != Access.ALLOW) { + context.msg(TL.CLAIM_CANTCLAIM, forFaction.describeTo(context.fPlayer)); + return; + } + + final double distance = Conf.maxFillClaimDistance; + long startX = loc.getX(); + long startZ = loc.getZ(); + + Set toClaim = new HashSet<>(); + Queue queue = new LinkedList<>(); + FLocation currentHead; + queue.add(loc); + toClaim.add(loc); + while (!queue.isEmpty() && toClaim.size() <= limit) { + currentHead = queue.poll(); + + if (Math.abs(currentHead.getX() - startX) > distance || Math.abs(currentHead.getZ() - startZ) > distance) { + context.msg(TL.COMMAND_CLAIMFILL_TOOFAR, distance); + return; + } + + addIf(toClaim, queue, currentHead.getRelative(0, 1)); + addIf(toClaim, queue, currentHead.getRelative(0, -1)); + addIf(toClaim, queue, currentHead.getRelative(1, 0)); + addIf(toClaim, queue, currentHead.getRelative(-1, 0)); + } + + if (toClaim.size() > limit) { + context.msg(TL.COMMAND_CLAIMFILL_PASTLIMIT); + return; + } + + if (toClaim.size() > context.faction.getPowerRounded() - context.faction.getLandRounded()) { + context.msg(TL.COMMAND_CLAIMFILL_NOTENOUGHLANDLEFT, forFaction.describeTo(context.fPlayer), toClaim.size()); + return; + } + + final int limFail = Conf.radiusClaimFailureLimit; + int fails = 0; + for (FLocation currentLocation : toClaim) { + if (!context.fPlayer.attemptClaim(forFaction, currentLocation, true)) { + fails++; + } + if (fails >= limFail) { + context.msg(TL.COMMAND_CLAIMFILL_TOOMUCHFAIL, fails); + return; + } + } + } + + private void addIf(Set toClaim, Queue queue, FLocation examine) { + if (Board.getInstance().getFactionAt(examine).isWilderness() && !toClaim.contains(examine)) { + toClaim.add(examine); + queue.add(examine); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CLAIMFILL_DESCRIPTION; + } +} diff --git a/src/main/java/com/massivecraft/factions/cmd/tnt/CmdTntFill.java b/src/main/java/com/massivecraft/factions/cmd/tnt/CmdTntFill.java index de3bb5f3..1a9c3194 100644 --- a/src/main/java/com/massivecraft/factions/cmd/tnt/CmdTntFill.java +++ b/src/main/java/com/massivecraft/factions/cmd/tnt/CmdTntFill.java @@ -1,7 +1,6 @@ package com.massivecraft.factions.cmd.tnt; import com.massivecraft.factions.FPlayer; -import com.massivecraft.factions.Factions; import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.cmd.Aliases; import com.massivecraft.factions.cmd.CommandContext; @@ -20,7 +19,9 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; public class CmdTntFill extends FCommand { @@ -38,6 +39,24 @@ public class CmdTntFill extends FCommand { .build(); } + public static void removeItems(Inventory inventory, ItemStack item, int toRemove) { + if (toRemove <= 0 || inventory == null || item == null) + return; + for (int i = 0; i < inventory.getSize(); i++) { + ItemStack loopItem = inventory.getItem(i); + if (loopItem == null || !item.isSimilar(loopItem)) + continue; + if (toRemove <= 0) + return; + if (toRemove < loopItem.getAmount()) { + loopItem.setAmount(loopItem.getAmount() - toRemove); + return; + } + inventory.clear(i); + toRemove -= loopItem.getAmount(); + } + } + @Override public void perform(CommandContext context) { if (!FactionsPlugin.instance.getConfig().getBoolean("Tntfill.enabled")) { @@ -146,24 +165,6 @@ public class CmdTntFill extends FCommand { } } - public static void removeItems(Inventory inventory, ItemStack item, int toRemove) { - if (toRemove <= 0 || inventory == null || item == null) - return; - for (int i = 0; i < inventory.getSize(); i++) { - ItemStack loopItem = inventory.getItem(i); - if (loopItem == null || !item.isSimilar(loopItem)) - continue; - if (toRemove <= 0) - return; - if (toRemove < loopItem.getAmount()) { - loopItem.setAmount(loopItem.getAmount() - toRemove); - return; - } - inventory.clear(i); - toRemove -= loopItem.getAmount(); - } - } - // Counts the item type available in the inventory. private int inventoryItemCount(Inventory inventory, Material mat) { int count = 0; diff --git a/src/main/java/com/massivecraft/factions/discord/CmdInviteBot.java b/src/main/java/com/massivecraft/factions/discord/CmdInviteBot.java index c8fcb640..d89fb2f3 100644 --- a/src/main/java/com/massivecraft/factions/discord/CmdInviteBot.java +++ b/src/main/java/com/massivecraft/factions/discord/CmdInviteBot.java @@ -14,7 +14,7 @@ public class CmdInviteBot extends FCommand { * @author Driftay */ - public CmdInviteBot(){ + public CmdInviteBot() { super(); this.aliases.add("invitebot"); } diff --git a/src/main/java/com/massivecraft/factions/discord/Discord.java b/src/main/java/com/massivecraft/factions/discord/Discord.java index 38cc0f5e..b0d83e82 100644 --- a/src/main/java/com/massivecraft/factions/discord/Discord.java +++ b/src/main/java/com/massivecraft/factions/discord/Discord.java @@ -4,7 +4,6 @@ import com.massivecraft.factions.Conf; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.Faction; import com.massivecraft.factions.FactionsPlugin; -import com.massivecraft.factions.util.exceptions.SaberException; import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDABuilder; @@ -25,7 +24,6 @@ public class Discord { public static HashMap waitingLinkk; //We want to track the amount of times setup has been tried and the result may be useful for determining issues public static HashSet setupLog; - private static FactionsPlugin plugin; public static Boolean confUseDiscord; public static String botToken; public static String mainGuildID; @@ -37,6 +35,7 @@ public class Discord { public static Boolean useEmotes; public static Emote positive; public static Emote negative; + private static FactionsPlugin plugin; public Discord(FactionsPlugin plugin) { Discord.plugin = plugin; @@ -62,7 +61,9 @@ public class Discord { } private static Boolean startBot() { - if (!Conf.useDiscordSystem) {return false;} + if (!Conf.useDiscordSystem) { + return false; + } try { jda = new JDABuilder(AccountType.BOT).setToken(Conf.discordBotToken).buildBlocking(); } catch (LoginException | InterruptedException e) { @@ -78,11 +79,11 @@ public class Discord { try { confUseDiscord = Conf.useDiscordSystem; botToken = Conf.discordBotToken; - if (jda != null && Conf.leaderRoles || Conf.factionDiscordTags) { - mainGuild = jda.getGuildById(Conf.mainGuildID); - } else { - mainGuild = null; - } + if (jda != null && Conf.leaderRoles || Conf.factionDiscordTags) { + mainGuild = jda.getGuildById(Conf.mainGuildID); + } else { + mainGuild = null; + } mainGuildID = Conf.mainGuildID; useDiscord = !botToken.equals("") && !mainGuildID.equals("") && confUseDiscord; roleColor = new java.awt.Color(Conf.factionRoleColor.get(0), Conf.factionRoleColor.get(1), Conf.factionRoleColor.get(2)); @@ -90,13 +91,22 @@ public class Discord { try { positive = jda.getEmoteById(Conf.positiveReaction); negative = jda.getEmoteById(Conf.negativeReaction); - if (positive == null | negative == null) {useEmotes = false;} + if (positive == null | negative == null) { + useEmotes = false; + } } catch (NumberFormatException e) { FactionsPlugin.getInstance().getLogger().log(Level.WARNING, "Invalid Emote(s) disabling them."); useEmotes = false; } - if (mainGuild != null) {leader = mainGuild.getRoleById(Conf.leaderRole);} else {leader = null;} - } else {useEmotes = false; leader = null;} + if (mainGuild != null) { + leader = mainGuild.getRoleById(Conf.leaderRole); + } else { + leader = null; + } + } else { + useEmotes = false; + leader = null; + } } catch (NullPointerException e) { setupLog.add(new DiscordSetupAttempt("Threw an NPE while setting up variables", System.currentTimeMillis())); } @@ -111,11 +121,21 @@ public class Discord { public static String getNicknameString(FPlayer f) { if (useDiscord) { String temp = Conf.factionTag; - if (temp.contains("NAME")) { temp = temp.replace("NAME", f.getName()); } - if (temp.contains("DiscordName")) { temp = temp.replace("DiscordName", (f.discordUser() == null) ? (f.getName()) : (f.discordUser().getName())); } - if (temp.contains("FACTION")) { temp = temp.replace("FACTION", f.getFaction().getTag()); } - if (temp.contains("FactionRole")) { temp = temp.replace("FactionRole", f.getRole().getRoleCapitalized()); } - if (temp.contains("FactionRolePrefix")) { temp = temp.replace("FactionRolePrefix", f.getRole().getPrefix()); } + if (temp.contains("NAME")) { + temp = temp.replace("NAME", f.getName()); + } + if (temp.contains("DiscordName")) { + temp = temp.replace("DiscordName", (f.discordUser() == null) ? (f.getName()) : (f.discordUser().getName())); + } + if (temp.contains("FACTION")) { + temp = temp.replace("FACTION", f.getFaction().getTag()); + } + if (temp.contains("FactionRole")) { + temp = temp.replace("FactionRole", f.getRole().getRoleCapitalized()); + } + if (temp.contains("FactionRolePrefix")) { + temp = temp.replace("FactionRolePrefix", f.getRole().getPrefix()); + } return temp; } return null; @@ -138,7 +158,9 @@ public class Discord { public static Role getRoleFromName(String s) { if (useDiscord && mainGuild != null) { for (Role r : mainGuild.getRoles()) { - if (r.getName().equals(s)) {return r;} + if (r.getName().equals(s)) { + return r; + } } } return null; @@ -151,8 +173,12 @@ public class Discord { * @return Role generated faction role */ public static Role createFactionRole(String s) { - if (!useDiscord) { return null; } - if (mainGuild == null) { return null; } + if (!useDiscord) { + return null; + } + if (mainGuild == null) { + return null; + } StringBuilder sb = new StringBuilder(); sb.append(Conf.factionRolePrefix); sb.append(s); @@ -176,6 +202,7 @@ public class Discord { /** * Get the name of the Faction Role that would be generated with the tag + * * @param tag Faction Name/Tag * @return Name of would be Role */ @@ -204,13 +231,19 @@ public class Discord { * @param f FPlayer target */ public static void resetNick(FPlayer f) { - if (mainGuild == null) { return; } - if (mainGuild.getMember(f.discordUser()) == null) { return; } + if (mainGuild == null) { + return; + } + if (mainGuild.getMember(f.discordUser()) == null) { + return; + } mainGuild.getController().setNickname(mainGuild.getMember(f.discordUser()), f.discordUser().getName()).queue(); } public static void changeFactionTag(Faction f, String oldTag) { - if (!useDiscord | mainGuild == null) { return; } + if (!useDiscord | mainGuild == null) { + return; + } for (FPlayer fp : f.getFPlayers()) { if (fp.discordSetup() && isInMainGuild(fp.discordUser())) { try { @@ -222,7 +255,9 @@ public class Discord { mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(getRoleFromName(oldTag))).queue(); mainGuild.getController().addSingleRoleToMember(m, Objects.requireNonNull(createFactionRole(f.getTag()))).queue(); } - } catch (HierarchyException e) {System.out.print(e.getMessage());} + } catch (HierarchyException e) { + System.out.print(e.getMessage()); + } } } diff --git a/src/main/java/com/massivecraft/factions/discord/DiscordListener.java b/src/main/java/com/massivecraft/factions/discord/DiscordListener.java index d4e9e52a..40592a8b 100644 --- a/src/main/java/com/massivecraft/factions/discord/DiscordListener.java +++ b/src/main/java/com/massivecraft/factions/discord/DiscordListener.java @@ -93,7 +93,8 @@ public class DiscordListener extends ListenerAdapter { prefix = "."; } String content = event.getMessage().getContentRaw(); - if (!content.startsWith(prefix) && !content.startsWith(event.getGuild().getSelfMember().getAsMention())) return; + if (!content.startsWith(prefix) && !content.startsWith(event.getGuild().getSelfMember().getAsMention())) + return; if (content.startsWith(prefix + "help") || content.startsWith(event.getGuild().getSelfMember().getAsMention() + " help")) { this.help(event, content, prefix); } else if (content.startsWith(prefix + "stats")) { @@ -124,7 +125,8 @@ public class DiscordListener extends ListenerAdapter { this.settings(event); } } catch (PermissionException exception) { - if (!event.getGuild().getSelfMember().hasPermission(event.getChannel(), Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) return; + if (!event.getGuild().getSelfMember().hasPermission(event.getChannel(), Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) + return; event.getChannel().sendMessage((":x: Missing permission, `" + exception.getPermission().toString() + "`")).queue(); } } @@ -135,7 +137,8 @@ public class DiscordListener extends ListenerAdapter { private Faction getFactionWithWarning(TextChannel textChannel) { Faction faction = this.getFaction(textChannel.getGuild()); - if (faction == null) textChannel.sendMessage((":x: This guild isn't linked to a faction, use `/f setguild " + textChannel.getGuild().getId() + "` in game")).queue(); + if (faction == null) + textChannel.sendMessage((":x: This guild isn't linked to a faction, use `/f setguild " + textChannel.getGuild().getId() + "` in game")).queue(); return faction; } @@ -342,7 +345,7 @@ public class DiscordListener extends ListenerAdapter { private void setNotifyFormat(GuildMessageReceivedEvent event, String content, String prefix) { Faction faction = this.getFactionWithWarning(event.getChannel()); - if (faction == null)return; + if (faction == null) return; if (cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) return; if (!content.contains(" ")) { event.getChannel().sendMessage((":x: Usage, `" + prefix + "setnotifyformat ` (%type%)")).queue(); diff --git a/src/main/java/com/massivecraft/factions/discord/DiscordSetupAttempt.java b/src/main/java/com/massivecraft/factions/discord/DiscordSetupAttempt.java index 9426f6e5..7e990fde 100644 --- a/src/main/java/com/massivecraft/factions/discord/DiscordSetupAttempt.java +++ b/src/main/java/com/massivecraft/factions/discord/DiscordSetupAttempt.java @@ -7,8 +7,9 @@ public class DiscordSetupAttempt { /** * Constructor used when an attempt fails + * * @param reason String reason for the attempt failing - * @param time Long current system time in millis + * @param time Long current system time in millis */ public DiscordSetupAttempt(String reason, Long time) { this.success = false; @@ -18,6 +19,7 @@ public class DiscordSetupAttempt { /** * Constructor used for successful attempts + * * @param time Long Current system time in millis */ public DiscordSetupAttempt(Long time) { @@ -28,30 +30,43 @@ public class DiscordSetupAttempt { /** * Get if this attempt to setup the Discord bot was successful + * * @return Boolean success */ - public Boolean getSuccess() {return this.success;} + public Boolean getSuccess() { + return this.success; + } /** * Get the reason for the setup failing (If it was successful it will return null) + * * @return String reason */ - public String getReason() {return this.reason;} + public String getReason() { + return this.reason; + } /** * Get the time this setup was attempted + * * @return Long initialTime */ - public Long getInitialTime() {return this.initialTime;} + public Long getInitialTime() { + return this.initialTime; + } /** * Get the difference of time between when attempted and present time + * * @return Long time difference in milliseconds */ - public Long getDifferentialTime() {return System.currentTimeMillis()-initialTime;} + public Long getDifferentialTime() { + return System.currentTimeMillis() - initialTime; + } /** * Get the difference in time between when attempted and present time formatted MS,Seconds,Minutes,Hours,Years + * * @return String with formatted time difference */ public String getDifferentialFormatted() { @@ -61,25 +76,25 @@ public class DiscordSetupAttempt { if (inProcessTime >= 1000) { timeIndex++; //Seconds - inProcessTime = inProcessTime/Integer.toUnsignedLong(1000); + inProcessTime = inProcessTime / Integer.toUnsignedLong(1000); if (inProcessTime >= 60) { timeIndex++; //Minutes - inProcessTime = inProcessTime/Integer.toUnsignedLong(60); + inProcessTime = inProcessTime / Integer.toUnsignedLong(60); if (inProcessTime >= 60) { timeIndex++; //Hours - inProcessTime = inProcessTime/Integer.toUnsignedLong(60); + inProcessTime = inProcessTime / Integer.toUnsignedLong(60); if (inProcessTime >= 24) { timeIndex++; //Days - inProcessTime = inProcessTime/Integer.toUnsignedLong(24); + inProcessTime = inProcessTime / Integer.toUnsignedLong(24); //Skipping months if (inProcessTime >= 365) { timeIndex++; //Years //If someone really has 100% uptime in a year idek - inProcessTime = inProcessTime/Integer.toUnsignedLong(365); + inProcessTime = inProcessTime / Integer.toUnsignedLong(365); } } } @@ -91,12 +106,24 @@ public class DiscordSetupAttempt { sb.append(" "); String s = ""; switch (timeIndex) { - case 0: s = "MS"; break; - case 1: s = "Seconds"; break; - case 2: s = "Minutes"; break; - case 3: s = "Hours"; break; - case 4: s = "Days"; break; - case 5: s = "Years"; break; + case 0: + s = "MS"; + break; + case 1: + s = "Seconds"; + break; + case 2: + s = "Minutes"; + break; + case 3: + s = "Hours"; + break; + case 4: + s = "Days"; + break; + case 5: + s = "Years"; + break; } sb.append(s); sb.append(" ago"); diff --git a/src/main/java/com/massivecraft/factions/discord/FactionChatHandler.java b/src/main/java/com/massivecraft/factions/discord/FactionChatHandler.java index 2dca8849..7dd0adeb 100644 --- a/src/main/java/com/massivecraft/factions/discord/FactionChatHandler.java +++ b/src/main/java/com/massivecraft/factions/discord/FactionChatHandler.java @@ -5,8 +5,6 @@ import com.massivecraft.factions.Faction; import com.massivecraft.factions.Factions; import com.massivecraft.factions.FactionsPlugin; import mkremins.fanciful.FancyMessage; -import net.dv8tion.jda.core.AccountType; -import net.dv8tion.jda.core.JDABuilder; import net.dv8tion.jda.core.Permission; import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.TextChannel; @@ -19,12 +17,10 @@ import net.dv8tion.jda.webhook.WebhookMessage; import net.dv8tion.jda.webhook.WebhookMessageBuilder; import org.bukkit.ChatColor; -import javax.security.auth.login.LoginException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; -import java.util.logging.Level; public class FactionChatHandler extends ListenerAdapter { @@ -69,7 +65,9 @@ public class FactionChatHandler extends ListenerAdapter { while (i <= x.size() - 1) { mention.append(" ").append(x.get(i)); ii.add(i); - if (mention.toString().contains("#")) {break;} + if (mention.toString().contains("#")) { + break; + } i++; } if (mention.toString().contains("#")) { diff --git a/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java b/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java index e67e6d26..7d7d126b 100644 --- a/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java +++ b/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java @@ -76,32 +76,40 @@ public class PowerLossEvent extends FactionPlayerEvent implements Cancellable { /** * Gets the configured damage to a players individual power on death + * * @return power to be lost as a Double. */ - public double getDefaultPowerLost() {return Conf.powerPerDeath;} + public double getDefaultPowerLost() { + return Conf.powerPerDeath; + } /** * Gets the variable power lost. Custom power ignored when less than or equal to zero. + * * @return custom power to be lost as a Double. */ - public double getCustomPowerLost() {return this.modified;} + public double getCustomPowerLost() { + return this.modified; + } /** * Sets the variable power lost. Custom power ignored when less than or equal to zero. + * * @param loss Double amount for the custom power loss to be set to. */ - public void setCustomPowerLost(Double loss) {modified = loss;} + public void setCustomPowerLost(Double loss) { + modified = loss; + } /** * Determines if custom power is to be used. + * * @return If custom power is to be used as a boolean. */ public boolean usingCustomPower() { - if (modified > 0) { - return true; - } - return false; + return modified > 0; } + @Override public boolean isCancelled() { return cancelled; diff --git a/src/main/java/com/massivecraft/factions/event/PowerRegenEvent.java b/src/main/java/com/massivecraft/factions/event/PowerRegenEvent.java index 619e97b9..eec49cf8 100644 --- a/src/main/java/com/massivecraft/factions/event/PowerRegenEvent.java +++ b/src/main/java/com/massivecraft/factions/event/PowerRegenEvent.java @@ -3,8 +3,6 @@ package com.massivecraft.factions.event; import com.massivecraft.factions.Conf; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.Faction; -import com.massivecraft.factions.zcore.persist.MemoryFPlayer; -import com.massivecraft.factions.zcore.persist.MemoryFPlayers; import org.bukkit.event.Cancellable; /** @@ -25,6 +23,7 @@ public class PowerRegenEvent extends FactionPlayerEvent implements Cancellable { /** * Get the amount of power this player will regen by default + * * @return power amount gained as a Double. */ public double getDefaultPowerGained() { @@ -33,26 +32,30 @@ public class PowerRegenEvent extends FactionPlayerEvent implements Cancellable { /** * Get the amount of custom power this player will gain. Ignored if less than or equal to 0. + * * @return Custom power as a double */ - public double getCustomPower() {return modified;} - - /** - * Get if we will be using the custom power gain instead of default. - * @return If we will process the event custom returned as a Boolean. - */ - public boolean usingCustomPower() { - if (modified > 0) { - return true; - } - return false; + public double getCustomPower() { + return modified; } /** * Set the custom power gain for this event. + * * @param gain Amount of power to be added to player. */ - public void setCustomPower(Double gain) {modified = gain;} + public void setCustomPower(Double gain) { + modified = gain; + } + + /** + * Get if we will be using the custom power gain instead of default. + * + * @return If we will process the event custom returned as a Boolean. + */ + public boolean usingCustomPower() { + return modified > 0; + } @Override public boolean isCancelled() { diff --git a/src/main/java/com/massivecraft/factions/integration/Worldguard.java b/src/main/java/com/massivecraft/factions/integration/Worldguard.java index b197c2fb..d4d625d3 100644 --- a/src/main/java/com/massivecraft/factions/integration/Worldguard.java +++ b/src/main/java/com/massivecraft/factions/integration/Worldguard.java @@ -34,6 +34,7 @@ import java.util.List; public class Worldguard { + private static Worldguard instance; /** * @author FactionsUUID Team */ @@ -53,8 +54,6 @@ public class Worldguard { private StateFlag breakFlag; private boolean initialized = false; - private static Worldguard instance; - public Worldguard() { instance = this; @@ -72,16 +71,20 @@ public class Worldguard { Method getInstanceMethod = worldGuardClass.getMethod("getInstance"); worldGuard = getInstanceMethod.invoke(null); FactionsPlugin.instance.log("Found WorldGuard 7+"); - } catch (Exception ex) { FactionsPlugin.instance.log("Found WorldGuard <7"); } + } catch (Exception ex) { + FactionsPlugin.instance.log("Found WorldGuard <7"); + } } } + public static Worldguard getInstance() { + return instance; + } + public boolean isEnabled() { return worldGuardPlugin != null; } - public static Worldguard getInstance() { return instance; } - protected RegionAssociable getAssociable(Player player) { RegionAssociable associable; if (player == null) { @@ -173,9 +176,9 @@ public class Worldguard { try { if (worldAdaptMethod != null) { Object worldEditWorld = worldAdaptMethod.invoke(null, world); - regionManager = (RegionManager)regionContainerGetMethod.invoke(regionContainer, worldEditWorld); + regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, worldEditWorld); } else { - regionManager = (RegionManager)regionContainerGetMethod.invoke(regionContainer, world); + regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, world); } } catch (Exception ex) { FactionsPlugin.instance.log("An error occurred looking up a WorldGuard RegionManager"); @@ -190,7 +193,7 @@ public class Worldguard { Object vector = vectorConstructorAsAMethodBecauseWhyNot == null ? vectorConstructor.newInstance(location.getX(), location.getY(), location.getZ()) : vectorConstructorAsAMethodBecauseWhyNot.invoke(null, location.getX(), location.getY(), location.getZ()); - return (ApplicableRegionSet)regionManagerGetMethod.invoke(regionManager, vector); + return (ApplicableRegionSet) regionManagerGetMethod.invoke(regionManager, vector); } catch (Exception ex) { FactionsPlugin.instance.log("An error occurred looking up a WorldGuard ApplicableRegionSet"); FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!"); @@ -201,7 +204,8 @@ public class Worldguard { /** * Used to check WorldGuard to see if a Player has permission to place a block. - * @param player player in question. + * + * @param player player in question. * @param location Location of block placed. * @return */ @@ -212,8 +216,9 @@ public class Worldguard { Object query = createQueryMethod.invoke(regionContainer); if (locationAdaptMethod != null) { Object loc = locationAdaptMethod.invoke(null, location); - return (boolean)regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{buildFlag}); - } else return (boolean)regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag}); + return (boolean) regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{buildFlag}); + } else + return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag}); } catch (Exception ex) { FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!"); FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!"); @@ -224,7 +229,8 @@ public class Worldguard { /** * Used to check WorldGuard to see if a player has permission to break a block. - * @param player player in question. + * + * @param player player in question. * @param location Location of block broken. * @return */ @@ -236,7 +242,8 @@ public class Worldguard { if (locationAdaptMethod != null) { Object loc = locationAdaptMethod.invoke(null, location); return (boolean) regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{breakFlag}); - } else return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag}); + } else + return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag}); } catch (Exception ex) { FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!"); @@ -246,10 +253,13 @@ public class Worldguard { return true; } - public boolean checkForRegionsInChunk(FLocation floc) { return checkForRegionsInChunk(floc.getChunk()); } + public boolean checkForRegionsInChunk(FLocation floc) { + return checkForRegionsInChunk(floc.getChunk()); + } /** * Used for checking if regions are located in a chunk + * * @param chunk Chunk in question. * @return */ @@ -284,7 +294,8 @@ public class Worldguard { /** * General check for WorldGuard region @ location. - * @param player player in question. + * + * @param player player in question. * @param location Location of block broken. * @return */ diff --git a/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java b/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java index ea28d3bd..3d3e8fdd 100644 --- a/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java +++ b/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java @@ -7,7 +7,7 @@ import com.massivecraft.factions.util.MiscUtil; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.TravelAgent; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.*; import org.bukkit.entity.minecart.ExplosiveMinecart; @@ -20,7 +20,6 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.projectiles.ProjectileSource; @@ -155,16 +154,17 @@ public class FactionsEntityListener implements Listener { // Run the check for a player if (damager instanceof Player) { - // Generate the action message. - String entityAction; - - if (damagee.getType() == EntityType.ITEM_FRAME) { - entityAction = "item frames"; - } else { - entityAction = "armor stands"; + Player player = (Player) damager; + Material material = null; + switch (sub.getEntity().getType()) { + case ITEM_FRAME: + material = Material.ITEM_FRAME; + break; + case ARMOR_STAND: + material = Material.ARMOR_STAND; + break; } - - if (!FactionsBlockListener.playerCanBuildDestroyBlock((Player) damager, damagee.getLocation(), "destroy " + entityAction, false)) { + if (material != null && !FactionsBlockListener.playerCanBuildDestroyBlock(player, damagee.getLocation(), "destroy " + material.toString().toLowerCase(), false)) { event.setCancelled(true); } } else { @@ -240,7 +240,7 @@ public class FactionsEntityListener implements Listener { UUID uuid = player.getUniqueId(); if (FactionsPlugin.getInstance().getStuckMap().containsKey(uuid)) FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_STUCK_CANCELLED); - FactionsPlugin.getInstance().getStuckMap().remove(uuid); + FactionsPlugin.getInstance().getStuckMap().remove(uuid); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @@ -292,7 +292,7 @@ public class FactionsEntityListener implements Listener { if (faction.noExplosionsInTerritory() || (faction.isPeaceful() && Conf.peacefulTerritoryDisableBoom)) return false; - // faction is peaceful and has explosions set to disabled + // faction is peaceful and has explosions set to disabled boolean online = faction.hasPlayersOnline(); @@ -682,8 +682,8 @@ public class FactionsEntityListener implements Listener { Player victim = (Player) e.getEntity(); FPlayer fdamager = FPlayers.getInstance().getByPlayer(damager); FPlayer fvictim = FPlayers.getInstance().getByPlayer(victim); - if(damager == victim) return; - if(fdamager == fvictim) return; + if (damager == victim) return; + if (fdamager == fvictim) return; if (fvictim.getRelationTo(fdamager) == Relation.TRUCE) { fdamager.msg(TL.PLAYER_PVP_CANTHURT, fvictim.describeTo(fdamager)); e.setCancelled(true); diff --git a/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java b/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java index 4b448b57..f6636869 100644 --- a/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java +++ b/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java @@ -1,7 +1,6 @@ package com.massivecraft.factions.listeners; import com.massivecraft.factions.Conf; -import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.util.XMaterial; import org.bukkit.Location; import org.bukkit.Material; diff --git a/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java index 7b75a9b8..400bbd4d 100644 --- a/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java +++ b/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -53,12 +53,14 @@ import java.util.logging.Level; public class FactionsPlayerListener implements Listener { + public static Set corners; + public static BukkitTask positionTask = null; + public static Map lastLocations = new HashMap<>(); /** * @author FactionsUUID Team */ HashMap fallMap = new HashMap<>(); - public static Set corners; // Holds the next time a player can have a map shown. private HashMap showTimes = new HashMap<>(); @@ -225,7 +227,6 @@ public class FactionsPlayerListener implements Listener { return CheckPlayerAccess(player, me, loc, myFaction, otherFaction.getAccess(me, action), action, Conf.territoryPainBuild); } - public static boolean preventCommand(String fullCmd, Player player) { if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty() && Conf.permanentFactionMemberDenyCommands.isEmpty() && Conf.warzoneDenyCommands.isEmpty())) { return false; @@ -261,7 +262,7 @@ public class FactionsPlayerListener implements Listener { Relation rel = at.getRelationTo(me); if (at.isNormal() && rel.isAlly() && !Conf.territoryAllyDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryAllyDenyCommands.iterator())) { me.msg(TL.PLAYER_COMMAND_ALLY, fullCmd); - return false; + return true; } if (at.isNormal() && rel.isNeutral() && !Conf.territoryNeutralDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator())) { @@ -639,9 +640,6 @@ public class FactionsPlayerListener implements Listener { return (result.length() == 3 ? result + "0" : result) + "/hrs ago"; } - public static BukkitTask positionTask = null; - public static Map lastLocations = new HashMap<>(); - public void startPositionCheck() { positionTask = Bukkit.getScheduler().runTaskTimer(FactionsPlugin.instance, () -> { if (Bukkit.getOnlinePlayers().size() > 0) { @@ -921,7 +919,6 @@ public class FactionsPlayerListener implements Listener { } - @EventHandler public void onLogoutMove(PlayerMoveEvent e) { LogoutHandler handler = LogoutHandler.getByName(e.getPlayer().getName()); diff --git a/src/main/java/com/massivecraft/factions/missions/MissionGUI.java b/src/main/java/com/massivecraft/factions/missions/MissionGUI.java index 2ba7365b..65ae8fdf 100644 --- a/src/main/java/com/massivecraft/factions/missions/MissionGUI.java +++ b/src/main/java/com/massivecraft/factions/missions/MissionGUI.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; + import java.util.*; public class MissionGUI implements FactionGUI { @@ -56,7 +57,9 @@ public class MissionGUI implements FactionGUI { } } } - } else if (plugin.getConfig().getBoolean("Randomization.Enabled")) {return;} + } else if (plugin.getConfig().getBoolean("Randomization.Enabled")) { + return; + } if (configurationSection == null) return; int max = plugin.getConfig().getInt("MaximumMissionsAllowedAtOnce"); @@ -64,7 +67,8 @@ public class MissionGUI implements FactionGUI { fPlayer.msg(TL.MISSION_MISSION_MAX_ALLOWED, max); return; } - if (missionName.equals(plugin.color(FactionsPlugin.getInstance().getConfig().getString("Randomization.Start-Item.Disallowed.Name")))) return; + if (missionName.equals(plugin.color(FactionsPlugin.getInstance().getConfig().getString("Randomization.Start-Item.Disallowed.Name")))) + return; if (fPlayer.getFaction().getMissions().containsKey(missionName)) { fPlayer.msg(TL.MISSION_MISSION_ACTIVE); @@ -73,7 +77,7 @@ public class MissionGUI implements FactionGUI { ConfigurationSection section = configurationSection.getConfigurationSection(missionName); if (section == null) return; - if(FactionsPlugin.getInstance().getConfig().getBoolean("DenyMissionsMoreThenOnce")) { + if (FactionsPlugin.getInstance().getConfig().getBoolean("DenyMissionsMoreThenOnce")) { if (fPlayer.getFaction().getCompletedMissions().contains(missionName)) { fPlayer.msg(TL.MISSION_ALREAD_COMPLETED); return; diff --git a/src/main/java/com/massivecraft/factions/struct/Permission.java b/src/main/java/com/massivecraft/factions/struct/Permission.java index a9462ece..e0356d97 100755 --- a/src/main/java/com/massivecraft/factions/struct/Permission.java +++ b/src/main/java/com/massivecraft/factions/struct/Permission.java @@ -28,6 +28,7 @@ public enum Permission { CHECK("check"), CLAIM("claim"), CLAIMAT("claimat"), + CLAIM_FILL("claimfill"), CLAIM_LINE("claim.line"), CLAIM_RADIUS("claim.radius"), CONFIG("config"), diff --git a/src/main/java/com/massivecraft/factions/tag/FactionTag.java b/src/main/java/com/massivecraft/factions/tag/FactionTag.java index 60c06715..fda5a663 100644 --- a/src/main/java/com/massivecraft/factions/tag/FactionTag.java +++ b/src/main/java/com/massivecraft/factions/tag/FactionTag.java @@ -50,7 +50,9 @@ public enum FactionTag implements Tag { return null; }), - ANNOUNCEMENT("{announcement}", (fac) -> { return String.valueOf(fac.getAnnouncements()); }), + ANNOUNCEMENT("{announcement}", (fac) -> { + return String.valueOf(fac.getAnnouncements()); + }), PEACEFUL("{peaceful}", (fac) -> fac.isPeaceful() ? Conf.colorNeutral + TL.COMMAND_SHOW_PEACEFUL.toString() : ""), PERMANENT("permanent", (fac) -> fac.isPermanent() ? "permanent" : "{notPermanent}"), // no braces needed LAND_VALUE("{land-value}", (fac) -> Econ.shouldBeUsed() ? Econ.moneyString(Econ.calculateTotalLandValue(fac.getLandRounded())) : Tag.isMinimalShow() ? null : TL.ECON_OFF.format("value")), @@ -95,7 +97,7 @@ public enum FactionTag implements Tag { return String.valueOf(fac.getFPlayersWhereOnline(false).size()); } }), - FACTION_STRIKES("{faction-strikes}",(fac) -> String.valueOf(fac.getStrikes())), + FACTION_STRIKES("{faction-strikes}", (fac) -> String.valueOf(fac.getStrikes())), FACTION_POINTS("{faction-points}", (fac) -> String.valueOf(fac.getPoints())), FACTION_SIZE("{members}", (fac) -> String.valueOf(fac.getFPlayers().size())), FACTION_KILLS("{faction-kills}", (fac) -> String.valueOf(fac.getKills())), diff --git a/src/main/java/com/massivecraft/factions/tag/GeneralTag.java b/src/main/java/com/massivecraft/factions/tag/GeneralTag.java index 3f364b86..ac85a606 100644 --- a/src/main/java/com/massivecraft/factions/tag/GeneralTag.java +++ b/src/main/java/com/massivecraft/factions/tag/GeneralTag.java @@ -1,7 +1,6 @@ package com.massivecraft.factions.tag; import com.massivecraft.factions.FPlayers; -import com.massivecraft.factions.Factions; import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.Bukkit; diff --git a/src/main/java/com/massivecraft/factions/tag/PlayerTag.java b/src/main/java/com/massivecraft/factions/tag/PlayerTag.java index 3ad132ef..64f1ee84 100644 --- a/src/main/java/com/massivecraft/factions/tag/PlayerTag.java +++ b/src/main/java/com/massivecraft/factions/tag/PlayerTag.java @@ -1,6 +1,7 @@ package com.massivecraft.factions.tag; import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.zcore.util.TL; import org.apache.commons.lang.time.DurationFormatUtils; @@ -15,7 +16,13 @@ public enum PlayerTag implements Tag { /** * @author FactionsUUID Team */ - + GROUP("{group}", (fp) -> { + if (fp.isOnline()) { + return FactionsPlugin.getInstance().getPrimaryGroup(fp.getPlayer()); + } else { + return ""; + } + }), LAST_SEEN("{lastSeen}", (fp) -> { String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX; return fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized); diff --git a/src/main/java/com/massivecraft/factions/util/CC.java b/src/main/java/com/massivecraft/factions/util/CC.java index c6f17e58..030a004d 100644 --- a/src/main/java/com/massivecraft/factions/util/CC.java +++ b/src/main/java/com/massivecraft/factions/util/CC.java @@ -3,12 +3,13 @@ package com.massivecraft.factions.util; /** * @author Saser */ + import org.bukkit.ChatColor; public class CC { public static String Black = ChatColor.BLACK.toString(); public static String BlackB = ChatColor.BLACK + ChatColor.BOLD.toString(); - public static String BlackI = ChatColor.BLACK + ChatColor.ITALIC.toString();; + public static String BlackI = ChatColor.BLACK + ChatColor.ITALIC.toString(); public static String BlackU = ChatColor.BLACK + ChatColor.UNDERLINE.toString(); public static String DarkBlue = ChatColor.DARK_BLUE.toString(); public static String DarkBlueB = ChatColor.DARK_BLUE + ChatColor.BOLD.toString(); diff --git a/src/main/java/com/massivecraft/factions/util/ClipPlaceholderAPIManager.java b/src/main/java/com/massivecraft/factions/util/ClipPlaceholderAPIManager.java index b0e9e896..67fa2c73 100644 --- a/src/main/java/com/massivecraft/factions/util/ClipPlaceholderAPIManager.java +++ b/src/main/java/com/massivecraft/factions/util/ClipPlaceholderAPIManager.java @@ -121,7 +121,7 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R case "faction_description": return faction.getDescription(); case "faction_claims": - return fPlayer.hasFaction() ? String.valueOf(faction.getAllClaims().size()) : "0"; + return fPlayer.hasFaction() ? String.valueOf(faction.getAllClaims().size()) : "0"; case "faction_maxclaims": return String.valueOf(Conf.claimedLandsMax); case "faction_founded": @@ -169,10 +169,28 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R return Econ.shouldBeUsed() ? Econ.moneyString(Econ.getBalance(faction.getAccountId())) : TL.ECON_OFF.format("balance"); case "faction_allies": return String.valueOf(faction.getRelationCount(Relation.ALLY)); + case "faction_allies_players": + return String.valueOf(this.countOn(faction, Relation.ALLY, null, fPlayer)); + case "faction_allies_players_online": + return String.valueOf(this.countOn(faction, Relation.ALLY, true, fPlayer)); + case "faction_allies_players_offline": + return String.valueOf(this.countOn(faction, Relation.ALLY, false, fPlayer)); case "faction_enemies": return String.valueOf(faction.getRelationCount(Relation.ENEMY)); + case "faction_enemies_players": + return String.valueOf(this.countOn(faction, Relation.ENEMY, null, fPlayer)); + case "faction_enemies_players_online": + return String.valueOf(this.countOn(faction, Relation.ENEMY, true, fPlayer)); + case "faction_enemies_players_offline": + return String.valueOf(this.countOn(faction, Relation.ENEMY, false, fPlayer)); case "faction_truces": return String.valueOf(faction.getRelationCount(Relation.TRUCE)); + case "faction_truces_players": + return String.valueOf(this.countOn(faction, Relation.TRUCE, null, fPlayer)); + case "faction_truces_players_online": + return String.valueOf(this.countOn(faction, Relation.TRUCE, true, fPlayer)); + case "faction_truces_players_offline": + return String.valueOf(this.countOn(faction, Relation.TRUCE, false, fPlayer)); case "faction_online": return String.valueOf(faction.getOnlinePlayers().size()); case "faction_offline": @@ -187,6 +205,8 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R return String.valueOf(faction.getDeaths()); case "faction_maxvaults": return String.valueOf(faction.getMaxVaults()); + case "faction_relation_color": + return fPlayer.getColorTo(faction).toString(); case "faction_grace": return String.valueOf(Conf.gracePeriod); case "faction_name_at_location": @@ -196,4 +216,21 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R return null; } + + + private int countOn(Faction f, Relation relation, Boolean status, FPlayer player) { + int count = 0; + for (Faction faction : Factions.getInstance().getAllFactions()) { + if (faction.getRelationTo(f) == relation) { + if (status == null) { + count += faction.getFPlayers().size(); + } else if (status) { + count += faction.getFPlayersWhereOnline(true, player).size(); + } else { + count += faction.getFPlayersWhereOnline(false, player).size(); + } + } + } + return count; + } } \ No newline at end of file diff --git a/src/main/java/com/massivecraft/factions/util/FactionWarpsFrame.java b/src/main/java/com/massivecraft/factions/util/FactionWarpsFrame.java index 08a27006..8ce7bc95 100644 --- a/src/main/java/com/massivecraft/factions/util/FactionWarpsFrame.java +++ b/src/main/java/com/massivecraft/factions/util/FactionWarpsFrame.java @@ -38,8 +38,8 @@ public class FactionWarpsFrame { GUIItems.add(new GuiItem(buildDummyItem(), e -> e.setCancelled(true))); slots.forEach(slot -> GUIItems.set(slot, new GuiItem(XMaterial.AIR.parseItem()))); for (final Map.Entry warp : fplayer.getFaction().getWarps().entrySet()) { - if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()){ - slots.add(slots.get(slots.size()-1)+1); + if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()) { + slots.add(slots.get(slots.size() - 1) + 1); FactionsPlugin.instance.log("Automatically setting F WARP GUI slot since slot not specified. Head config.yml and add more entries in warp-slots section."); } diff --git a/src/main/java/com/massivecraft/factions/util/InventoryTypeAdapter.java b/src/main/java/com/massivecraft/factions/util/InventoryTypeAdapter.java index db7c7f61..e883a4d5 100644 --- a/src/main/java/com/massivecraft/factions/util/InventoryTypeAdapter.java +++ b/src/main/java/com/massivecraft/factions/util/InventoryTypeAdapter.java @@ -1,7 +1,6 @@ package com.massivecraft.factions.util; import com.google.gson.*; -import com.massivecraft.factions.Conf; import com.massivecraft.factions.FactionsPlugin; import org.bukkit.inventory.Inventory; diff --git a/src/main/java/com/massivecraft/factions/util/ItemBuilder.java b/src/main/java/com/massivecraft/factions/util/ItemBuilder.java index 1ff2036e..1f9dc41b 100644 --- a/src/main/java/com/massivecraft/factions/util/ItemBuilder.java +++ b/src/main/java/com/massivecraft/factions/util/ItemBuilder.java @@ -24,6 +24,7 @@ public class ItemBuilder { public ItemBuilder(Material material, int amount) { this(new ItemStack(material, amount)); } + public ItemBuilder(Material material) { this(material, 1); } diff --git a/src/main/java/com/massivecraft/factions/util/ItemUtil.java b/src/main/java/com/massivecraft/factions/util/ItemUtil.java index 1371e342..5bfb2b05 100644 --- a/src/main/java/com/massivecraft/factions/util/ItemUtil.java +++ b/src/main/java/com/massivecraft/factions/util/ItemUtil.java @@ -3,7 +3,7 @@ package com.massivecraft.factions.util; /** * @author Saser */ -import com.massivecraft.factions.util.XMaterial; + import org.bukkit.Material; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -24,7 +24,7 @@ public class ItemUtil { } else { int itemsFound = 0; - for(int i = 0; i < inventory.getSize(); ++i) { + for (int i = 0; i < inventory.getSize(); ++i) { ItemStack item = inventory.getItem(i); if (item != null && item.getType() != Material.AIR) { ++itemsFound; @@ -41,7 +41,7 @@ public class ItemUtil { return skull.clone(); } else { skull = new ItemStack(XMaterial.PLAYER_HEAD.parseMaterial()); - SkullMeta sm = (SkullMeta)skull.getItemMeta(); + SkullMeta sm = (SkullMeta) skull.getItemMeta(); sm.setOwner(name); skull.setItemMeta(sm); cachedSkulls.put(name, skull.clone()); diff --git a/src/main/java/com/massivecraft/factions/util/JSONUtils.java b/src/main/java/com/massivecraft/factions/util/JSONUtils.java index fbb7a9d1..6db16eee 100644 --- a/src/main/java/com/massivecraft/factions/util/JSONUtils.java +++ b/src/main/java/com/massivecraft/factions/util/JSONUtils.java @@ -3,15 +3,14 @@ package com.massivecraft.factions.util; /** * @author Saser */ + import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.massivecraft.factions.cmd.audit.FactionLogs; import org.bukkit.Bukkit; import java.io.*; import java.lang.reflect.Type; -import java.util.Map; public class JSONUtils { public static Gson gson = (new GsonBuilder()).enableComplexMapKeySerialization().create(); @@ -94,7 +93,7 @@ public class JSONUtils { } private static Type getTypeFromObject(Object object) { - return object instanceof Type ? (Type)object : getTypeFromClass(object.getClass()); + return object instanceof Type ? (Type) object : getTypeFromClass(object.getClass()); } private static Type getTypeFromClass(Class clazz) { diff --git a/src/main/java/com/massivecraft/factions/util/Pair.java b/src/main/java/com/massivecraft/factions/util/Pair.java index b1ac3088..c5aec582 100644 --- a/src/main/java/com/massivecraft/factions/util/Pair.java +++ b/src/main/java/com/massivecraft/factions/util/Pair.java @@ -5,18 +5,17 @@ package com.massivecraft.factions.util; */ public class Pair { - public static Pair of(Left left, Right right) { - return new Pair<>(left, right); - } - private final Left left; private final Right right; - private Pair(Left left, Right right) { this.left = left; this.right = right; } + public static Pair of(Left left, Right right) { + return new Pair<>(left, right); + } + public Left getLeft() { return this.left; } diff --git a/src/main/java/com/massivecraft/factions/util/Updater.java b/src/main/java/com/massivecraft/factions/util/Updater.java index d17a9637..60a69a59 100644 --- a/src/main/java/com/massivecraft/factions/util/Updater.java +++ b/src/main/java/com/massivecraft/factions/util/Updater.java @@ -10,6 +10,7 @@ import java.util.List; public class Updater { public static double currentVersion = 1.1; + public static void updateIfNeeded(FileConfiguration conf) { double version = conf.getDouble("Config-Version", 0); //Previous version @@ -41,6 +42,8 @@ public class Updater { try { conf.save(new File("plugins/Factions/config.yml")); FactionsPlugin.getInstance().reloadConfig(); - } catch (IOException e) {e.printStackTrace();} + } catch (IOException e) { + e.printStackTrace(); + } } } diff --git a/src/main/java/com/massivecraft/factions/util/UtilFly.java b/src/main/java/com/massivecraft/factions/util/UtilFly.java index 782d28c1..a0898e14 100644 --- a/src/main/java/com/massivecraft/factions/util/UtilFly.java +++ b/src/main/java/com/massivecraft/factions/util/UtilFly.java @@ -25,6 +25,7 @@ public class UtilFly { } }, 0, FactionsPlugin.getInstance().getConfig().getInt("fly-task-interval", 10)); } + @Deprecated public static void setFly(FPlayer fp, boolean fly, boolean silent, boolean damage) { if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) @@ -45,6 +46,7 @@ public class UtilFly { setFallDamage(fp, fly, damage); } + @Deprecated public static void checkFly(FPlayer me, Faction factionTo) { if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) diff --git a/src/main/java/com/massivecraft/factions/util/XMaterial.java b/src/main/java/com/massivecraft/factions/util/XMaterial.java index 18aa08dc..5a36dddb 100644 --- a/src/main/java/com/massivecraft/factions/util/XMaterial.java +++ b/src/main/java/com/massivecraft/factions/util/XMaterial.java @@ -1803,7 +1803,8 @@ public enum XMaterial { */ @SuppressWarnings("deprecation") public int getId() { - if (this.data != 0 || (this.legacy.length != 0 && Integer.parseInt(this.legacy[0].substring(2)) >= 13)) return -1; + if (this.data != 0 || (this.legacy.length != 0 && Integer.parseInt(this.legacy[0].substring(2)) >= 13)) + return -1; Material material = this.parseMaterial(); return material == null ? -1 : material.getId(); } diff --git a/src/main/java/com/massivecraft/factions/util/serializable/ClickableItemStack.java b/src/main/java/com/massivecraft/factions/util/serializable/ClickableItemStack.java index d03ac1f3..1ebdbead 100644 --- a/src/main/java/com/massivecraft/factions/util/serializable/ClickableItemStack.java +++ b/src/main/java/com/massivecraft/factions/util/serializable/ClickableItemStack.java @@ -3,6 +3,7 @@ package com.massivecraft.factions.util.serializable; /** * @author Saser */ + import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; diff --git a/src/main/java/com/massivecraft/factions/util/serializable/GUIMenu.java b/src/main/java/com/massivecraft/factions/util/serializable/GUIMenu.java index e661fc55..b649bd42 100644 --- a/src/main/java/com/massivecraft/factions/util/serializable/GUIMenu.java +++ b/src/main/java/com/massivecraft/factions/util/serializable/GUIMenu.java @@ -3,6 +3,7 @@ package com.massivecraft.factions.util.serializable; /** * @author Saser */ + import com.google.common.collect.Lists; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.Faction; @@ -10,14 +11,12 @@ import com.massivecraft.factions.FactionsPlugin; import com.massivecraft.factions.struct.Role; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.material.MaterialData; import java.util.HashMap; import java.util.List; @@ -26,9 +25,9 @@ import java.util.UUID; import java.util.function.Consumer; public abstract class GUIMenu { + private static Map menus = new HashMap<>(); protected Inventory menu; private Map menuItems = new HashMap<>(); - private static Map menus = new HashMap<>(); private Consumer closeCallback; private String name; private int size; @@ -44,6 +43,14 @@ public abstract class GUIMenu { this.menu = Bukkit.createInventory(null, size, name); } + public static int fitSlots(int size) { + return size <= 9 ? 9 : (size <= 18 ? 18 : (size <= 27 ? 27 : (size <= 36 ? 36 : (size <= 45 ? 45 : (size <= 54 ? 54 : 54))))); + } + + public static Map getMenus() { + return menus; + } + public void setInventorySize(int size) { if (this.size != size) { int oldSize = this.size; @@ -59,11 +66,6 @@ public abstract class GUIMenu { } } - public GUIMenu setPreviousMenu(GUIMenu menu) { - this.previousMenu = menu; - return this; - } - public void setItem(int slot, ClickableItemStack item) { this.menu.setItem(slot, item); this.menuItems.put(slot, item); @@ -82,9 +84,9 @@ public abstract class GUIMenu { } public ClickableItemStack getBackButton(Material data, String name, String... lore) { - return (new ClickableItemStack(new ItemStack(data != null ? data : Material.RED_STAINED_GLASS_PANE, 1, data != null ? (short) 0 : 0 ))).setDisplayName(name != null ? name : ChatColor.RED + ChatColor.BOLD.toString() + "Back").setLore(lore != null ? Lists.newArrayList(lore) : Lists.newArrayList(ChatColor.GRAY + "Click to return to previous menu.")).setClickCallback((e) -> { + return (new ClickableItemStack(new ItemStack(data != null ? data : Material.RED_STAINED_GLASS_PANE, 1, data != null ? (short) 0 : 0))).setDisplayName(name != null ? name : ChatColor.RED + ChatColor.BOLD.toString() + "Back").setLore(lore != null ? Lists.newArrayList(lore) : Lists.newArrayList(ChatColor.GRAY + "Click to return to previous menu.")).setClickCallback((e) -> { if (this.previousMenu != null) { - this.previousMenu.open((Player)e.getWhoClicked()); + this.previousMenu.open((Player) e.getWhoClicked()); } }); @@ -113,7 +115,7 @@ public abstract class GUIMenu { } public void fillEmpty(ClickableItemStack item) { - for(int i = 0; i < this.menu.getSize(); ++i) { + for (int i = 0; i < this.menu.getSize(); ++i) { ItemStack is = this.menu.getItem(i); if (is == null || is.getType() == Material.AIR) { this.setItem(i, item); @@ -122,18 +124,10 @@ public abstract class GUIMenu { } - public static int fitSlots(int size) { - return size <= 9 ? 9 : (size <= 18 ? 18 : (size <= 27 ? 27 : (size <= 36 ? 36 : (size <= 45 ? 45 : (size <= 54 ? 54 : 54))))); - } - public Map getMenuItems() { return this.menuItems; } - public static Map getMenus() { - return menus; - } - public Consumer getCloseCallback() { return this.closeCallback; } @@ -153,4 +147,9 @@ public abstract class GUIMenu { public GUIMenu getPreviousMenu() { return this.previousMenu; } + + public GUIMenu setPreviousMenu(GUIMenu menu) { + this.previousMenu = menu; + return this; + } } diff --git a/src/main/java/com/massivecraft/factions/util/serializable/InventoryItem.java b/src/main/java/com/massivecraft/factions/util/serializable/InventoryItem.java index 6529981e..20a8b9fe 100644 --- a/src/main/java/com/massivecraft/factions/util/serializable/InventoryItem.java +++ b/src/main/java/com/massivecraft/factions/util/serializable/InventoryItem.java @@ -21,7 +21,9 @@ public class InventoryItem { this.item = original; } - public InventoryItem(ItemBuilder original) { this(original.build()); } + public InventoryItem(ItemBuilder original) { + this(original.build()); + } public InventoryItem click(ClickType type, Runnable runnable) { this.clickMap.put(type, runnable); diff --git a/src/main/java/com/massivecraft/factions/zcore/MPlugin.java b/src/main/java/com/massivecraft/factions/zcore/MPlugin.java index 97677d21..e5f560d7 100644 --- a/src/main/java/com/massivecraft/factions/zcore/MPlugin.java +++ b/src/main/java/com/massivecraft/factions/zcore/MPlugin.java @@ -190,7 +190,7 @@ public abstract class MPlugin extends JavaPlugin { Board.getInstance().forceSave(); } log("Disabled"); - } catch (IllegalPluginAccessException e){ + } catch (IllegalPluginAccessException e) { } } diff --git a/src/main/java/com/massivecraft/factions/zcore/fperms/DefaultPermissions.java b/src/main/java/com/massivecraft/factions/zcore/fperms/DefaultPermissions.java index ad379fef..7420ad70 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fperms/DefaultPermissions.java +++ b/src/main/java/com/massivecraft/factions/zcore/fperms/DefaultPermissions.java @@ -1,7 +1,5 @@ package com.massivecraft.factions.zcore.fperms; -import com.massivecraft.factions.util.XMaterial; - public class DefaultPermissions { /** diff --git a/src/main/java/com/massivecraft/factions/zcore/fperms/gui/PermissableActionFrame.java b/src/main/java/com/massivecraft/factions/zcore/fperms/gui/PermissableActionFrame.java index 2c36ed2b..cd530934 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fperms/gui/PermissableActionFrame.java +++ b/src/main/java/com/massivecraft/factions/zcore/fperms/gui/PermissableActionFrame.java @@ -53,12 +53,12 @@ public class PermissableActionFrame { case LEFT: access = Access.ALLOW; success = fplayer.getFaction().setPermission(perm, action, access); - FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS,fplayer.getName(), ChatColor.GREEN.toString() + ChatColor.BOLD + "ALLOWED", action.getName(), perm.name()); + FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS, fplayer.getName(), ChatColor.GREEN.toString() + ChatColor.BOLD + "ALLOWED", action.getName(), perm.name()); break; case RIGHT: access = Access.DENY; success = fplayer.getFaction().setPermission(perm, action, access); - FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS,fplayer.getName(), ChatColor.RED.toString() + ChatColor.BOLD + "DENIED", action.getName(), perm.name()); + FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS, fplayer.getName(), ChatColor.RED.toString() + ChatColor.BOLD + "DENIED", action.getName(), perm.name()); break; case MIDDLE: access = Access.UNDEFINED; diff --git a/src/main/java/com/massivecraft/factions/zcore/fupgrades/FUpgradeFrame.java b/src/main/java/com/massivecraft/factions/zcore/fupgrades/FUpgradeFrame.java index 28a2d534..cd0a327f 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fupgrades/FUpgradeFrame.java +++ b/src/main/java/com/massivecraft/factions/zcore/fupgrades/FUpgradeFrame.java @@ -25,12 +25,12 @@ public class FUpgradeFrame { private Gui gui; - public FUpgradeFrame(Faction f) { - this.gui = new Gui(FactionsPlugin.getInstance(), - FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5), - ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(FactionsPlugin.getInstance().getConfig() + public FUpgradeFrame(Faction f) { + this.gui = new Gui(FactionsPlugin.getInstance(), + FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5), + ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(FactionsPlugin.getInstance().getConfig() .getString("fupgrades.MainMenu.Title")).replace("{faction}", f.getTag()))); - } + } public void buildGUI(FPlayer fplayer) { PaginatedPane pane = new PaginatedPane(0, 0, 9, this.gui.getRows()); diff --git a/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradesListener.java b/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradesListener.java index 29d69974..21c90b7b 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradesListener.java +++ b/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradesListener.java @@ -23,6 +23,63 @@ import java.util.concurrent.ThreadLocalRandom; public class UpgradesListener implements Listener { + @EventHandler + public static void onDamageReduction(EntityDamageByEntityEvent e) { + if (e.isCancelled()) { + return; + } + if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) { + return; + } + FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity()); + FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager()); + if (fme == null || dame == null) { + return; + } + FLocation floc = new FLocation(fme.getPlayer().getLocation()); + if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) { + if (dame.getFaction() == fme.getFaction()) { + return; + } + double damage = e.getDamage(); + int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE); + double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageReduction.DamageReductionPercent.level-" + level); + e.setDamage(damage - damage / 100.0 * increase); + } + } + + @EventHandler + public static void onDamageIncrease(EntityDamageByEntityEvent e) { + if (e == null) { + return; + } + if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) { + return; + } + + if (e.getDamager().hasMetadata("NPC") || e.getEntity().hasMetadata("NPC")) return; + + FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity()); + FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager()); + if (fme == null || dame == null) { + return; + } + + FLocation floc = new FLocation(fme.getPlayer().getLocation()); + + if (floc == null) return; + + if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) { + if (dame.getFaction() == fme.getFaction()) { + return; + } + double damage = e.getDamage(); + int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE); + double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageIncrease.DamageIncreasePercent.level-" + level); + e.setDamage(damage + damage / 100.0 * increase); + } + } + /** * @author Illyria Team */ @@ -68,70 +125,44 @@ public class UpgradesListener implements Listener { } @EventHandler - public void onCropGrow( BlockGrowEvent e) { - FLocation floc = new FLocation(e.getBlock().getLocation()); - Faction factionAtLoc = Board.getInstance().getFactionAt(floc); + public void onCropGrow(BlockGrowEvent e) { + FLocation floc = new FLocation(e.getBlock().getLocation()); + Faction factionAtLoc = Board.getInstance().getFactionAt(floc); if (!factionAtLoc.isWilderness()) { - int level = factionAtLoc.getUpgrade(UpgradeType.CROP); - int chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-" + level); + int level = factionAtLoc.getUpgrade(UpgradeType.CROP); + int chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-" + level); if (level == 0 || chance == 0) { return; } - int randomNum = ThreadLocalRandom.current().nextInt(1, 101); + int randomNum = ThreadLocalRandom.current().nextInt(1, 101); if (randomNum <= chance) { this.growCrop(e); } } } - private void growCrop( BlockGrowEvent e) { + private void growCrop(BlockGrowEvent e) { if (e.getBlock().getType().equals(XMaterial.WHEAT.parseMaterial())) { e.setCancelled(true); - Crops c = new Crops(CropState.RIPE); - BlockState bs = e.getBlock().getState(); + Crops c = new Crops(CropState.RIPE); + BlockState bs = e.getBlock().getState(); bs.setData(c); bs.update(); } - Block below = e.getBlock().getLocation().subtract(0.0, 1.0, 0.0).getBlock(); + Block below = e.getBlock().getLocation().subtract(0.0, 1.0, 0.0).getBlock(); if (below.getType() == XMaterial.SUGAR_CANE.parseMaterial()) { - Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock(); + Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock(); if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) { above.setType(XMaterial.SUGAR_CANE.parseMaterial()); } - } - else if (below.getType() == Material.CACTUS) { - Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock(); + } else if (below.getType() == Material.CACTUS) { + Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock(); if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) { above.setType(Material.CACTUS); } } } - @EventHandler - public static void onDamageReduction(EntityDamageByEntityEvent e) { - if (e.isCancelled()) { - return; - } - if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) { - return; - } - FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity()); - FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager()); - if (fme == null || dame == null) { - return; - } - FLocation floc = new FLocation(fme.getPlayer().getLocation()); - if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) { - if (dame.getFaction() == fme.getFaction()) { - return; - } - double damage = e.getDamage(); - int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE); - double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageReduction.DamageReductionPercent.level-" + level); - e.setDamage(damage - damage / 100.0 * increase); - } - } - @EventHandler public void onWaterRedstone(BlockFromToEvent e) { List unbreakable = FactionsPlugin.getInstance().getConfig().getStringList("no-water-destroy.Item-List"); @@ -152,37 +183,6 @@ public class UpgradesListener implements Listener { } } - @EventHandler - public static void onDamageIncrease(EntityDamageByEntityEvent e) { - if (e == null) { - return; - } - if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) { - return; - } - - if(e.getDamager().hasMetadata("NPC") || e.getEntity().hasMetadata("NPC")) return; - - FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity()); - FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager()); - if (fme == null || dame == null) { - return; - } - - FLocation floc = new FLocation(fme.getPlayer().getLocation()); - - if(floc == null) return; - - if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) { - if (dame.getFaction() == fme.getFaction()) { - return; - } - double damage = e.getDamage(); - int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE); - double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageIncrease.DamageIncreasePercent.level-" + level); - e.setDamage(damage + damage / 100.0 * increase); - } - } @EventHandler public void onArmorDamage(PlayerItemDamageEvent e) { if (FPlayers.getInstance().getByPlayer(e.getPlayer()) == null) { diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java index f45f2dc0..3c171971 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java @@ -208,7 +208,7 @@ public abstract class MemoryFPlayer implements FPlayer { oldFaction.removeFPlayer(this); } if (alt) faction.addAltPlayer(this); - else faction.addFPlayer(this); + else faction.addFPlayer(this); this.factionId = faction.getId(); } @@ -222,17 +222,29 @@ public abstract class MemoryFPlayer implements FPlayer { return this.notificationsEnabled; } - public boolean hasEnemiesNearby() {return this.enemiesNearby;} + public boolean hasEnemiesNearby() { + return this.enemiesNearby; + } - public void setEnemiesNearby(Boolean b) {this.enemiesNearby = b;} + public void setEnemiesNearby(Boolean b) { + this.enemiesNearby = b; + } - public boolean discordSetup() {return this.discordSetup;} + public boolean discordSetup() { + return this.discordSetup; + } - public String discordUserID() {return this.discordUserID;} + public String discordUserID() { + return this.discordUserID; + } - public void setDiscordSetup(Boolean b) {this.discordSetup = b;} + public void setDiscordSetup(Boolean b) { + this.discordSetup = b; + } - public void setDiscordUserID(String s) {this.discordUserID = s;} + public void setDiscordUserID(String s) { + this.discordUserID = s; + } public boolean hasTitlesEnabled() { return this.titlesEnabled; @@ -242,7 +254,9 @@ public abstract class MemoryFPlayer implements FPlayer { this.titlesEnabled = b; } - public User discordUser() {return Discord.jda.getUserById(this.discordUserID);} + public User discordUser() { + return Discord.jda.getUserById(this.discordUserID); + } public String getFactionId() { return this.factionId; @@ -288,7 +302,9 @@ public abstract class MemoryFPlayer implements FPlayer { } else { this.role = event.getTo(); } - } catch (HierarchyException e) {System.out.print(e.getMessage());} + } catch (HierarchyException e) { + System.out.print(e.getMessage()); + } } } @@ -337,7 +353,7 @@ public abstract class MemoryFPlayer implements FPlayer { public void setIsAutoSafeClaimEnabled(boolean enabled) { this.autoSafeZoneEnabled = enabled; if (enabled) this.autoClaimFor = null; - this.autoWarZoneEnabled = false; + this.autoWarZoneEnabled = false; } public boolean isAutoWarClaimEnabled() { @@ -347,7 +363,7 @@ public abstract class MemoryFPlayer implements FPlayer { public void setIsAutoWarClaimEnabled(boolean enabled) { this.autoWarZoneEnabled = enabled; if (enabled) this.autoClaimFor = null; - this.autoSafeZoneEnabled = false; + this.autoSafeZoneEnabled = false; } public boolean isAdminBypassing() { @@ -404,11 +420,15 @@ public abstract class MemoryFPlayer implements FPlayer { try { if (Discord.useDiscord && this.discordSetup() && Discord.isInMainGuild(this.discordUser()) && Discord.mainGuild != null) { Member m = Discord.mainGuild.getMember(this.discordUser()); - if (Conf.leaderRoles && this.role == Role.LEADER && Discord.leader != null) Discord.mainGuild.getController().removeSingleRoleFromMember(m, Discord.leader).queue(); - if (Conf.factionRoles) Discord.mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(Discord.createFactionRole(this.getFaction().getTag()))).queue(); + if (Conf.leaderRoles && this.role == Role.LEADER && Discord.leader != null) + Discord.mainGuild.getController().removeSingleRoleFromMember(m, Discord.leader).queue(); + if (Conf.factionRoles) + Discord.mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(Discord.createFactionRole(this.getFaction().getTag()))).queue(); if (Conf.factionDiscordTags) Discord.resetNick(this); } - } catch (HierarchyException e) {System.out.print(e.getMessage());} + } catch (HierarchyException e) { + System.out.print(e.getMessage()); + } //End Discord currentFaction.removeFPlayer(this); if (currentFaction.isNormal()) currentFaction.clearClaimOwnership(this); @@ -475,7 +495,8 @@ public abstract class MemoryFPlayer implements FPlayer { public void setTitle(CommandSender sender, String title) { // Check if the setter has it. - if (sender.hasPermission(Permission.TITLE_COLOR.node)) title = ChatColor.translateAlternateColorCodes('&', title); + if (sender.hasPermission(Permission.TITLE_COLOR.node)) + title = ChatColor.translateAlternateColorCodes('&', title); this.title = title; } @@ -604,7 +625,7 @@ public abstract class MemoryFPlayer implements FPlayer { this.power += delta; if (this.power > this.getPowerMax()) this.power = this.getPowerMax(); - else if (this.power < this.getPowerMin()) + else if (this.power < this.getPowerMin()) this.power = this.getPowerMin(); } @@ -627,9 +648,11 @@ public abstract class MemoryFPlayer implements FPlayer { public int getPowerMinRounded() { return (int) Math.round(this.getPowerMin()); } + public long getMillisPassed() { return this.millisPassed; } + public long getLastPowerUpdateTime() { return this.lastPowerUpdateTime; } @@ -647,13 +670,15 @@ public abstract class MemoryFPlayer implements FPlayer { this.lastPowerUpdateTime = now; Player thisPlayer = this.getPlayer(); - if (thisPlayer != null && thisPlayer.isDead()) return; // don't let dead players regain power until they respawn + if (thisPlayer != null && thisPlayer.isDead()) + return; // don't let dead players regain power until they respawn PowerRegenEvent powerRegenEvent = new PowerRegenEvent(getFaction(), this); Bukkit.getScheduler().runTask(FactionsPlugin.getInstance(), () -> Bukkit.getServer().getPluginManager().callEvent(powerRegenEvent)); if (!powerRegenEvent.isCancelled()) - if (!powerRegenEvent.usingCustomPower()) this.alterPower(millisPassed * Conf.powerPerMinute / 60000); // millisPerMinute : 60 * 1000 - else this.alterPower(+powerRegenEvent.getCustomPower()); + if (!powerRegenEvent.usingCustomPower()) + this.alterPower(millisPassed * Conf.powerPerMinute / 60000); // millisPerMinute : 60 * 1000 + else this.alterPower(+powerRegenEvent.getCustomPower()); } public void losePowerFromBeingOffline() { @@ -705,7 +730,8 @@ public abstract class MemoryFPlayer implements FPlayer { FScoreboard.get(this).setTemporarySidebar(new FInfoSidebar(toShow)); showChat = FactionsPlugin.getInstance().getConfig().getBoolean("scoreboard.also-send-chat", true); } - if (showChat) this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this)))); + if (showChat) + this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this)))); } // ------------------------------- @@ -767,7 +793,8 @@ public abstract class MemoryFPlayer implements FPlayer { // Am I the last one in the faction? if (myFaction.getFPlayers().size() == 1) { // Transfer all money - if (Econ.shouldBeUsed()) Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId())); + if (Econ.shouldBeUsed()) + Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId())); } @@ -795,7 +822,8 @@ public abstract class MemoryFPlayer implements FPlayer { Bukkit.getPluginManager().callEvent(disbandEvent); Factions.getInstance().removeFaction(myFaction.getId()); - if (Conf.logFactionDisband) FactionsPlugin.getInstance().log(TL.LEAVE_DISBANDEDLOG.format(myFaction.getTag(), myFaction.getId(), this.getName())); + if (Conf.logFactionDisband) + FactionsPlugin.getInstance().log(TL.LEAVE_DISBANDEDLOG.format(myFaction.getTag(), myFaction.getId(), this.getName())); } } @@ -927,6 +955,9 @@ public abstract class MemoryFPlayer implements FPlayer { } public void setFFlying(boolean fly, boolean damage) { + if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) + return; + Player player = getPlayer(); if (player == null) return; @@ -935,7 +966,8 @@ public abstract class MemoryFPlayer implements FPlayer { if (!damage) { msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled"); - if (!fly) sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + "")); + if (!fly) + sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + "")); } else { msg(TL.COMMAND_FLY_DAMAGE); } @@ -959,9 +991,11 @@ public abstract class MemoryFPlayer implements FPlayer { public boolean isInFactionsChest() { return inChest; } + public void setInFactionsChest(boolean b) { inChest = b; } + public boolean isInVault() { return inVault; } @@ -1224,7 +1258,8 @@ public abstract class MemoryFPlayer implements FPlayer { Board.getInstance().setFactionAt(forFaction, flocation); - if (Conf.logLandClaims) FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag()); + if (Conf.logLandClaims) + FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag()); return true; } diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java index dc6e0b0f..573425b8 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java @@ -70,6 +70,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { protected Map> permissions = new HashMap<>(); protected Set bans = new HashSet<>(); protected String player; + protected String discord; Inventory chest; Map bannerSerialized; private long lastDeath; @@ -86,7 +87,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { private int warpLimit; private double reinforcedArmor; private List completedMissions; - protected String discord; private String factionChatChannelId; private String wallNotifyChannelId; private String bufferNotifyChannelId; @@ -340,8 +340,8 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { boolean disbanderIsConsole = disbander == null; FPlayer fdisbander = null; - if(!disbanderIsConsole){ - fdisbander= FPlayers.getInstance().getByOfflinePlayer(disbander); + if (!disbanderIsConsole) { + fdisbander = FPlayers.getInstance().getByOfflinePlayer(disbander); } @@ -376,7 +376,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { if (Econ.shouldBeUsed() && !disbanderIsConsole) { // Should we prevent to withdraw money if the faction was just created if (Conf.econFactionStartingBalance != 0 && (System.currentTimeMillis() - this.foundedDate) <= (Conf.econDenyWithdrawWhenMinutesAgeLessThan * 6000)) { - msg("Your faction is too young to withdraw money like this"); + msg(TL.COMMAND_DISBAND_TOO_YOUNG); } else { //Give all the faction's money to the disbander double amount = Econ.getBalance(this.getAccountId()); @@ -529,10 +529,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { } @Override - public double getReinforcedArmor() { return this.reinforcedArmor; } + public double getReinforcedArmor() { + return this.reinforcedArmor; + } @Override - public void setReinforcedArmor(double newPercent) { reinforcedArmor = newPercent; } + public void setReinforcedArmor(double newPercent) { + reinforcedArmor = newPercent; + } @Override public ItemStack getBanner() { @@ -589,11 +593,21 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { return this.memberRoleId; } + @Override + public void setMemberRoleId(String memberRoleId) { + this.memberRoleId = memberRoleId; + } + @Override public String getFactionChatChannelId() { return this.factionChatChannelId; } + @Override + public void setFactionChatChannelId(String factionChatChannelId) { + this.factionChatChannelId = factionChatChannelId; + } + @Override public String getWallNotifyChannelId() { return this.wallNotifyChannelId; @@ -644,16 +658,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.weeWooFormat = weeWooFormat; } - @Override - public void setFactionChatChannelId(String factionChatChannelId) { - this.factionChatChannelId = factionChatChannelId; - } - - @Override - public void setMemberRoleId(String memberRoleId) { - this.memberRoleId = memberRoleId; - } - public boolean isWeeWoo() { return this.weeWoo; } @@ -718,12 +722,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { return this.tag; } - public void checkPerms() { - if (this.permissions == null || this.permissions.isEmpty()) { - this.resetPerms(); - } - } - public void setTag(String str) { if (Conf.factionTagForceUpperCase) { str = str.toUpperCase(); @@ -731,6 +729,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.tag = str; } + public void checkPerms() { + if (this.permissions == null || this.permissions.isEmpty()) { + this.resetPerms(); + } + } + public String getTag(String prefix) { return prefix + this.tag; } @@ -774,6 +778,11 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.home = new LazyLocation(home); } + + public void deleteHome() { + this.home = null; + } + public long getFoundedDate() { if (this.foundedDate == 0) { setFoundedDate(System.currentTimeMillis()); @@ -1329,7 +1338,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { } @Override - public List getCompletedMissions() {return this.completedMissions;} + public List getCompletedMissions() { + return this.completedMissions; + } public void clearAllClaimOwnership() { claimOwnership.clear(); diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java index 39daea88..214050b2 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java @@ -26,7 +26,8 @@ public abstract class MemoryFactions extends Factions { } else { Faction faction = factions.get("0"); if (!faction.getTag().equalsIgnoreCase(TL.WILDERNESS.toString())) faction.setTag(TL.WILDERNESS.toString()); - if (!faction.getDescription().equalsIgnoreCase(TL.WILDERNESS_DESCRIPTION.toString())) faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString()); + if (!faction.getDescription().equalsIgnoreCase(TL.WILDERNESS_DESCRIPTION.toString())) + faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString()); } // Make sure the safe zone faction exists @@ -38,7 +39,8 @@ public abstract class MemoryFactions extends Factions { } else { Faction faction = factions.get("-1"); if (!faction.getTag().equalsIgnoreCase(TL.SAFEZONE.toString())) faction.setTag(TL.SAFEZONE.toString()); - if (!faction.getDescription().equalsIgnoreCase(TL.SAFEZONE_DESCRIPTION.toString())) faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString()); + if (!faction.getDescription().equalsIgnoreCase(TL.SAFEZONE_DESCRIPTION.toString())) + faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString()); // if SafeZone has old pre-1.6.0 name, rename it to remove troublesome " " if (faction.getTag().contains(" ")) faction.setTag(TL.SAFEZONE.toString()); } @@ -52,7 +54,8 @@ public abstract class MemoryFactions extends Factions { } else { Faction faction = factions.get("-2"); if (!faction.getTag().equalsIgnoreCase(TL.WARZONE.toString())) faction.setTag(TL.WARZONE.toString()); - if (!faction.getDescription().equalsIgnoreCase(TL.WARZONE_DESCRIPTION.toString())) faction.setDescription(TL.WARZONE_DESCRIPTION.toString()); + if (!faction.getDescription().equalsIgnoreCase(TL.WARZONE_DESCRIPTION.toString())) + faction.setDescription(TL.WARZONE_DESCRIPTION.toString()); // if WarZone has old pre-1.6.0 name, rename it to remove troublesome " " if (faction.getTag().contains(" ")) faction.setTag(TL.WARZONE.toString()); } @@ -89,7 +92,7 @@ public abstract class MemoryFactions extends Factions { if (lendiff < best || best == 0) best = lendiff; - bestMatch = faction; + bestMatch = faction; } return bestMatch; } diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java b/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java index d1011a9b..78720e85 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java @@ -1,6 +1,5 @@ package com.massivecraft.factions.zcore.persist.json; -import com.google.common.base.Function; import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; diff --git a/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java b/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java index 33ecedde..9a47d421 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java @@ -47,7 +47,7 @@ public class PermUtil { public boolean has(CommandSender me, String perm, boolean informSenderIfNot) { if (has(me, perm)) return true; - else if (informSenderIfNot && me != null) + else if (informSenderIfNot && me != null) me.sendMessage(this.getForbiddenMessage(perm)); return false; } diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TL.java b/src/main/java/com/massivecraft/factions/zcore/util/TL.java index 343cde2e..9ba6dc38 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TL.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TL.java @@ -242,6 +242,14 @@ public enum TL { COMMAND_CLAIM_DENIED("&c&l[!]&7 You &cdo not &7have &cpermission&7 to &cclaim&7 in a radius."), COMMAND_CLAIM_DESCRIPTION("Claim land from where you are standing"), + COMMAND_CLAIMFILL_DESCRIPTION("Claim land filling in a gap in claims"), + COMMAND_CLAIMFILL_ABOVEMAX("&cThe maximum limit for claim fill is %s."), + COMMAND_CLAIMFILL_ALREADYCLAIMED("&cCannot claim fill using already claimed land!"), + COMMAND_CLAIMFILL_TOOFAR("&cThis fill would exceed the maximum distance of %.2f"), + COMMAND_CLAIMFILL_PASTLIMIT("&cThis claim would exceed the limit!"), + COMMAND_CLAIMFILL_NOTENOUGHLANDLEFT("%s &cdoes not have enough land left to make %d claims"), + COMMAND_CLAIMFILL_TOOMUCHFAIL("&cAborting claim fill after %d failures"), + COMMAND_CLAIMLINE_INVALIDRADIUS("&c&l[!]&7 If you &cspecify&7 a distance, it must be at least &c1&7."), COMMAND_CLAIMLINE_DENIED("&c&l[!]&7 You &cdo not &7have&c permission&7 to claim in a line."), COMMAND_CLAIMLINE_DESCRIPTION("Claim land in a straight line."), @@ -298,6 +306,11 @@ public enum TL { COMMAND_CREATE_CREATEDLOG(" created a new faction: "), COMMAND_CREATE_DESCRIPTION("Create a new faction"), + + COMMAND_DELHOME_SUCCESS("%1$s has deleted your faction home"), + COMMAND_DELHOME_DESCRIPTION("delete home of your faction"), + + COMMAND_CHECK_DESCRIPTION("manage your factions check system!"), CHECK_BUFFERS_CHECK("\n &c&lFaction Walls&7 » &bCheck Your Buffers! \n"), CHECK_WALLS_CHECK("\n &c&lFaction Walls&7 » &bCheck Your Walls! \n"), @@ -377,6 +390,7 @@ public enum TL { COMMAND_DESCRIPTION_DESCRIPTION("Change the faction description"), COMMAND_DISBAND_IMMUTABLE("&c&l[!]&7 &7You &ccannot&7 disband &2Wilderness&7,&e SafeZone&7, or &4WarZone."), + COMMAND_DISBAND_TOO_YOUNG("&c&l[!] &7Your Faction is too young to withdraw money like this!"), COMMAND_DISBAND_MARKEDPERMANENT("&c&l[!]&7 This faction is designated as&c permanent&7, so you cannot disband it."), COMMAND_DISBAND_BROADCAST_YOURS("&c&l[!]&7 &c%1$s&7 disbanded your &cfaction."), COMMAND_DISBAND_BROADCAST_GENERIC("&c&l[!]&7 The Faction &c%1$s&7 was disbanded."), @@ -1091,7 +1105,7 @@ public enum TL { GENERIC_YOUMUSTBE("&cYour must be atleast %1$s to do this!"), GENERIC_MEMBERONLY("&cYou must be in a faction to do this!"), - // MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"), + // MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"), MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"), MISSION_ALREAD_COMPLETED("&c&l[!] &7You may not restart a mission you have already completed"), MISSION_MISSION_ACTIVE("&c&l[!] &7This mission is currently active!"), diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b4500df1..081e2efc 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -171,6 +171,7 @@ scoreboard: - " &8» &cYour Balance&7: &f{balance}" - "&7&m---------------------------" + #Formatted ONLY When A User is NOT in a Faction factionless-enabled: true factionless: - "&7&m--------------------------" @@ -404,6 +405,7 @@ help: - '&c/f points &8- &7Check your factions points.' - '&c/f invsee &8- &7Check a faction members inventory.' - '&c/f stealth &8- &7Go into stealth mode to not disable enemies flight.' + - '&7&m--------------------&r &e/f help &7&m-----------------------' ############################################################ # +------------------------------------------------------+ # # | F Permission GUI | # @@ -594,8 +596,8 @@ fwarp-gui: # | Faction Creation/Disband Broadcast | # # +------------------------------------------------------+ # ############################################################ -faction-creation-broadcast: true -faction-disband-broadcast: true +faction-creation-broadcast: true #Disabling this will not make faction creation broadcasts appear in chat. +faction-disband-broadcast: true #Disabling this will not make faction disband broadcasts appear in chat. ############################################################ # +------------------------------------------------------+ # @@ -604,7 +606,7 @@ faction-disband-broadcast: true ############################################################ #Everything else from display names to lores, is managed by lang.yml, so edit it there f-check: - gui-rows: 3 + gui-rows: 3 #Rows for the check gui wall-check: Type: COBBLESTONE slot: 10 @@ -620,13 +622,16 @@ f-check: # | Faction Invisibility | # # +------------------------------------------------------+ # ############################################################ -See-Invisible-Faction-Members: false +#This option is to see if another faction member can see their faction members that have the invisible potion effect +See-Invisible-Faction-Members: false #ONLY WHEN SCOREBOARD IS ENABLED + ############################################################ # +------------------------------------------------------+ # # | Faction Inventory See | # # +------------------------------------------------------+ # ############################################################ +#This option is the ability to see other faction members inventories f-inventory-see: Enabled: true ############################################################ @@ -634,6 +639,7 @@ f-inventory-see: # | Faction Alt Accounts | # # +------------------------------------------------------+ # ############################################################ +#Faction Alts for extra power, sand printing, afking spawners f-alts: Enabled: true @@ -658,6 +664,7 @@ frules: # | Faction TNT Bank | # # +------------------------------------------------------+ # ############################################################ +#Faction Tnt Resolved Around A Virtual TNT Bank With Upgrades If Enabled ftnt: Enabled: true Bank-Limit: 250000 @@ -667,6 +674,7 @@ ftnt: # | Faction Discord | # # +------------------------------------------------------+ # ############################################################ +#This option allows factions to set their discord link to their specific faction fdiscord: Enabled: true @@ -675,6 +683,7 @@ fdiscord: # | Faction PayPal | # # +------------------------------------------------------+ # ############################################################ +#This option allows factions to set their paypal link to their specific faction fpaypal: Enabled: true @@ -683,6 +692,7 @@ fpaypal: # | Faction Checkpoints | # # +------------------------------------------------------+ # ############################################################ +#This option is for a quick fast and in a hurry teleport to raids etc. checkpoints: Enabled: true @@ -691,6 +701,7 @@ checkpoints: # | Faction Near | # # +------------------------------------------------------+ # ############################################################ +#This option is to allow faction members to be seen via /f near fnear: Enabled: true Radius: 50 @@ -700,6 +711,7 @@ fnear: # | Faction Shop | # # +------------------------------------------------------+ # ############################################################ +#Faction Shop is 100% configurable (See More in shop.yml) F-Shop: Enabled: true GUI: @@ -764,6 +776,7 @@ f-disband-gui: # | Faction GracePeriod | # # +------------------------------------------------------+ # ############################################################ +#This option will deny all explosions f-grace: Enabled: true @@ -895,6 +908,8 @@ ffocus: # | Faction Vault | # # +------------------------------------------------------+ # ############################################################ +#Faction Vaults are a placeable chest that can be accessed +#While maintaining that factor it can still be raided by other factions. fvault: Enabled: true No-Hoppers-near-vault: true @@ -913,6 +928,8 @@ fvault: # | Faction Chest | # # +------------------------------------------------------+ # ############################################################ +#Faction Chests are a virtual chest based system that cannot be raided +#Used for storing items that equate to high value of the faction. fchest: Enabled: true Default-Size: 1 #In Rows @@ -1375,6 +1392,7 @@ Tntfill: enabled: true max-radius: 32 max-amount: 64 + Wild: Enabled: true # Time to wait in seconds #