Compare commits

..

84 Commits

Author SHA1 Message Date
Driftay
83a33c2222 Version Change 2020-01-07 15:38:43 -05:00
Driftay
c274918244 Removed everything shield wise for release with bug fixes 2020-01-07 15:37:46 -05:00
Driftay
57833bee13 Fixed TntFill (Again) -_- 2020-01-04 18:49:55 -05:00
Driftay
0a1346f1c2 Made Scoreboard Dummy Proof & Started Adding Shield Tasks Timers and Objects 2020-01-04 18:29:49 -05:00
Driftay
5145ae1714 Allowed players to continue using Essentials fly is Factions Fly is Disabled 2020-01-04 13:23:55 -05:00
Driftay
086ec3e145 Allowed Custom Heads to be in Faction Upgrades 2020-01-04 12:42:53 -05:00
Driftay
d538502457 Added Enchanting on Level 1 or Higher for Upgrades 2020-01-04 12:26:23 -05:00
Driftay
978782e2fe Remade Faction GUI 2020-01-04 12:23:10 -05:00
Driftay
ce1004d318 Removed Stream Code lol 2020-01-04 11:29:44 -05:00
Driftay
3545253844 Version Change 2020-01-03 18:53:52 -05:00
Driftay
ad69019ba6 Fixed F Chest Logging 2020-01-03 18:53:01 -05:00
Driftay
b8f6a05538 Re-added Mis-deleted code 2020-01-03 10:55:22 -05:00
Driftay
98b40d325a Fixed Chest Error, and Fixed Unban TL Translation 2020-01-03 05:04:12 -05:00
Driftay
8f2e58733d Decided to remove alot of open and closing brackets for no reason lol 2020-01-02 10:35:54 -05:00
Driftay
ae17f3d788 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2020-01-02 05:02:56 -05:00
DroppingAnvil
a71bbd5b14 remove unused import. 2020-01-01 20:04:02 -06:00
DroppingAnvil
05e1a7297c Change any command (: also refixed tntfill 2020-01-01 19:59:31 -06:00
Driftay
1f9965b13a Fixed NPE Throwing From Console Disband 2020-01-01 02:34:59 -05:00
Driftay
fb32d2155b Fixed Error being thrown with FRenameEvent 2020-01-01 02:11:20 -05:00
Driftay
4c90bae87c F Reserve System ReAdded 2019-12-31 02:56:45 -05:00
Driftay
05cfd5d8b0 Added AutoUpdating FMap on Click to Claim 2019-12-31 02:20:33 -05:00
Driftay
b2fdcd5649 Fixed Click To Claim FLog 2019-12-31 01:45:33 -05:00
Driftay
f4bfa83e24 Added FLog For Click to Claim Map 2019-12-31 01:42:22 -05:00
Driftay
4222dd9689 Added FLog For Claiming Single Chunk 2019-12-31 01:40:04 -05:00
Driftay
ccb2dae890 Version Change 2019-12-31 01:15:30 -05:00
Driftay
f7297c96c4 Flog Material & Slot Fixed 2019-12-31 00:20:00 -05:00
Driftay
87f0810914 Fixed WorldEdit Player Cast 2019-12-31 00:03:57 -05:00
Driftay
016c82fa85 FAudit Slots & Materials Configurable
Fixed IllegalPluginAccessException onDisable
2019-12-30 23:56:59 -05:00
Driftay
fad866cf33 Fixed Bow Boosting 2019-12-29 17:30:12 -05:00
Driftay
c3319ce109 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-12-29 17:27:03 -05:00
Driftay
ca5d7663f9 Added Default Size for F Chest 2019-12-29 17:26:29 -05:00
DroppingAnvil
cee9c1f4d7 Update README.md 2019-12-28 13:59:12 -06:00
DroppingAnvil
fb03d78234 Update README.md 2019-12-28 13:55:37 -06:00
Driftay
e0134d680e Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-12-28 04:58:52 -05:00
Driftay
8e855bc9bb More Audit Things + Code Cleanup + SaberException Added for Debugging 2019-12-28 04:58:33 -05:00
DroppingAnvil
2772d85603 Added check for Discord system during setup. 2019-12-26 15:25:47 -06:00
Driftay
acf06c78ed Removed Discord statTrace in Login Exception 2019-12-26 14:54:24 -05:00
Driftay
cda1610a58 Added Brand New F Audit Base. 2019-12-24 22:19:49 -05:00
Driftay
5d1e1ea6ed Version Change 2019-12-24 09:32:23 -05:00
Driftay
372eed65a0 Fixed OCD 2019-12-24 09:27:36 -05:00
Driftay
86f92a7fb0 [+] 1.15 Support Added!
[+] Greatly optmized ALOT of Commands!
[+] Removed Portal Travel Agent (Recoding)
[+] Added Administrator Command F Lookup
2019-12-24 09:19:43 -05:00
Driftay
897fdbf83a Added TL Fixture for Drain Description 2019-12-22 18:24:50 -05:00
Driftay
4e11234a08 Added F Drain Command (A Command which allows players with permission to obtain all the money in faction members balances.) 2019-12-22 18:21:17 -05:00
Driftay
3a22bb348e Fixed Spawner Breaking NPE 2019-12-22 01:03:47 -05:00
Driftay
91ca08e66b Fixed Co-Leader Default Permissions 2019-12-21 23:52:14 -05:00
Driftay
11d9f9230b Version Change 2019-12-21 22:05:01 -05:00
Driftay
38cf542d8c Fixed territoryBypassProtectedMaterials - 2 Maps were defined 2019-12-21 22:03:40 -05:00
DroppingAnvil
93b485aae8 Version change + /f wild permission added to permission kits
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-19 17:35:29 -06:00
DroppingAnvil
b9996a2250 Fix /f deinvite 2019-12-19 15:10:55 -08:00
Driftay
368a605d31 Format Code, Fixed 2 NPE's 2019-12-19 14:23:41 -05:00
DroppingAnvil
fec07b6fac Added a wilderness teleport command (/f wild) and fixed a few bugs
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-16 18:46:38 -06:00
DroppingAnvil
58e43b41cc CmdReload made more useful by changing how commands that can be disabled are added to the root. You can now get the instance of FCmdRoot, Recheck variable added commands, rebuild brigadierManager, and get the status of each command that can be disabled. CmdDebug now gets the status of variable added commands.
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-16 13:32:12 -06:00
DroppingAnvil
d5645f3b0a Revamped in-game Discord mention system.
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-15 19:37:12 -06:00
DroppingAnvil
fa10bf7003 Discord feature additions, Discord startup flow changed, /f debug added
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-12 04:48:00 -06:00
Driftay
ca9502a4b6 TL References Properly to Generic_Disabled 2019-12-03 05:16:37 -05:00
Driftay
0a60a581f5 Started Base For Custom GUI Handling 2019-12-02 22:31:58 -05:00
Driftay
faf245b870 Proper Shading Acknowledged 2019-12-02 21:32:09 -05:00
DroppingAnvil
f124877dba Fixed message issue with lang when promoting a player in a faction to Admin.
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-12-02 19:52:30 -06:00
Driftay
fc5befd7cc Proper Credit Noted 2019-12-02 20:12:58 -05:00
Driftay
d03ca58105 More Credit 2019-12-02 14:03:27 -05:00
Driftay
f437144fba Giving Credit 2019-12-02 13:55:38 -05:00
Driftay
9284707db6 Fixed ArrayIndexOutOfBounds Exception With Deinvite Command 2019-11-30 00:41:44 -05:00
Driftay
7b07e3ed23 Version 2.1.0 Implemented 2019-11-29 12:13:46 -05:00
Driftay
c0719ec4f5 Reverted final persistence 2019-11-29 05:12:07 -05:00
Driftay
c9fd86ef9e Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-11-29 04:59:20 -05:00
Driftay
939a60c611 Bunch of Econ, Lang.yml Additions 2019-11-29 04:58:59 -05:00
DroppingAnvil
36f22262c6 Added the ability to toggle titles when entering claims of a different faction
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-11-28 19:34:39 -06:00
Driftay
f5e9ce3d90 Fly Changes, And Message Persistence 2019-11-28 02:09:21 -05:00
DroppingAnvil
e244b469aa Update Permission.java 2019-11-25 01:20:07 -06:00
Driftay
5f80ecfa76 Fixed Permissions And Removed Shield Code From Main Branch to Avoid pointless runnables 2019-11-24 22:37:31 -05:00
Driftay
28517ef391 More to Shields & Mission Class Cleanup 2019-11-23 22:33:49 -05:00
Driftay
5744b7e28e Version Change 2019-11-22 04:56:18 -05:00
Driftay
f3b0dcdb7f Quick Fix With Fly Check Console Spam & Properly Defined Variables In TL for TNT command 2019-11-22 04:55:58 -05:00
Driftay
0b127cbe72 SyncSaving and Persistence with Unclaiming and Disbanding With Fly Checks 2019-11-21 09:38:15 -05:00
Driftay
4f6329996f Fixed Version Handling 2019-11-21 09:11:47 -05:00
Driftay
3710031b80 Fixed World Guard Initiation 2019-11-21 09:10:04 -05:00
Driftay
6c10cdd47d Version Change 2019-11-21 09:04:57 -05:00
Driftay
5eeb8a2020 Version Change 2019-11-21 08:52:16 -05:00
Driftay
fe5378e9d7 Massive Code Reformat (Fixed 4 Issues Brought up in Discord) 2019-11-21 08:50:51 -05:00
Driftay
e60d58e68b CoreProtect Persistence of ForEach 2019-11-21 08:07:55 -05:00
DroppingAnvil
649392363f Randomized missions implemented!
Signed-off-by: DroppingAnvil <dr0pping.4nvi1@gmail.com>
2019-11-18 17:06:05 -06:00
Driftay
1927f49221 Fixed CmdMoneyBalance ClassCastException 2019-11-17 11:17:08 -05:00
Driftay
9349a914ce Misc Changes 2019-11-16 04:25:34 -05:00
Driftay
f8e22896d5 Fixed NPE with FlyTask 2019-11-16 04:23:43 -05:00
274 changed files with 6312 additions and 2864 deletions

View File

@@ -36,8 +36,8 @@ Moving forward we plan to take all suggestions into consideration, as they come
We Plan on Releasing the latest and greatest factions/skyblock/prison plugins minecraft has to offer and wont settle for anything less
## Support
Our Discord is Currently In Progress of a Massive Overhaul, but we still encourage our community to join and express any concerns/questions/suggestions they may have!
https://discord.gg/37JvmM
Our Discord is Currently In Progress of a Massive Overhaul, but we still encourage our community to join and express any concerns/questions/suggestions they may have
https://Discord.Saber.pw
Look forward to a bright future and a journey with all of you!

23
pom.xml
View File

@@ -4,7 +4,7 @@
<groupId>com.massivecraft</groupId>
<artifactId>Factions</artifactId>
<version>1.6.9.5-U0.2.1-2.0.6-STABLE</version>
<version>1.6.9.5-2.2.5-RC</version>
<packaging>jar</packaging>
<name>SaberFactions</name>
@@ -41,6 +41,10 @@
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>net.dv8tion</pattern>
<shadedPattern>com.massivecraft.factions.shade.net.dv8tion</shadedPattern>
</relocation>
<relocation>
<pattern>mkremins.fanciful</pattern>
<shadedPattern>com.massivecraft.factions.shade.mkremins.fanciful</shadedPattern>
@@ -101,7 +105,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.13-R0.1-SNAPSHOT</version>
<version>1.15.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
@@ -381,17 +385,18 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>1.5.21</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>me.rayzr522</groupId>
<artifactId>jsonmessage</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.codemc.worldguardwrapper</groupId>
<artifactId>worldguardwrapper</artifactId>
<version>1.1.6-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.jagrosh</groupId>
<artifactId>jda-utilities-commons</artifactId>
@@ -406,6 +411,10 @@
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
<repository>
<id>mojang-repo</id>
<url>https://libraries.minecraft.net/</url>
</repository>
<repository>
<id>net.coreprotect</id>
<url>http://maven.playpro.com/</url>

View File

@@ -1,6 +1,7 @@
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;
@@ -98,12 +99,34 @@ 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;
public static boolean factionsDrainEnabled = false;
//RESERVE
public static boolean useReserveSystem = true;
//AUDIT
public static boolean useAuditSystem = true;
//DISCORD
public static boolean useDiscordSystem = false;
public static String discordBotToken = "<token here>";
public static String fromDiscordFactionChatPrefix = "&f[&dDiscord&f] ";
public static String avatarUrl = "http://cravatar.eu/helmavatar/%uuid%.png";
public static String webhookName = "SaberFactions Hook";
public static String mainGuildID = "<Discord Server ID here>";
public static String positiveReaction = "<Server emote here>";
public static String negativeReaction = "<Server emote here>";
public static Boolean restrictActionsWhenNotLinked = false;
public static Boolean leaderRoles = false;
public static String leaderRole = "<Leader Role ID>";
public static Boolean factionDiscordTags = false;
public static String factionTag = "(NAME) [FACTION]";
public static Boolean factionRoles = false;
public static List<Integer> factionRoleColor = new ArrayList<Integer>(){{
add(25);
add(162);
add(203);
}};
public static String factionRolePrefix = "✦";
public static String factionRoleSuffix = "✦";
// server logging options
public static boolean logFactionCreate = true;
public static boolean logFactionDisband = true;
@@ -115,6 +138,7 @@ public class Conf {
public static boolean logMoneyTransactions = true;
public static boolean logPlayerCommands = true;
// prevent some potential exploits
public static boolean denyFlightIfInNoClaimingWorld = false;
public static boolean preventCreeperGlitch = true;
public static boolean handleExploitObsidianGenerators = true;
public static boolean handleExploitEnderPearlClipping = true;
@@ -219,6 +243,7 @@ public class Conf {
public static boolean ownedMessageInsideTerritory = true;
public static boolean ownedMessageByChunk = false;
public static boolean pistonProtectionThroughDenyBuild = true;
public static Set<Material> loggableMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryProtectedMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryDenyUsageMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryProtectedMaterialsWhenOffline = EnumSet.noneOf(Material.class);
@@ -231,6 +256,11 @@ public class Conf {
public static Set<Material> territoryBypassProtectedMaterials = EnumSet.noneOf(Material.class);
// Dependency check
public static boolean dependencyCheck = true;
public static Set<Material> territoryCancelAndAllowItemUseMaterial = new HashSet<>();
public static Set<Material> territoryDenySwitchMaterials = new HashSet<>();
public static boolean allowCreeperEggingChests = true;
// Economy settings
public static boolean econEnabled = false;
public static String econUniverseAccount = "";
@@ -343,6 +373,7 @@ public class Conf {
// faction-<factionId>
public static int defaultMaxVaults = 0;
public static boolean disableFlightOnFactionClaimChange = true;
public static boolean sendFactionChangeMessage = true;
public static Backend backEnd = Backend.JSON;
@@ -388,11 +419,108 @@ public class Conf {
territoryEnemyDenyCommands.add("tpaccept");
territoryEnemyDenyCommands.add("tpa");
territoryDenySwitchMaterials.add(XMaterial.ACACIA_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BIRCH_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DARK_OAK_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.JUNGLE_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.OAK_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SPRUCE_FENCE_GATE.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ACACIA_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BIRCH_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DARK_OAK_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.JUNGLE_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.OAK_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SPRUCE_DOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DISPENSER.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.CHEST.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.TRAPPED_CHEST.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ACACIA_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BIRCH_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DARK_OAK_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.JUNGLE_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.OAK_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SPRUCE_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DROPPER.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.HOPPER.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ITEM_FRAME.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ACACIA_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BIRCH_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DARK_OAK_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.JUNGLE_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.OAK_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SPRUCE_TRAPDOOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.LEVER.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.COMPARATOR.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.REPEATER.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ACACIA_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BIRCH_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.DARK_OAK_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.JUNGLE_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.OAK_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SPRUCE_BUTTON.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.PURPLE_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.WHITE_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.MAGENTA_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.LIGHT_BLUE_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.CYAN_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BLUE_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BROWN_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.ORANGE_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.GREEN_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.RED_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.BLACK_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.GRAY_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.LIME_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.LIGHT_GRAY_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.PINK_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.YELLOW_SHULKER_BOX.parseMaterial());
territoryDenySwitchMaterials.add(XMaterial.SHULKER_BOX.parseMaterial());
// 1.14 Barrel is a container.
territoryDenySwitchMaterials.add(XMaterial.BARREL.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.GOLDEN_APPLE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.APPLE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.ENCHANTED_GOLDEN_APPLE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_BEEF.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_MUTTON.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_CHICKEN.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_COD.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_PORKCHOP.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_RABBIT.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.COOKED_SALMON.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.ENDER_PEARL.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.POTION.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.SPLASH_POTION.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.CREEPER_SPAWN_EGG.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.BOW.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.DIAMOND_HELMET.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.DIAMOND_CHESTPLATE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.DIAMOND_LEGGINGS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.DIAMOND_BOOTS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.IRON_HELMET.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.IRON_CHESTPLATE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.IRON_LEGGINGS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.IRON_BOOTS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.LEATHER_HELMET.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.LEATHER_CHESTPLATE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.LEATHER_LEGGINGS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.LEATHER_BOOTS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.CHAINMAIL_HELMET.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.CHAINMAIL_CHESTPLATE.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.CHAINMAIL_LEGGINGS.parseMaterial());
territoryCancelAndAllowItemUseMaterial.add(XMaterial.CHAINMAIL_BOOTS.parseMaterial());
/// TODO: Consider removing this in a future release, as permissions works just fine now
territoryProtectedMaterials.add(Material.BEACON);
// Config is not loading if value is empty ???
territoryBypassProtectedMaterials.add(Material.COOKIE);
territoryBypassProtectedMaterials.add(Material.CHEST);
territoryBypassProtectedMaterials.add(Material.TRAPPED_CHEST);
territoryDenyUsageMaterials.add(XMaterial.FIRE_CHARGE.parseMaterial());
territoryDenyUsageMaterials.add(Material.FLINT_AND_STEEL);
@@ -431,11 +559,14 @@ public class Conf {
safeZoneNerfedCreatureTypes.add(EntityType.ZOMBIE);
// Is this called lazy load?
defaultFactionPermissions.put("LEADER", new DefaultPermissions(true));
defaultFactionPermissions.put("COLEADER", new DefaultPermissions(true));
defaultFactionPermissions.put("MODERATOR", new DefaultPermissions(true));
defaultFactionPermissions.put("NORMAL MEMBER", new DefaultPermissions(false));
defaultFactionPermissions.put("RECRUIT", new DefaultPermissions(false));
defaultFactionPermissions.put("ALLY", new DefaultPermissions(false));
defaultFactionPermissions.put("ENEMY", new DefaultPermissions(false));
defaultFactionPermissions.put("TRUCE", new DefaultPermissions(false));
defaultFactionPermissions.put("NEUTRAL", new DefaultPermissions(false));
}
public static void load() {
@@ -446,6 +577,8 @@ public class Conf {
FactionsPlugin.getInstance().persist.save(i);
}
public static void saveSync() { FactionsPlugin.instance.persist.saveSync(i); }
public enum Backend {
JSON,
//MYSQL, TODO add MySQL storage

View File

@@ -14,7 +14,6 @@ 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 {
@@ -22,7 +21,6 @@ public class FLocation implements Serializable {
worldBorderClassPresent = true;
} catch (ClassNotFoundException ignored) {
}
worldBorderSupport = worldBorderClassPresent;
}
@@ -45,7 +43,7 @@ public class FLocation implements Serializable {
}
public FLocation(Location location) {
this(location.getWorld().getName(), blockToChunk(location.getBlockX()), blockToChunk(location.getBlockZ()));
this(Objects.requireNonNull(location.getWorld()).getName(), blockToChunk(location.getBlockX()), blockToChunk(location.getBlockZ()));
}
public FLocation(Player player) {
@@ -70,8 +68,8 @@ public class FLocation implements Serializable {
String worldName = string.substring(start, index);
start = index + 1;
index = string.indexOf(",", start);
int x = Integer.valueOf(string.substring(start, index));
int y = Integer.valueOf(string.substring(index + 1, string.length() - 1));
int x = Integer.parseInt(string.substring(start, index));
int y = Integer.parseInt(string.substring(index + 1, string.length() - 1));
return new FLocation(worldName, x, y);
}
@@ -152,6 +150,8 @@ public class FLocation implements Serializable {
return "" + x + "," + z;
}
public String formatXAndZ(String splitter) { return chunkToBlock(this.x) + "x" + splitter + " " + chunkToBlock(this.z) + "z"; }
//----------------------------------------------//
// Misc Geometry
//----------------------------------------------//
@@ -178,9 +178,9 @@ public class FLocation implements Serializable {
}
public boolean isInChunk(Location loc) {
if (loc == 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;
}
@@ -192,18 +192,23 @@ public class FLocation implements Serializable {
* @return whether this location is outside of the border
*/
public boolean isOutsideWorldBorder(int buffer) {
if (!worldBorderSupport) {
return false;
}
if (!worldBorderSupport) return false;
WorldBorder border = getWorld().getWorldBorder();
Chunk chunk = border.getCenter().getChunk();
Location center = border.getCenter();
double size = border.getSize();
int lim = FLocation.chunkToRegion((int) border.getSize()) - buffer;
int diffX = chunk.getX() - x;
int diffZ = chunk.getZ() - z;
int bufferBlocks = buffer << 4;
return (diffX > lim || diffZ > lim) || (-diffX >= lim || -diffZ >= lim);
double borderMinX = (center.getX() - size / 2.0D) + bufferBlocks;
double borderMinZ = (center.getZ() - size / 2.0D) + bufferBlocks;
double borderMaxX = (center.getX() + size / 2.0D) - bufferBlocks;
double borderMaxZ = (center.getZ() + size / 2.0D) - bufferBlocks;
int chunkMinX = this.x << 4;
int chunkMaxX = chunkMinX | 15;
int chunkMinZ = this.z << 4;
int chunkMaxZ = chunkMinZ | 15;
return (chunkMinX >= borderMaxX) || (chunkMinZ >= borderMaxZ) || (chunkMaxX <= borderMinX) || (chunkMaxZ <= borderMinZ);
}
//----------------------------------------------//
@@ -213,10 +218,7 @@ public class FLocation implements Serializable {
double radiusSquared = radius * radius;
Set<FLocation> ret = new LinkedHashSet<>();
if (radius <= 0) {
return ret;
}
if (radius <= 0) return ret;
int xfrom = (int) Math.floor(this.x - radius);
int xto = (int) Math.ceil(this.x + radius);
int zfrom = (int) Math.floor(this.z - radius);
@@ -230,7 +232,6 @@ public class FLocation implements Serializable {
}
}
}
return ret;
}
@@ -246,13 +247,8 @@ public class FLocation implements Serializable {
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof FLocation)) {
return false;
}
if (obj == this) return true;
if (!(obj instanceof FLocation)) return false;
FLocation that = (FLocation) obj;
return this.x == that.x && this.z == that.z && (Objects.equals(this.worldName, that.worldName));
}

View File

@@ -7,6 +7,7 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.WarmUpUtil;
import mkremins.fanciful.FancyMessage;
import net.dv8tion.jda.core.entities.User;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
@@ -30,6 +31,48 @@ public interface FPlayer extends EconomyParticipator {
boolean hasNotificationsEnabled();
/**
* 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
@@ -218,7 +261,7 @@ public interface FPlayer extends EconomyParticipator {
int getDeaths();
void takeMoney(int amt);
boolean takeMoney(int amt);
boolean hasMoney(int amt);

View File

@@ -441,4 +441,7 @@ public interface Faction extends EconomyParticipator {
void paypalSet(String paypal);
// -------------------------------
// Shields
// -------------------------------
}

View File

@@ -4,15 +4,17 @@ import ch.njol.skript.Skript;
import ch.njol.skript.SkriptAddon;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.massivecraft.factions.cmd.CmdAutoHelp;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.FCmdRoot;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.cmd.*;
import com.massivecraft.factions.cmd.audit.FChestListener;
import com.massivecraft.factions.cmd.audit.FLogManager;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.cmd.check.CheckTask;
import com.massivecraft.factions.cmd.check.WeeWooTask;
import com.massivecraft.factions.cmd.chest.AntiChestListener;
import com.massivecraft.factions.cmd.reserve.ListParameterizedType;
import com.massivecraft.factions.cmd.reserve.ReserveObject;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.discord.DiscordListener;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.integration.dynmap.EngineDynmap;
@@ -29,7 +31,7 @@ import com.massivecraft.factions.zcore.MPlugin;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Permissable;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.fupgrades.*;
import com.massivecraft.factions.zcore.fupgrades.UpgradesListener;
import com.massivecraft.factions.zcore.util.TextUtil;
import me.lucko.commodore.CommodoreProvider;
import net.milkbowl.vault.economy.Economy;
@@ -37,8 +39,6 @@ import net.milkbowl.vault.permission.Permission;
import org.bukkit.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
@@ -51,6 +51,8 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import java.io.*;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
@@ -89,6 +91,9 @@ public class FactionsPlugin extends MPlugin {
private boolean mvdwPlaceholderAPIManager = false;
private Listener[] eventsListener;
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
private Worldguard wg;
private FLogManager fLogManager;
private List<ReserveObject> reserveObjects;
public FactionsPlugin() {
@@ -118,25 +123,19 @@ public class FactionsPlugin extends MPlugin {
}
public void playSoundForAll(String sound) {
for (Player pl : Bukkit.getOnlinePlayers()) {
playSound(pl, sound);
}
for (Player pl : Bukkit.getOnlinePlayers()) playSound(pl, sound);
}
public void playSoundForAll(List<String> sounds) {
for (Player pl : Bukkit.getOnlinePlayers()) {
playSound(pl, sounds);
}
for (Player pl : Bukkit.getOnlinePlayers()) playSound(pl, sounds);
}
public void playSound(Player p, List<String> sounds) {
for (String sound : sounds) {
playSound(p, sound);
}
for (String sound : sounds) playSound(p, sound);
}
public void playSound(Player p, String sound) {
float pitch = Float.valueOf(sound.split(":")[1]);
float pitch = Float.parseFloat(sound.split(":")[1]);
sound = sound.split(":")[0];
p.playSound(p.getLocation(), Sound.valueOf(sound), pitch, 5.0F);
}
@@ -170,9 +169,7 @@ public class FactionsPlugin extends MPlugin {
migrateFPlayerLeaders();
log("==== End Setup ====");
if (!preEnable()) {
return;
}
if (!preEnable()) return;
this.loadSuccessful = false;
if (!new File(this.getDataFolder() + "/config.yml").exists()) {
@@ -183,6 +180,7 @@ public class FactionsPlugin extends MPlugin {
PermissionList.generateFile();
// Load Conf from disk
Conf.load();
fLogManager = new FLogManager();
//Dependency checks
if (Conf.dependencyCheck && (!Bukkit.getPluginManager().isPluginEnabled("Vault") && !Bukkit.getPluginManager().isPluginEnabled("Essentials"))) {
divider();
@@ -194,7 +192,7 @@ public class FactionsPlugin extends MPlugin {
return;
}
//Update their config if needed
Updater.updateIfNeeded(getConfig());
// Updater.updateIfNeeded(getConfig());
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
FactionsPlugin.econ = rsp.getProvider();
com.massivecraft.factions.integration.Essentials.setup();
@@ -209,20 +207,16 @@ public class FactionsPlugin extends MPlugin {
fPlayer.resetFactionData(false);
continue;
}
if (fPlayer.isAlt()) {
faction.addAltPlayer(fPlayer);
} else {
faction.addFPlayer(fPlayer);
}
if (fPlayer.isAlt()) faction.addAltPlayer(fPlayer);
else faction.addFPlayer(fPlayer);
}
if (getConfig().getBoolean("enable-faction-flight", true)) UtilFly.run();
if (getConfig().getBoolean("enable-faction-flight", true)) {
UtilFly.run();
}
Board.getInstance().load();
Board.getInstance().clean();
//Load command aliases
Aliases.load();
// Add Base Commands
this.cmdBase = new FCmdRoot();
this.cmdAutoHelp = new CmdAutoHelp();
@@ -230,9 +224,7 @@ public class FactionsPlugin extends MPlugin {
Econ.setup();
setupPermissions();
if (Conf.worldGuardChecking || Conf.worldGuardBuildPriority) {
Worldguard.init(this);
}
if (Conf.worldGuardChecking || Conf.worldGuardBuildPriority) wg = new Worldguard();
EngineDynmap.getInstance().init();
@@ -244,9 +236,7 @@ public class FactionsPlugin extends MPlugin {
log("Minecraft Version 1.9 or higher found, using non packet based particle API");
}
if (getConfig().getBoolean("enable-faction-flight")) {
factionsFlight = true;
}
if (getConfig().getBoolean("enable-faction-flight")) factionsFlight = true;
if (getServer().getPluginManager().getPlugin("Skript") != null) {
log("Skript was found! Registering FactionsPlugin Addon...");
@@ -260,21 +250,19 @@ public class FactionsPlugin extends MPlugin {
}
if (Conf.useCheckSystem) {
int minute = 1200;
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 3), 0L, (long) (minute * 3));
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 5), 0L, (long) (minute * 5));
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 10), 0L, (long) (minute * 10));
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 15), 0L, (long) (minute * 15));
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 30), 0L, (long) (minute * 30));
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 3), 0L, minute * 3);
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 5), 0L, minute * 5);
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 10), 0L, minute * 10);
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 15), 0L, minute * 15);
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 30), 0L, minute * 30);
this.getServer().getScheduler().runTaskTimer(this, CheckTask::cleanupTask, 0L, 1200L);
this.getServer().getScheduler().runTaskTimerAsynchronously(this, new WeeWooTask(this), 600L, 600L);
}
if(Conf.useDiscordSystem && !Conf.discordBotToken.equals("<token here>")) {
new FactionChatHandler(this);
} else {
System.out.println("\n\n\n SABER-FACTIONS-DISCORD-INTEGRATION - You are not using Discord integration features, set conf.json option useDiscordSystem to true and put a valid token in before using!\n\n\n");
}
//Setup Discord Bot
new Discord(this);
ShopConfig.setup();
fLogManager.loadLogs(this);
getServer().getPluginManager().registerEvents(factionsPlayerListener = new FactionsPlayerListener(), this);
@@ -284,9 +272,10 @@ public class FactionsPlugin extends MPlugin {
new FactionsEntityListener(),
new FactionsExploitListener(),
new FactionsBlockListener(),
new FUpgradesGUI(),
new UpgradesListener(),
new MissionHandler(this),
new FChestListener(),
new MenuListener(),
new AntiChestListener()
};
@@ -296,7 +285,25 @@ public class FactionsPlugin extends MPlugin {
this.getCommand(refCommand).setExecutor(cmdBase);
if (!CommodoreProvider.isSupported()) this.getCommand(refCommand).setTabCompleter(this);
reserveObjects = new ArrayList<>();
String path = Paths.get(this.getDataFolder().getAbsolutePath()).toAbsolutePath().toString() + File.separator + "reserves.json";
File file = new File(path);
try {
String json;
if (!file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
json = String.join("", Files.readAllLines(Paths.get(file.getPath()))).replace("\n", "").replace("\r", "");
if (json.equalsIgnoreCase("")) {
Files.write(Paths.get(path), "[]".getBytes());
json = "[]";
}
reserveObjects = this.getGsonBuilder().create().fromJson(json, new ListParameterizedType(ReserveObject.class));
if (reserveObjects == null) reserveObjects = new ArrayList<>();
} catch (Exception e) {
e.printStackTrace();
}
if (getDescription().getFullName().contains("BETA")) {
divider();
System.out.println("You are using a BETA version of the plugin!");
@@ -353,7 +360,6 @@ public class FactionsPlugin extends MPlugin {
try {
BufferedReader br = new BufferedReader(new FileReader(fplayerFile));
System.out.println("Migrating old players.json file.");
String line;
while ((line = br.readLine()) != null) {
if (line.contains("\"role\": \"ADMIN\"")) {
@@ -385,9 +391,7 @@ public class FactionsPlugin extends MPlugin {
private boolean setupPermissions() {
try {
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
if (rsp != null) {
perms = rsp.getProvider();
}
if (rsp != null) perms = rsp.getProvider();
} catch (NoClassDefFoundError ex) {
return false;
}
@@ -416,7 +420,7 @@ public class FactionsPlugin extends MPlugin {
.registerTypeAdapterFactory(EnumTypeAdapter.ENUM_FACTORY);
}
private void divider() {
public void divider() {
System.out.println(" .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-");
System.out.println(" / / \\ \\ / / \\ \\ / / \\ \\ / / \\ \\ / / \\ \\ / / \\ \\ / / \\ \\ / / \\");
System.out.println("`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-'");
@@ -425,11 +429,8 @@ public class FactionsPlugin extends MPlugin {
@Override
public void onDisable() {
// only save data if plugin actually completely loaded successfully
if (this.loadSuccessful) {
// Dont save, as this is kind of pointless, as the /f config command manually saves.
// So any edits done are saved, this way manual edits to json can go through.
// Conf.save();
}
if (this.loadSuccessful) Conf.saveSync();
if (AutoLeaveTask != null) {
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
@@ -437,13 +438,16 @@ public class FactionsPlugin extends MPlugin {
}
DiscordListener.saveGuilds();
super.onDisable();
try {
fLogManager.saveLogs();
} catch (Exception e) {
e.printStackTrace();
}
}
public void startAutoLeaveTask(boolean restartIfRunning) {
if (AutoLeaveTask != null) {
if (!restartIfRunning) {
return;
}
if (!restartIfRunning) return;
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
}
@@ -495,9 +499,7 @@ public class FactionsPlugin extends MPlugin {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] split) {
if (split.length == 0) {
return handleCommand(sender, "/f help", false);
}
if (split.length == 0) return handleCommand(sender, "/f help", false);
// otherwise, needs to be handled; presumably another plugin directly ran the command
String cmd = Conf.baseCommandAliases.isEmpty() ? "/f" : "/" + Conf.baseCommandAliases.get(0);
@@ -510,8 +512,6 @@ public class FactionsPlugin extends MPlugin {
// Must be a LinkedList to prevent UnsupportedOperationException.
List<String> argsList = new LinkedList<>(Arrays.asList(args));
CommandContext context = new CommandContext(sender, argsList, alias);
String cmd = Conf.baseCommandAliases.isEmpty() ? "/f" : "/" + Conf.baseCommandAliases.get(0);
// String cmdValid = (cmd + " " + TextUtil.implode(context.args, " ")).trim();
List<FCommand> commandsList = cmdBase.subCommands;
FCommand commandsEx = cmdBase;
List<String> completions = new ArrayList<>();
@@ -540,16 +540,12 @@ public class FactionsPlugin extends MPlugin {
}
}
String lastArg = args[args.length - 1].toLowerCase();
completions = completions.stream()
.filter(m -> m.toLowerCase().startsWith(lastArg))
.collect(Collectors.toList());
return completions;
} else {
String lastArg = args[args.length - 1].toLowerCase();
for (Role value : Role.values()) completions.add(value.nicename);
for (Relation value : Relation.values()) completions.add(value.nicename);
// The stream and foreach from the old implementation looped 2 times, by looping all players -> filtered -> looped filter and added -> filtered AGAIN at the end.
@@ -562,22 +558,6 @@ public class FactionsPlugin extends MPlugin {
}
}
public void createTimedHologram(final Location location, String text, Long timeout) {
ArmorStand as = (ArmorStand) location.add(0.5, 1, 0.5).getWorld().spawnEntity(location, EntityType.ARMOR_STAND); //Spawn the ArmorStand
as.setVisible(false); //Makes the ArmorStand invisible
as.setGravity(false); //Make sure it doesn't fall
as.setCanPickupItems(false); //I'm not sure what happens if you leave this as it is, but you might as well disable it
as.setCustomName(FactionsPlugin.instance.color(text)); //Set this to the text you want
as.setCustomNameVisible(true); //This makes the text appear no matter if your looking at the entity or not
final ArmorStand armorStand = as;
Bukkit.getScheduler().scheduleSyncDelayedTask(FactionsPlugin.instance, () -> {
armorStand.remove();
getLogger().info("Removing Hologram.");
}
, timeout * 20);
}
// -------------------------------------------- //
// Functions for other plugins to hook into
@@ -604,11 +584,8 @@ public class FactionsPlugin extends MPlugin {
// Does player have Faction Chat enabled? If so, chat plugins should preferably not do channels,
// local chat, or anything else which targets individual recipients, so Faction Chat can be done
public boolean isPlayerFactionChatting(Player player) {
if (player == null) {
return false;
}
if (player == null) return false;
FPlayer me = FPlayers.getInstance().getByPlayer(player);
return me != null && me.getChatMode().isAtLeast(ChatMode.ALLIANCE);
}
@@ -629,15 +606,11 @@ public class FactionsPlugin extends MPlugin {
public String getPlayerFactionTagRelation(Player speaker, Player listener) {
String tag = "~";
if (speaker == null) {
return tag;
}
if (speaker == null) return tag;
FPlayer me = FPlayers.getInstance().getByPlayer(speaker);
if (me == null) {
return tag;
}
if (me == null) return tag;
// if listener isn't set, or config option is disabled, give back uncolored tag
if (listener == null || !Conf.chatTagRelationColored) {
tag = me.getChatTag().trim();
@@ -645,29 +618,28 @@ public class FactionsPlugin extends MPlugin {
FPlayer you = FPlayers.getInstance().getByPlayer(listener);
if (you == null) {
tag = me.getChatTag().trim();
} else // everything checks out, give the colored tag
{
} else { // everything checks out, give the colored tag
tag = me.getChatTag(you).trim();
}
}
if (tag.isEmpty()) {
tag = "~";
}
if (tag.isEmpty()) tag = "~";
return tag;
}
public FLogManager getFlogManager() {
return fLogManager;
}
public void logFactionEvent(Faction faction, FLogType type, String... arguments) {
this.fLogManager.log(faction, type, arguments);
}
// Get a player's title within their faction, mainly for usage by chat plugins for local/channel chat
public String getPlayerTitle(Player player) {
if (player == null) {
return "";
}
if (player == null) return "";
FPlayer me = FPlayers.getInstance().getByPlayer(player);
if (me == null) {
return "";
}
if (me == null) return "";
return me.getTitle().trim();
}
@@ -678,9 +650,7 @@ public class FactionsPlugin extends MPlugin {
//colors a string list
public List<String> colorList(List<String> lore) {
for (int i = 0; i <= lore.size() - 1; i++) {
lore.set(i, color(lore.get(i)));
}
for (int i = 0; i <= lore.size() - 1; i++) lore.set(i, color(lore.get(i)));
return lore;
}
@@ -689,14 +659,16 @@ public class FactionsPlugin extends MPlugin {
return Factions.getInstance().getFactionTags();
}
public List<ReserveObject> getFactionReserves() {
return this.reserveObjects;
}
// Get a list of all players in the specified faction
public Set<String> getPlayersInFaction(String factionTag) {
Set<String> players = new HashSet<>();
Faction faction = Factions.getInstance().getByTag(factionTag);
if (faction != null) {
for (FPlayer fplayer : faction.getFPlayers()) {
players.add(fplayer.getName());
}
for (FPlayer fplayer : faction.getFPlayers()) players.add(fplayer.getName());
}
return players;
}
@@ -706,9 +678,7 @@ public class FactionsPlugin extends MPlugin {
Set<String> players = new HashSet<>();
Faction faction = Factions.getInstance().getByTag(factionTag);
if (faction != null) {
for (FPlayer fplayer : faction.getFPlayersWhereOnline(true)) {
players.add(fplayer.getName());
}
for (FPlayer fplayer : faction.getFPlayersWhereOnline(true)) players.add(fplayer.getName());
}
return players;
}
@@ -728,9 +698,7 @@ public class FactionsPlugin extends MPlugin {
}
public void debug(Level level, String s) {
if (getConfig().getBoolean("debug", false)) {
getLogger().log(level, s);
}
if (getConfig().getBoolean("debug", false)) getLogger().log(level, s);
}
public FactionsPlayerListener getFactionsPlayerListener() {
@@ -740,4 +708,8 @@ public class FactionsPlugin extends MPlugin {
public void debug(String s) {
debug(Level.INFO, s);
}
public Worldguard getWg() {
return wg;
}
}

View File

@@ -0,0 +1,149 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FactionsPlugin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Aliases {
/**
* @author DroppingAnvil
*/
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
public static ArrayList<String> alts_invite = new ArrayList<>(Collections.singletonList("invite"));
public static ArrayList<String> alts_kick = new ArrayList<>(Collections.singletonList("kick"));
public static ArrayList<String> audit = new ArrayList<>(Arrays.asList("audit", "log", "logs"));
public static ArrayList<String> check = new ArrayList<>(Arrays.asList("check"));
public static ArrayList<String> weewoo = new ArrayList<>(Collections.singletonList("weewoo"));
public static ArrayList<String> chest = new ArrayList<>(Arrays.asList("chest", "pv"));
public static ArrayList<String> claim_auto = new ArrayList<>(Collections.singletonList("autoclaim"));
public static ArrayList<String> claim_claim = new ArrayList<>(Collections.singletonList("claim"));
public static ArrayList<String> claim_at = new ArrayList<>(Collections.singletonList("claimat"));
public static ArrayList<String> claim_line = new ArrayList<>(Arrays.asList("claimline", "cl"));
public static ArrayList<String> claim_corner = new ArrayList<>(Arrays.asList("corner"));
public static ArrayList<String> unclaim_all_safe = new ArrayList<>(Arrays.asList("safeunclaimall", "safedeclaimall"));
public static ArrayList<String> unclaim_unclaim = new ArrayList<>(Arrays.asList("unclaim", "declaim"));
public static ArrayList<String> unclaim_all_unsafe = new ArrayList<>(Arrays.asList("unclaimall", "declaimall"));
public static ArrayList<String> unclaim_all_war = new ArrayList<>(Arrays.asList("warunclaimall", "wardeclaimall"));
public static ArrayList<String> money_money = new ArrayList<>(Arrays.asList("money", "bank"));
public static ArrayList<String> money_balance = new ArrayList<>(Arrays.asList("b", "balance"));
public static ArrayList<String> money_deposit = new ArrayList<>(Arrays.asList("d", "deposit"));
public static ArrayList<String> money_transfer_Ff = new ArrayList<>(Collections.singletonList("ff"));
public static ArrayList<String> money_transfer_Fp = new ArrayList<>(Collections.singletonList("fp"));
public static ArrayList<String> money_transfer_Pf = new ArrayList<>(Collections.singletonList("pf"));
public static ArrayList<String> money_withdraw = new ArrayList<>(Arrays.asList("w", "withdraw"));
public static ArrayList<String> grace = new ArrayList<>(Collections.singletonList("grace"));
public static ArrayList<String> logout = new ArrayList<>(Collections.singletonList("logout"));
public static ArrayList<String> points_points = new ArrayList<>(Collections.singletonList("points"));
public static ArrayList<String> points_add = new ArrayList<>(Collections.singletonList("add"));
public static ArrayList<String> points_remove = new ArrayList<>(Collections.singletonList("remove"));
public static ArrayList<String> points_set = new ArrayList<>(Collections.singletonList("set"));
public static ArrayList<String> relation_ally = new ArrayList<>(Collections.singletonList("ally"));
public static ArrayList<String> relation_enemy = new ArrayList<>(Collections.singletonList("enemy"));
public static ArrayList<String> relation_neutral = new ArrayList<>(Collections.singletonList("neutral"));
public static ArrayList<String> relation_truce = new ArrayList<>(Collections.singletonList("truce"));
public static ArrayList<String> reserve = new ArrayList<>(Collections.singletonList("reserve"));
public static ArrayList<String> roles_demote = new ArrayList<>(Collections.singletonList("demote"));
public static ArrayList<String> roles_promote = new ArrayList<>(Collections.singletonList("ally"));
public static ArrayList<String> tnt_tnt = new ArrayList<>(Collections.singletonList("tnt"));
public static ArrayList<String> tnt_tntfill = new ArrayList<>(Collections.singletonList("tntfill"));
public static ArrayList<String> wild = new ArrayList<>(Collections.singletonList("wild"));
public static ArrayList<String> admin = new ArrayList<>(Arrays.asList("admin", "setadmin", "leader", "setleader"));
public static ArrayList<String> ahome = new ArrayList<>(Collections.singletonList("ahome"));
public static ArrayList<String> announce = new ArrayList<>(Arrays.asList("ann", "announce"));
public static ArrayList<String> help = new ArrayList<>(Arrays.asList("help", "h", "?"));
public static ArrayList<String> ban_ban = new ArrayList<>(Collections.singletonList("ban"));
public static ArrayList<String> ban_banlist = new ArrayList<>(Arrays.asList("banlist", "bans", "banl"));
public static ArrayList<String> banner = new ArrayList<>(Collections.singletonList("banner"));
public static ArrayList<String> boom = new ArrayList<>(Arrays.asList("noboom", "explosions", "toggleexplosions"));
public static ArrayList<String> bypass = new ArrayList<>(Collections.singletonList("bypass"));
public static ArrayList<String> chat = new ArrayList<>(Arrays.asList("chat", "c"));
public static ArrayList<String> chatspy = new ArrayList<>(Collections.singletonList("chatspy"));
public static ArrayList<String> checkpoint = new ArrayList<>(Arrays.asList("checkp", "checkpoint", "cpoint"));
public static ArrayList<String> coleader = new ArrayList<>(Arrays.asList("coleader", "setcoleader", "co", "setco"));
public static ArrayList<String> config = new ArrayList<>(Collections.singletonList("config"));
public static ArrayList<String> convert = new ArrayList<>(Collections.singletonList("convert"));
public static ArrayList<String> coords = new ArrayList<>(Arrays.asList("coords", "coord"));
public static ArrayList<String> create = new ArrayList<>(Collections.singletonList("create"));
public static ArrayList<String> debug = new ArrayList<>(Collections.singletonList("debug"));
public static ArrayList<String> deinvite = new ArrayList<>(Arrays.asList("deinvite", "deinv"));
public static ArrayList<String> deletefwarp = new ArrayList<>(Arrays.asList("delwarp", "dw", "deletewarp"));
public static ArrayList<String> description = new ArrayList<>(Arrays.asList("desc", "description"));
public static ArrayList<String> disband = new ArrayList<>(Collections.singletonList("disband"));
public static ArrayList<String> discord_discord = new ArrayList<>(Collections.singletonList("discord"));
public static ArrayList<String> drain = new ArrayList<>(Collections.singletonList("drain"));
public static ArrayList<String> global = new ArrayList<>(Arrays.asList("gchat", "global", "globalchat"));
public static ArrayList<String> fly = new ArrayList<>(Collections.singletonList("fly"));
public static ArrayList<String> focus = new ArrayList<>(Collections.singletonList("focus"));
public static ArrayList<String> warp = new ArrayList<>(Arrays.asList("warp", "warps"));
public static ArrayList<String> getvault = new ArrayList<>(Collections.singletonList("getvault"));
public static ArrayList<String> home = new ArrayList<>(Collections.singletonList("home"));
public static ArrayList<String> inspect = new ArrayList<>(Arrays.asList("inspect", "ins"));
public static ArrayList<String> invsee = new ArrayList<>(Arrays.asList("invsee", "inventorysee"));
public static ArrayList<String> invite = new ArrayList<>(Arrays.asList("invite", "inv"));
public static ArrayList<String> join = new ArrayList<>(Collections.singletonList("join"));
public static ArrayList<String> kick = new ArrayList<>(Collections.singletonList("kick"));
public static ArrayList<String> killholograms = new ArrayList<>(Collections.singletonList("killholos"));
public static ArrayList<String> leave = new ArrayList<>(Collections.singletonList("leave"));
public static ArrayList<String> list = new ArrayList<>(Arrays.asList("list", "ls"));
public static ArrayList<String> lock = new ArrayList<>(Collections.singletonList("lock"));
public static ArrayList<String> logins = new ArrayList<>(Arrays.asList("logins", "login", "logouts"));
public static ArrayList<String> lookup = new ArrayList<>(Collections.singletonList("lookup"));
public static ArrayList<String> lowPower = new ArrayList<>(Collections.singletonList("lowpower"));
public static ArrayList<String> map_map = new ArrayList<>(Collections.singletonList("map"));
public static ArrayList<String> map_height = new ArrayList<>(Arrays.asList("mapheight", "mh"));
public static ArrayList<String> mod = new ArrayList<>(Arrays.asList("mod", "setmod", "officer", "setofficer"));
public static ArrayList<String> modifyPower = new ArrayList<>(Arrays.asList("mp", "pm", "modpower", "modifypower"));
public static ArrayList<String> near = new ArrayList<>(Arrays.asList("near", "nearby"));
public static ArrayList<String> open = new ArrayList<>(Collections.singletonList("open"));
public static ArrayList<String> owner_owner = new ArrayList<>(Collections.singletonList("owner"));
public static ArrayList<String> owner_list = new ArrayList<>(Collections.singletonList("ownerlist"));
public static ArrayList<String> paypal_see = new ArrayList<>(Arrays.asList("paypal", "seepaypal"));
public static ArrayList<String> paypal_set = new ArrayList<>(Collections.singletonList("setpaypal"));
public static ArrayList<String> peaceful = new ArrayList<>(Collections.singletonList("peaceful"));
public static ArrayList<String> perm = new ArrayList<>(Arrays.asList("perm", "perms", "permission", "permissions"));
public static ArrayList<String> permanent_faction = new ArrayList<>(Collections.singletonList("permanent"));
public static ArrayList<String> permanent_power = new ArrayList<>(Collections.singletonList("permanentpower"));
public static ArrayList<String> titles = new ArrayList<>(Collections.singletonList("titles"));
public static ArrayList<String> power_power = new ArrayList<>(Arrays.asList("pow", "power"));
public static ArrayList<String> power_boost = new ArrayList<>(Collections.singletonList("powerboost"));
public static ArrayList<String> reload = new ArrayList<>(Collections.singletonList("reload"));
public static ArrayList<String> rules = new ArrayList<>(Arrays.asList("r", "rule", "rules"));
public static ArrayList<String> saveAll = new ArrayList<>(Arrays.asList("save", "saveall"));
public static ArrayList<String> scoreboard = new ArrayList<>(Arrays.asList("sb", "scoreboard"));
public static ArrayList<String> seeChunk = new ArrayList<>(Arrays.asList("sc", "seechunk"));
public static ArrayList<String> discord_see = new ArrayList<>(Collections.singletonList("seediscord"));
public static ArrayList<String> discord_set = new ArrayList<>(Collections.singletonList("setdiscord"));
public static ArrayList<String> setBanner = new ArrayList<>(Collections.singletonList("setbanner"));
public static ArrayList<String> setDefaultRole = new ArrayList<>(Arrays.asList("defaultrole", "def", "default", "defaultrank"));
public static ArrayList<String> setWarp = new ArrayList<>(Arrays.asList("sw", "setwarp"));
public static ArrayList<String> setHome = new ArrayList<>(Collections.singletonList("sethome"));
public static ArrayList<String> setMaxVaults = new ArrayList<>(Arrays.asList("smv", "setmaxvaults"));
public static ArrayList<String> show_show = new ArrayList<>(Arrays.asList("show", "who"));
public static ArrayList<String> show_claims = new ArrayList<>(Arrays.asList("showclaim", "showclaims"));
public static ArrayList<String> show_invites = new ArrayList<>(Collections.singletonList("showinvites"));
public static ArrayList<String> spawnerlock = new ArrayList<>(Arrays.asList("lockspawners", "spawnerlock"));
public static ArrayList<String> status = new ArrayList<>(Arrays.asList("s", "status"));
public static ArrayList<String> stealth = new ArrayList<>(Arrays.asList("stealth", "ninja"));
public static ArrayList<String> strikes_strikes = new ArrayList<>(Collections.singletonList("strikes"));
public static ArrayList<String> strikes_give = new ArrayList<>(Collections.singletonList("give"));
public static ArrayList<String> strikes_info = new ArrayList<>(Collections.singletonList("info"));
public static ArrayList<String> strikes_set = new ArrayList<>(Collections.singletonList("set"));
public static ArrayList<String> strikes_take = new ArrayList<>(Collections.singletonList("take"));
public static ArrayList<String> stuck = new ArrayList<>(Arrays.asList("stuck", "halp!"));
public static ArrayList<String> tag = new ArrayList<>(Arrays.asList("tag", "rename"));
public static ArrayList<String> title = new ArrayList<>(Collections.singletonList("title"));
public static ArrayList<String> toggleAllianceChat = new ArrayList<>(Arrays.asList("tac", "ac", "togglealliancechat"));
public static ArrayList<String> top = new ArrayList<>(Arrays.asList("t", "top"));
public static ArrayList<String> tpBanner = new ArrayList<>(Collections.singletonList("tpbanner"));
public static ArrayList<String> unban = new ArrayList<>(Collections.singletonList("unban"));
public static ArrayList<String> upgrades = new ArrayList<>(Arrays.asList("upgrades", "upgrade"));
public static ArrayList<String> vault = new ArrayList<>(Collections.singletonList("vault"));
public static ArrayList<String> viewChest = new ArrayList<>(Arrays.asList("viewchest", "viewpv"));
private static transient Aliases i = new Aliases();
public static void load() {
FactionsPlugin.getInstance().persist.loadOrSaveDefault(i, Aliases.class, "aliases");
}
}

View File

@@ -15,6 +15,10 @@ import java.util.Map;
public class BrigadierManager {
/**
* @author FactionsUUID Team
*/
public Commodore commodore;
public LiteralArgumentBuilder<Object> brigadier = LiteralArgumentBuilder.literal("factions");

View File

@@ -4,6 +4,10 @@ import com.mojang.brigadier.builder.ArgumentBuilder;
public interface BrigadierProvider {
/**
* @author FactionsUUID Team
*/
ArgumentBuilder<Object, ?> get(ArgumentBuilder<Object, ?> parent);
}

View File

@@ -8,9 +8,13 @@ import org.bukkit.event.player.PlayerTeleportEvent;
public class CmdAHome extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdAHome() {
super();
this.aliases.add("ahome");
this.aliases.addAll(Aliases.ahome);
this.requiredArgs.add("player");

View File

@@ -3,20 +3,24 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
public class CmdAdmin extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdAdmin() {
super();
this.aliases.add("admin");
this.aliases.add("setadmin");
this.aliases.add("leader");
this.aliases.add("setleader");
this.aliases.addAll(Aliases.admin);
this.requiredArgs.add("player");
@@ -25,59 +29,69 @@ public class CmdAdmin extends FCommand {
@Override
public void perform(CommandContext context) {
// Allows admins bypass this.
if (!context.fPlayer.isAdminBypassing() && !context.fPlayer.getRole().equals(Role.LEADER)) {
context.msg(TL.COMMAND_ADMIN_NOTADMIN);
return;
}
FPlayer fyou = context.argAsBestFPlayerMatch(0);
if (fyou == null) {
return;
}
boolean permAny = Permission.ADMIN_ANY.has(context.sender, false);
Faction targetFaction = fyou.getFaction();
if (targetFaction != context.faction && !permAny) {
context.msg(TL.COMMAND_ADMIN_NOTMEMBER, fyou.describeTo(context.fPlayer, true));
return;
}
if (fyou == context.fPlayer && !permAny) {
context.msg(TL.COMMAND_ADMIN_TARGETSELF);
return;
}
// only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
if (fyou.getFaction() != targetFaction) {
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(context.player), targetFaction, FPlayerJoinEvent.PlayerJoinReason.LEADER);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
if (context.player == null) {
context.msg(TL.GENERIC_PLAYERONLY);
return;
}
// Allows admins bypass this.
if (!context.fPlayer.isAdminBypassing() && !context.fPlayer.getRole().equals(Role.LEADER)) {
context.msg(TL.COMMAND_ADMIN_NOTADMIN);
return;
}
FPlayer fyou = context.argAsBestFPlayerMatch(0);
if (fyou == null) {
return;
}
}
FPlayer admin = targetFaction.getFPlayerAdmin();
boolean permAny = Permission.ADMIN_ANY.has(context.sender, false);
Faction targetFaction = fyou.getFaction();
// if target player is currently admin, demote and replace him
if (fyou == admin) {
targetFaction.promoteNewLeader();
context.msg(TL.COMMAND_ADMIN_DEMOTES, fyou.describeTo(context.fPlayer, true));
fyou.msg(TL.COMMAND_ADMIN_DEMOTED, context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fyou, true));
return;
}
if (targetFaction != context.faction && !permAny) {
context.msg(TL.COMMAND_ADMIN_NOTMEMBER, fyou.describeTo(context.fPlayer, true));
return;
}
// promote target player, and demote existing admin if one exists
if (admin != null) {
admin.setRole(Role.COLEADER);
}
fyou.setRole(Role.LEADER);
context.msg(TL.COMMAND_ADMIN_PROMOTES, fyou.describeTo(context.fPlayer, true));
if (fyou == context.fPlayer && !permAny) {
context.msg(TL.COMMAND_ADMIN_TARGETSELF);
return;
}
// Inform all players
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
fplayer.msg(TL.COMMAND_ADMIN_PROMOTED, context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fplayer, true), fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
}
// only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
if (fyou.getFaction() != targetFaction) {
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(context.player), targetFaction, FPlayerJoinEvent.PlayerJoinReason.LEADER);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
}
FPlayer admin = targetFaction.getFPlayerAdmin();
// if target player is currently admin, demote and replace him
if (fyou == admin) {
targetFaction.promoteNewLeader();
context.msg(TL.COMMAND_ADMIN_DEMOTES, fyou.describeTo(context.fPlayer, true));
fyou.msg(TL.COMMAND_ADMIN_DEMOTED, context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fyou, true));
return;
}
// promote target player, and demote existing admin if one exists
if (admin != null) {
admin.setRole(Role.COLEADER);
}
fyou.setRole(Role.LEADER);
context.msg(TL.COMMAND_ADMIN_PROMOTES, fyou.describeTo(context.fPlayer, true));
FactionsPlugin.instance.getFlogManager().log(targetFaction, FLogType.RANK_EDIT, context.fPlayer.getName(), fyou.getName(), ChatColor.RED + "Admin");
// Inform all players
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
fplayer.msg(TL.COMMAND_ADMIN_PROMOTED,
context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fplayer, true),
fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
}
});
}
public TL getUsageTranslation() {

View File

@@ -12,10 +12,13 @@ import org.bukkit.entity.Player;
public class CmdAnnounce extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdAnnounce() {
super();
this.aliases.add("ann");
this.aliases.add("announce");
this.aliases.addAll(Aliases.announce);
this.requiredArgs.add("message");

View File

@@ -8,10 +8,12 @@ import java.util.ArrayList;
public class CmdAutoHelp extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdAutoHelp() {
this.aliases.add("?");
this.aliases.add("h");
this.aliases.add("help");
this.aliases.addAll(Aliases.help);
this.setHelpShort("");

View File

@@ -2,9 +2,11 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.struct.BanInfo;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
@@ -13,9 +15,13 @@ import java.util.logging.Level;
public class CmdBan extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdBan() {
super();
this.aliases.add("ban");
this.aliases.addAll(Aliases.ban_ban);
this.requiredArgs.add("target");
@@ -75,6 +81,7 @@ public class CmdBan extends FCommand {
// Lets inform the people!
target.msg(TL.COMMAND_BAN_TARGET, context.faction.getTag(target.getFaction()));
FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.BANS, context.fPlayer.getName(), CC.Green + "banned", target.getName());
context.faction.msg(TL.COMMAND_BAN_BANNED, context.fPlayer.getName(), target.getName());
}

View File

@@ -13,11 +13,13 @@ import java.util.List;
public class CmdBanlist extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdBanlist() {
super();
this.aliases.add("banlist");
this.aliases.add("bans");
this.aliases.add("banl");
this.aliases.addAll(Aliases.ban_banlist);
this.optionalArgs.put("faction", "faction");

View File

@@ -13,9 +13,13 @@ import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta;
public class CmdBanner extends FCommand {
/**
* @author Illyria Team
*/
public CmdBanner() {
this.aliases.add("banner");
this.aliases.add("warbanner");
this.aliases.addAll(Aliases.banner);
this.requirements = new CommandRequirements.Builder(Permission.BANNER).playerOnly().memberOnly().build();
}
@@ -29,12 +33,10 @@ public class CmdBanner extends FCommand {
context.msg(TL.COMMAND_BANNER_NOBANNER);
return;
}
if (!context.fPlayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000))) {
if (!context.fPlayer.takeMoney(FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000))) {
context.msg(TL.COMMAND_BANNER_NOTENOUGHMONEY);
return;
}
this.takeMoney(context.fPlayer, FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000));
this.takeMoney(context.fPlayer, FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000));
ItemStack warBanner = context.fPlayer.getFaction().getBanner();
ItemMeta warmeta = warBanner.getItemMeta();
warmeta.setDisplayName(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fbanners.Item.Name")));
@@ -44,7 +46,7 @@ public class CmdBanner extends FCommand {
warBanner.setAmount(1);
context.player.getInventory().addItem(warBanner);
}
@Deprecated
public boolean hasMoney(FPlayer fme, int amt) {
Economy econ = FactionsPlugin.getInstance().getEcon();
if (econ.getBalance(fme.getPlayer()) >= amt) {
@@ -53,11 +55,10 @@ public class CmdBanner extends FCommand {
fme.msg(TL.COMMAND_BANNER_NOTENOUGHMONEY);
return false;
}
@Deprecated
public void takeMoney(FPlayer fme, int amt) {
if (this.hasMoney(fme, amt)) {
Economy econ = FactionsPlugin.getInstance().getEcon();
econ.withdrawPlayer(fme.getPlayer(), (double) amt);
fme.sendMessage(TL.COMMAND_BANNER_MONEYTAKE.toString().replace("{amount}", amt + ""));
}
}

View File

@@ -6,11 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdBoom extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdBoom() {
super();
this.aliases.add("noboom");
this.aliases.add("explosions");
this.aliases.add("toggleexplosions");
this.aliases.addAll(Aliases.boom);
//this.requiredArgs.add("");
this.optionalArgs.put("on/off", "flip");

View File

@@ -6,9 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdBypass extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdBypass() {
super();
this.aliases.add("bypass");
this.aliases.addAll(Aliases.bypass);
//this.requiredArgs.add("");
this.optionalArgs.put("on/off", "flip");

View File

@@ -10,10 +10,13 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
public class CmdChat extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdChat() {
super();
this.aliases.add("c");
this.aliases.add("chat");
this.aliases.addAll(Aliases.chat);
//this.requiredArgs.add("");
this.optionalArgs.put("mode", "next");

View File

@@ -6,9 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdChatSpy extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdChatSpy() {
super();
this.aliases.add("chatspy");
this.aliases.addAll(Aliases.chatspy);
this.optionalArgs.put("on/off", "flip");

View File

@@ -6,11 +6,14 @@ import com.massivecraft.factions.util.WarmUpUtil;
import com.massivecraft.factions.zcore.util.TL;
public class CmdCheckpoint extends FCommand {
/**
* @author Illyria Team
*/
public CmdCheckpoint() {
super();
this.aliases.add("checkp");
this.aliases.add("checkpoint");
this.aliases.add("cpoint");
this.aliases.addAll(Aliases.checkpoint);
this.optionalArgs.put("set", "");

View File

@@ -3,6 +3,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL;
@@ -10,12 +12,14 @@ import mkremins.fanciful.FancyMessage;
import org.bukkit.ChatColor;
public class CmdColeader extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdColeader() {
super();
this.aliases.add("co");
this.aliases.add("setcoleader");
this.aliases.add("coleader");
this.aliases.add("setco");
this.aliases.addAll(Aliases.coleader);
this.optionalArgs.put("player name", "name");
@@ -76,6 +80,7 @@ public class CmdColeader extends FCommand {
you.setRole(Role.COLEADER);
targetFaction.msg(TL.COMMAND_COLEADER_PROMOTED, you.describeTo(targetFaction, true));
context.msg(TL.COMMAND_COLEADER_PROMOTES, you.describeTo(context.fPlayer, true));
FactionsPlugin.instance.getFlogManager().log(targetFaction, FLogType.RANK_EDIT, context.fPlayer.getName(), you.getName(), ChatColor.RED + "Co-Leader");
}
}

View File

@@ -20,7 +20,7 @@ public class CmdConfig extends FCommand {
public CmdConfig() {
super();
this.aliases.add("config");
this.aliases.addAll(Aliases.config);
this.requiredArgs.add("setting");
this.requiredArgs.add("value");

View File

@@ -9,8 +9,12 @@ import org.bukkit.command.ConsoleCommandSender;
public class CmdConvert extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdConvert() {
this.aliases.add("convert");
this.aliases.addAll(Aliases.convert);
this.requiredArgs.add("[MYSQL|JSON]");
this.requirements = new CommandRequirements.Builder(Permission.CONVERT)

View File

@@ -7,10 +7,13 @@ import org.bukkit.Location;
public class CmdCoords extends FCommand {
/**
* @author Illyria Team
*/
public CmdCoords() {
super();
this.aliases.add("coords");
this.aliases.add("coord");
this.aliases.addAll(Aliases.coords);
this.requirements = new CommandRequirements.Builder(Permission.COORD)
.playerOnly()

View File

@@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.*;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.event.FactionCreateEvent;
import com.massivecraft.factions.integration.Econ;
@@ -8,16 +9,23 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.MiscUtil;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.exceptions.HierarchyException;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import java.util.ArrayList;
public class CmdCreate extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdCreate() {
super();
this.aliases.add("create");
this.aliases.addAll(Aliases.create);
this.requiredArgs.add("faction tag");
@@ -28,6 +36,10 @@ public class CmdCreate extends FCommand {
@Override
public void perform(CommandContext context) {
if (Conf.restrictActionsWhenNotLinked && !context.fPlayer.discordSetup()) {
context.player.sendMessage(ChatColor.translateAlternateColorCodes('&', TL.DISCORD_LINK_REQUIRED.toString()));
return;
}
String tag = context.argAsString(0);
if (context.fPlayer.hasFaction()) {
@@ -78,7 +90,6 @@ public class CmdCreate extends FCommand {
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(context.player), faction, FPlayerJoinEvent.PlayerJoinReason.CREATE);
Bukkit.getServer().getPluginManager().callEvent(joinEvent);
// join event cannot be cancelled or you'll have an empty faction
// finish setting up the FPlayer
context.fPlayer.setFaction(faction, false);
// We should consider adding the role just AFTER joining the faction.
@@ -90,6 +101,22 @@ public class CmdCreate extends FCommand {
follower.msg(TL.COMMAND_CREATE_CREATED, context.fPlayer.getName(), faction.getTag(follower));
}
}
//Discord
try {
if (Discord.useDiscord && context.fPlayer.discordSetup() && Discord.isInMainGuild(context.fPlayer.discordUser()) && Discord.mainGuild != null) {
Member m = Discord.mainGuild.getMember(context.fPlayer.discordUser());
if (Conf.factionRoles) {
Discord.mainGuild.getController().addSingleRoleToMember(m, Discord.createFactionRole(faction.getTag())).queue();
}
if (Conf.leaderRoles && Discord.leader != null) {
Discord.mainGuild.getController().addSingleRoleToMember(m, Discord.leader).queue();
}
if (Conf.factionDiscordTags) {
Discord.mainGuild.getController().setNickname(m, Discord.getNicknameString(context.fPlayer)).queue();
}
}
} catch (HierarchyException e) {System.out.print(e.getMessage());}
//End Discord
context.msg(TL.COMMAND_CREATE_YOUSHOULD, FactionsPlugin.getInstance().cmdBase.cmdDescription.getUsageTemplate(context));
if (Conf.econEnabled) Econ.setBalance(faction.getAccountId(), Conf.econFactionStartingBalance);
if (Conf.logFactionCreate)

View File

@@ -0,0 +1,66 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.discord.DiscordSetupAttempt;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
public class CmdDebug extends FCommand {
public CmdDebug() {
super();
this.aliases.add("debug");
this.requirements = new CommandRequirements.Builder(Permission.DEBUG).build();
}
@Override
public void perform(CommandContext context) {
FactionsPlugin.getInstance().divider();
System.out.print("----------Debug Info----------");
System.out.print("-------Main-------");
System.out.print("Server Version: " + FactionsPlugin.getInstance().getServer().getVersion());
System.out.print("Server Bukkit Version: " + FactionsPlugin.getInstance().getServer().getBukkitVersion());
System.out.print("SaberFactions Version: " + FactionsPlugin.getInstance().getDescription().getVersion());
System.out.print("Is Beta Version: " + (FactionsPlugin.getInstance().getDescription().getFullName().contains("BETA") ? "True" : "False"));
System.out.print("Players Online: " + Bukkit.getOnlinePlayers().size());
System.out.print("------Command------");
System.out.print("Discord Commands: " + FCmdRoot.instance.discordEnabled);
System.out.print("Check/WeeWoo Commands: " + FCmdRoot.instance.checkEnabled);
System.out.print("Mission Command: " + FCmdRoot.instance.missionsEnabled);
System.out.print("Shop Command: " + FCmdRoot.instance.fShopEnabled);
System.out.print("Inventory See Command: " + FCmdRoot.instance.invSeeEnabled);
System.out.print("Points Command: " + FCmdRoot.instance.fPointsEnabled);
System.out.print("Alts Command: " + FCmdRoot.instance.fAltsEnabled);
System.out.print("Grace Command: " + FCmdRoot.instance.fGraceEnabled);
System.out.print("Focus Command: " + FCmdRoot.instance.fFocusEnabled);
System.out.print("Fly Command: " + FCmdRoot.instance.fFlyEnabled);
System.out.print("PayPal Commands: " + FCmdRoot.instance.fPayPalEnabled);
System.out.print("Inspect Command: " + FCmdRoot.instance.coreProtectEnabled);
System.out.print("Internal FTOP Command: " + FCmdRoot.instance.internalFTOPEnabled);
System.out.print("----End Command----");
System.out.print("-----End Main-----");
System.out.print("------Discord------");
System.out.print("Discord Integration enabled in config: " + Discord.confUseDiscord);
System.out.print("Discord Integration enabled: " + Discord.useDiscord);
System.out.print("Setup attempts: " + Discord.setupLog.size());
System.out.print("FPlayers waiting to link: " + Discord.waitingLink.size());
System.out.print("Bot Token: " + (Discord.botToken == "<token here>" ? "Not Set" : "Set"));
System.out.print("JDA Null: " + (Discord.jda == null ? "True" : "False"));
System.out.print("Main Guild ID: " + Discord.mainGuildID);
System.out.print("Main Guild Null: " + (Discord.mainGuild == null ? "True" : "False"));
System.out.print("Emotes enabled: " + Discord.useEmotes);
System.out.print("Leader role null: " + (Discord.leader == null ? "True" : "False"));
System.out.print("Attempt Log:");
for (DiscordSetupAttempt d : Discord.setupLog) {System.out.print(d.getDifferentialFormatted() + " " + d.getSuccess() + " " + d.getReason());}
System.out.print("End Attempt Log");
System.out.print("----End Discord----");
System.out.print("--------End Debug Info--------");
FactionsPlugin.getInstance().divider();
context.fPlayer.msg(TL.COMMAND_DEBUG_PRINTED);
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DEBUG_DESCRIPTION;
}
}

View File

@@ -14,10 +14,13 @@ import org.bukkit.ChatColor;
public class CmdDeinvite extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdDeinvite() {
super();
this.aliases.add("deinvite");
this.aliases.add("deinv");
this.aliases.addAll(Aliases.deinvite);
this.optionalArgs.put("player name", "name");
@@ -28,51 +31,47 @@ public class CmdDeinvite extends FCommand {
@Override
public void perform(CommandContext context) {
// Check if arg 0 == null do you don't have
// `No player "null" could be found.` message.
if (context.args.get(0) == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
}
context.sendFancyMessage(msg);
return;
}
FPlayer you = context.argAsBestFPlayerMatch(0);
if (!context.fPlayer.isAdminBypassing()) {
Access access = context.faction.getAccess(context.fPlayer, PermissableAction.INVITE);
if (access != Access.ALLOW && context.fPlayer.getRole() != Role.LEADER) {
context.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
if (context.args.size() == 0) {
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
}
context.sendFancyMessage(msg);
return;
}
}
if (you == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
FPlayer you = context.argAsBestFPlayerMatch(0);
if (!context.fPlayer.isAdminBypassing()) {
Access access = context.faction.getAccess(context.fPlayer, PermissableAction.INVITE);
if (access != Access.ALLOW && context.fPlayer.getRole() != Role.LEADER) {
context.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
}
context.sendFancyMessage(msg);
return;
}
if (you.getFaction() == context.faction) {
context.msg(TL.COMMAND_DEINVITE_ALREADYMEMBER, you.getName(), context.faction.getTag());
context.msg(TL.COMMAND_DEINVITE_MIGHTWANT, FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
return;
}
if (you == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
if (context.faction.getInvites().isEmpty()) return;
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
}
context.sendFancyMessage(msg);
return;
}
context.faction.deinvite(you);
if (you.getFaction() == context.faction) {
context.msg(TL.COMMAND_DEINVITE_ALREADYMEMBER, you.getName(), context.faction.getTag());
context.msg(TL.COMMAND_DEINVITE_MIGHTWANT, FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
return;
}
you.msg(TL.COMMAND_DEINVITE_REVOKED, context.fPlayer.describeTo(you), context.faction.describeTo(you));
context.faction.msg(TL.COMMAND_DEINVITE_REVOKES, context.fPlayer.describeTo(context.faction), you.describeTo(context.faction));
context.faction.deinvite(you);
you.msg(TL.COMMAND_DEINVITE_REVOKED, context.fPlayer.describeTo(you), context.faction.describeTo(you));
context.faction.msg(TL.COMMAND_DEINVITE_REVOKES, context.fPlayer.describeTo(context.faction), you.describeTo(context.faction));
}
@Override

View File

@@ -7,11 +7,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdDelFWarp extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdDelFWarp() {
super();
this.aliases.add("delwarp");
this.aliases.add("dw");
this.aliases.add("deletewarp");
this.aliases.addAll(Aliases.deletefwarp);
this.requiredArgs.add("warp name");
this.requirements = new CommandRequirements.Builder(Permission.SETWARP)

View File

@@ -3,16 +3,22 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import com.massivecraft.factions.zcore.util.TextUtil;
import org.bukkit.Bukkit;
public class CmdDescription extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdDescription() {
super();
this.aliases.add("desc");
this.aliases.add("description");
this.aliases.addAll(Aliases.description);
this.requiredArgs.add("desc");
@@ -25,26 +31,29 @@ public class CmdDescription extends FCommand {
@Override
public void perform(CommandContext context) {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostDesc, TL.COMMAND_DESCRIPTION_TOCHANGE, TL.COMMAND_DESCRIPTION_FORCHANGE)) {
return;
}
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostDesc, TL.COMMAND_DESCRIPTION_TOCHANGE, TL.COMMAND_DESCRIPTION_FORCHANGE)) {
return;
}
// since "&" color tags seem to work even through plain old FPlayer.sendMessage() for some reason, we need to break those up
// And replace all the % because it messes with string formatting and this is easy way around that.
context.faction.setDescription(TextUtil.implode(context.args, " ").replaceAll("%", "").replaceAll("(&([a-f0-9klmnor]))", "& $2"));
// since "&" color tags seem to work even through plain old FPlayer.sendMessage() for some reason, we need to break those up
// And replace all the % because it messes with string formatting and this is easy way around that.
String desc = TextUtil.implode(context.args, " ").replaceAll("%", "").replaceAll("(&([a-f0-9klmnor]))", "& $2");
context.faction.setDescription(desc);
Bukkit.getScheduler().scheduleSyncDelayedTask(FactionsPlugin.instance, () -> FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.FDESC_EDIT, context.fPlayer.getName(), desc));
if (!Conf.broadcastDescriptionChanges) {
context.msg(TL.COMMAND_DESCRIPTION_CHANGED, context.faction.describeTo(context.fPlayer));
context.sendMessage(context.faction.getDescription());
return;
}
if (!Conf.broadcastDescriptionChanges) {
context.msg(TL.COMMAND_DESCRIPTION_CHANGED, context.faction.describeTo(context.fPlayer));
context.sendMessage(context.faction.getDescription());
return;
}
// Broadcast the description to everyone
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
fplayer.msg(TL.COMMAND_DESCRIPTION_CHANGES, context.faction.describeTo(fplayer));
fplayer.sendMessage(context.faction.getDescription()); // players can inject "&" or "`" or "<i>" or whatever in their description; &k is particularly interesting looking
}
// Broadcast the description to everyone
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
fplayer.msg(TL.COMMAND_DESCRIPTION_CHANGES, context.faction.describeTo(fplayer));
fplayer.sendMessage(context.faction.getDescription()); // players can inject "&" or "`" or "<i>" or whatever in their description; &k is particularly interesting looking
}
});
}
@Override

View File

@@ -16,19 +16,21 @@ import java.util.HashMap;
public class CmdDisband extends FCommand {
/**
* @author FactionsUUID Team
*/
//TODO: Add Disband Confirmation GUI
private static HashMap<String, String> disbandMap = new HashMap<>();
public CmdDisband() {
super();
this.aliases.add("disband");
this.aliases.addAll(Aliases.disband);
this.optionalArgs.put("faction tag", "yours");
this.requirements = new CommandRequirements.Builder(Permission.DISBAND)
.build();
}
@Override
@@ -78,18 +80,23 @@ public class CmdDisband extends FCommand {
if (FactionsPlugin.getInstance().getConfig().getBoolean("faction-disband-broadcast", true)) {
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers()) {
String amountString = context.sender instanceof ConsoleCommandSender ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(follower);
UtilFly.checkFly(context.fPlayer, Board.getInstance().getFactionAt(new FLocation(follower)));
if (follower.getFaction() == faction) {
follower.msg(TL.COMMAND_DISBAND_BROADCAST_YOURS, amountString);
if (!follower.canFlyAtLocation() && FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
follower.setFFlying(false, false);
}
} else {
follower.msg(TL.COMMAND_DISBAND_BROADCAST_NOTYOURS, amountString, faction.getTag(follower));
}
}
faction.disband(context.player, PlayerDisbandReason.COMMAND);
if(FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) context.fPlayer.setFFlying(false, false);
} else {
faction.disband(context.player, PlayerDisbandReason.COMMAND);
context.player.sendMessage(String.valueOf(TL.COMMAND_DISBAND_PLAYER));
}
faction.disband(context.player, PlayerDisbandReason.COMMAND);
if (!context.fPlayer.canFlyAtLocation() && FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
context.fPlayer.setFFlying(false, false);
}
}
}

View File

@@ -0,0 +1,40 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import java.util.Random;
public class CmdDiscord extends FCommand {
public CmdDiscord() {
super();
this.aliases.addAll(Aliases.discord_discord);
this.requirements = new CommandRequirements.Builder(Permission.DISCORD)
.playerOnly()
.build();
}
@Override
public void perform(CommandContext context) {
if (context.fPlayer.discordSetup()) {
context.fPlayer.msg(TL.DISCORD_ALREADY_LINKED, context.fPlayer.discordUser().getName());
} else {
if (Discord.waitingLink.containsValue(context.fPlayer)) {
context.fPlayer.msg(TL.DISCORD_CODE_SENT, Discord.waitingLinkk.get(context.fPlayer), Discord.mainGuild.getSelfMember().getEffectiveName());
return;
}
Integer random = new Random().nextInt(9999);
while (Discord.waitingLink.containsValue(random)) {
random = new Random().nextInt(9999);
}
Discord.waitingLink.put(random, context.fPlayer);
Discord.waitingLinkk.put(context.fPlayer, random);
context.fPlayer.msg(TL.DISCORD_CODE_SENT, String.valueOf(random));
}
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DISCORD_DESCRIPTION;
}
}

View File

@@ -0,0 +1,64 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
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;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
/**
* @author Saser
*/
public class CmdDrain extends FCommand{
public CmdDrain(){
this.aliases.addAll(Aliases.drain);
this.requirements = new CommandRequirements.Builder(Permission.DRAIN)
.playerOnly()
.memberOnly()
.withAction(PermissableAction.DRAIN)
.build();
}
@Override
public void perform(CommandContext context) {
if (!Conf.factionsDrainEnabled) {
context.fPlayer.msg(TL.GENERIC_DISABLED, "Factions Drain");
return;
}
double totalBalance = 0;
for(FPlayer fPlayer : context.faction.getFPlayers()) {
if(context.faction.getFPlayers().size() == 1){
context.fPlayer.msg(TL.COMMAND_DRAIN_NO_PLAYERS);
return;
}
if (FPlayers.getInstance().getByPlayer(context.player).equals(fPlayer)){
continue; // skip the command executor
}
double balance = FactionsPlugin.getInstance().getEcon().getBalance(fPlayer.getPlayer());
if (balance > 0) {
FactionsPlugin.getInstance().getEcon().depositPlayer(context.player, balance);
FactionsPlugin.getInstance().getEcon().withdrawPlayer(fPlayer.getPlayer(), balance);
totalBalance = (totalBalance + balance);
}
}
context.fPlayer.msg(TL.COMMAND_DRAIN_RECIEVED_AMOUNT, commas(totalBalance));
}
public String commas(final double amount) {
final DecimalFormat formatter = new DecimalFormat("#,###.00");
return formatter.format(amount);
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DRAIN_DESCRIPTION;
}
}

View File

@@ -9,13 +9,15 @@ import java.util.UUID;
public class CmdFGlobal extends FCommand {
/**
* @author Trent
*/
public static List<UUID> toggled = new ArrayList<>();
public CmdFGlobal() {
super();
this.aliases.add("gchat");
this.aliases.add("global");
this.aliases.add("globalchat");
this.aliases.addAll(Aliases.global);
this.requirements = new CommandRequirements.Builder(Permission.GLOBALCHAT)
.playerOnly()

View File

@@ -14,10 +14,13 @@ import java.util.UUID;
public class CmdFWarp extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdFWarp() {
super();
this.aliases.add("warp");
this.aliases.add("warps");
this.aliases.addAll(Aliases.warp);
this.optionalArgs.put("warpname", "warpname");
this.optionalArgs.put("password", "password");

View File

@@ -19,15 +19,19 @@ import java.util.concurrent.ConcurrentHashMap;
public class CmdFly extends FCommand {
/**
* @author FactionsUUID Team
*/
public static ConcurrentHashMap<String, Boolean> flyMap = new ConcurrentHashMap<String, Boolean>();
public static int id = -1;
public static ConcurrentHashMap<String, Boolean> flyMap = new ConcurrentHashMap<>();
public static BukkitTask particleTask = null;
public static BukkitTask flyTask = null;
public CmdFly() {
super();
this.aliases.add("fly");
this.aliases.addAll(Aliases.fly);
this.optionalArgs.put("on/off", "flip");
this.requirements = new CommandRequirements.Builder(Permission.FLY)
@@ -38,7 +42,7 @@ public class CmdFly extends FCommand {
public static void startParticles() {
id = Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.getInstance(), () -> {
particleTask = Bukkit.getScheduler().runTaskTimerAsynchronously(FactionsPlugin.instance, () -> {
for (String name : flyMap.keySet()) {
Player player = Bukkit.getPlayer(name);
if (player == null) continue;
@@ -49,11 +53,10 @@ public class CmdFly extends FCommand {
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
fplayer.isVanished();
}
if (flyMap.keySet().size() == 0) {
Bukkit.getScheduler().cancelTask(id);
id = -1;
if (flyMap.isEmpty()) {
particleTask.cancel();
particleTask = null;
}
}, 10L, 3L);
}
@@ -98,6 +101,9 @@ public class CmdFly extends FCommand {
}
public static boolean checkBypassPerms(FPlayer fme, Player me, Faction toFac) {
if (Conf.denyFlightIfInNoClaimingWorld && !Conf.worldsNoClaiming.isEmpty() && Conf.worldsNoClaiming.stream().anyMatch(me.getWorld().getName()::equalsIgnoreCase))
return false;
if (toFac != fme.getFaction()) {
if (!me.hasPermission(Permission.FLY_WILD.node) && toFac.isWilderness() || !me.hasPermission(Permission.FLY_SAFEZONE.node) && toFac.isSafeZone() || !me.hasPermission(Permission.FLY_WARZONE.node) && toFac.isWarZone()) {
fme.msg(TL.COMMAND_FLY_NO_ACCESS, toFac.getTag(fme));
@@ -117,7 +123,7 @@ public class CmdFly extends FCommand {
return false;
}
if (!(me.hasPermission(Permission.FLY_NEUTRAL.node) || access == Access.ALLOW) && toFac.getRelationTo(fme.getFaction()) == Relation.NEUTRAL && !isSystemFaction(toFac)) {
if (!(me.hasPermission(Permission.FLY_NEUTRAL.node) || access == Access.ALLOW) && toFac.getRelationTo(fme.getFaction()) == Relation.NEUTRAL && !toFac.isSystemFaction()) {
fme.msg(TL.COMMAND_FLY_NO_ACCESS, toFac.getTag(fme));
return false;
}
@@ -126,11 +132,6 @@ public class CmdFly extends FCommand {
return true;
}
public static Boolean isSystemFaction(Faction faction) {
return faction.isSafeZone() ||
faction.isWarZone() ||
faction.isWilderness();
}
public static void checkTaskState() {
if (flyMap.isEmpty()) {
@@ -188,14 +189,21 @@ public class CmdFly extends FCommand {
}
if (fme.canFlyAtLocation())
if (fme.canFlyAtLocation()) {
context.doWarmUp(WarmUpUtil.Warmup.FLIGHT, TL.WARMUPS_NOTIFY_FLIGHT, "Fly", () -> {
fme.setFlying(true);
flyMap.put(fme.getPlayer().getName(), true);
if (particleTask == null) {
startParticles();
}
if (flyTask == null) {
startFlyCheck();
}
}, FactionsPlugin.getInstance().getConfig().getLong("warmups.f-fly", 0));
} else {
fme.msg(TL.COMMAND_FLY_NO_ACCESS, Board.getInstance().getFactionAt(fme.getLastStoodAt()).getTag());
}
}
@Override

View File

@@ -7,8 +7,13 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdFocus extends FCommand {
/**
* @author Driftay
*/
public CmdFocus() {
aliases.add("focus");
aliases.addAll(Aliases.focus);
requiredArgs.add("player");
@@ -21,7 +26,7 @@ public class CmdFocus extends FCommand {
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("ffocus.Enabled")) {
context.msg(TL.GENERIC_DISABLED);
context.msg(TL.GENERIC_DISABLED, "Faction Focus");
return;
}
FPlayer target = context.argAsFPlayer(0);

View File

@@ -9,9 +9,14 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class CmdGetVault extends FCommand {
/**
* @author Illyria Team
*/
public CmdGetVault() {
super();
this.aliases.add("getvault");
this.aliases.addAll(Aliases.getvault);
this.requirements = new CommandRequirements.Builder(Permission.GETVAULT)
.playerOnly()
@@ -22,7 +27,7 @@ public class CmdGetVault extends FCommand {
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fvault.Enabled")) {
context.fPlayer.sendMessage("This command is disabled!");
context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Vaults");
return;
}
Location vaultLocation = context.faction.getVault();
@@ -42,9 +47,9 @@ public class CmdGetVault extends FCommand {
return;
}
if (!context.fPlayer.takeMoney(amount)) {return;}
//success :)
context.fPlayer.takeMoney(amount);
context.player.getInventory().addItem(vault);
context.fPlayer.msg(TL.COMMAND_GETVAULT_RECEIVE);

View File

@@ -13,13 +13,15 @@ import java.util.List;
public class CmdHelp extends FCommand {
public ArrayList<ArrayList<String>> helpPages;
/**
* @author FactionsUUID Team
*/
public ArrayList<ArrayList<String>> helpPages;
//TODO: Add Help GUI
public CmdHelp() {
super();
this.aliases.add("help");
this.aliases.add("h");
this.aliases.add("?");
this.aliases.addAll(Aliases.help);
//this.requiredArgs.add("");
this.optionalArgs.put("page", "1");

View File

@@ -20,10 +20,14 @@ import java.util.List;
public class CmdHome extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdHome() {
super();
this.aliases.add("home");
this.optionalArgs.put("home", "faction-name");
this.aliases.addAll(Aliases.home);
this.optionalArgs.put("faction", "yours");
this.requirements = new CommandRequirements.Builder(Permission.HOME)
.playerOnly()

View File

@@ -4,11 +4,14 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdInspect extends FCommand {
/**
* @author Illyria Team
*/
public CmdInspect() {
super();
this.aliases.add("inspect");
this.aliases.add("ins");
this.aliases.addAll(Aliases.inspect);
this.requirements = new CommandRequirements.Builder(Permission.INSPECT)
.playerOnly()
.memberOnly()

View File

@@ -16,11 +16,14 @@ import java.util.Objects;
public class CmdInventorySee extends FCommand {
/**
* @author Driftay
*/
public CmdInventorySee() {
super();
this.aliases.add("invsee");
this.aliases.add("inventorysee");
this.aliases.addAll(Aliases.invsee);
this.requiredArgs.add("member name");
@@ -32,7 +35,7 @@ public class CmdInventorySee extends FCommand {
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("f-inventory-see.Enabled")) {
context.msg(TL.GENERIC_DISABLED);
context.msg(TL.GENERIC_DISABLED, "Inventory See");
return;
}

View File

@@ -3,7 +3,9 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage;
@@ -11,10 +13,13 @@ import org.bukkit.ChatColor;
public class CmdInvite extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdInvite() {
super();
this.aliases.add("invite");
this.aliases.add("inv");
this.aliases.addAll(Aliases.invite);
this.requiredArgs.add("player name");
@@ -64,11 +69,10 @@ public class CmdInvite extends FCommand {
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag())
.then(context.faction.describeTo(target)).tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString())
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag());
message.send(target.getPlayer());
}
context.faction.msg(TL.COMMAND_INVITE_INVITED, context.fPlayer.describeTo(context.faction, true), target.describeTo(context.faction));
FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.INVITES, context.fPlayer.getName(), CC.Green + "invited", target.getName());
}
@Override

View File

@@ -1,17 +1,28 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.*;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.zcore.fupgrades.UpgradeType;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.exceptions.HierarchyException;
import org.bukkit.Bukkit;
import java.util.Objects;
public class CmdJoin extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdJoin() {
super();
this.aliases.add("join");
this.aliases.addAll(Aliases.join);
this.requiredArgs.add("faction name");
this.optionalArgs.put("player", "you");
@@ -116,7 +127,19 @@ public class CmdJoin extends FCommand {
}
faction.deinvite(fplayer);
context.fPlayer.setRole(faction.getDefaultRole());
try {
context.fPlayer.setRole(faction.getDefaultRole());
FactionsPlugin.instance.logFactionEvent(faction, FLogType.INVITES, context.fPlayer.getName(), CC.Green + "joined", "the faction");
if (Discord.useDiscord && context.fPlayer.discordSetup() && Discord.isInMainGuild(context.fPlayer.discordUser()) && Discord.mainGuild != null) {
Member m = Discord.mainGuild.getMember(context.fPlayer.discordUser());
if (Conf.factionRoles) {
Discord.mainGuild.getController().addSingleRoleToMember(m, Objects.requireNonNull(Discord.createFactionRole(faction.getTag()))).queue();
}
if (Conf.factionDiscordTags) {
Discord.mainGuild.getController().setNickname(m, Discord.getNicknameString(context.fPlayer)).queue();
}
}
} catch (HierarchyException e) {System.out.print(e.getMessage());}
if (Conf.logFactionJoin) {
if (samePlayer) {

View File

@@ -4,9 +4,11 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage;
@@ -16,9 +18,13 @@ import org.bukkit.command.ConsoleCommandSender;
public class CmdKick extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdKick() {
super();
this.aliases.add("kick");
this.aliases.addAll(Aliases.kick);
this.optionalArgs.put("player name", "player name");
this.requirements = new CommandRequirements.Builder(Permission.KICK)
@@ -118,6 +124,7 @@ public class CmdKick extends FCommand {
if (toKick.getRole() == Role.LEADER) {
toKickFaction.promoteNewLeader();
}
FactionsPlugin.instance.logFactionEvent(toKickFaction, FLogType.INVITES, context.fPlayer.getName(), CC.Red + "kicked", toKick.getName());
toKickFaction.deinvite(toKick);
toKick.resetFactionData();
}

View File

@@ -4,9 +4,14 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdKillHolograms extends FCommand {
/**
* @author Illyria Team
*/
public CmdKillHolograms() {
super();
this.aliases.add("killholos");
this.aliases.addAll(Aliases.killholograms);
this.requiredArgs.add("radius");
this.requirements = new CommandRequirements.Builder(Permission.KILLHOLOS)

View File

@@ -1,13 +1,19 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.ChatColor;
public class CmdLeave extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdLeave() {
super();
this.aliases.add("leave");
this.aliases.addAll(Aliases.leave);
this.requirements = new CommandRequirements.Builder(Permission.LEAVE)
.playerOnly()

View File

@@ -14,12 +14,15 @@ import java.util.List;
public class CmdList extends FCommand {
/**
* @author FactionsUUID Team
*/
private String[] defaults = new String[3];
public CmdList() {
super();
this.aliases.add("list");
this.aliases.add("ls");
this.aliases.addAll(Aliases.list);
// default values in case user has old config
defaults[0] = "&e&m----------&r&e[ &2Faction List &9{pagenumber}&e/&9{pagecount} &e]&m----------";
@@ -39,74 +42,76 @@ public class CmdList extends FCommand {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostList, "to list the factions", "for listing the factions"))
return;
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
ArrayList<Faction> factionList = Factions.getInstance().getAllFactions();
factionList.remove(Factions.getInstance().getWilderness());
factionList.remove(Factions.getInstance().getSafeZone());
factionList.remove(Factions.getInstance().getWarZone());
ArrayList<Faction> factionList = Factions.getInstance().getAllFactions();
factionList.remove(Factions.getInstance().getWilderness());
factionList.remove(Factions.getInstance().getSafeZone());
factionList.remove(Factions.getInstance().getWarZone());
// remove exempt factions
if (context.fPlayer != null && context.fPlayer.getPlayer() != null && !context.fPlayer.getPlayer().hasPermission("factions.show.bypassexempt")) {
List<String> exemptFactions = FactionsPlugin.getInstance().getConfig().getStringList("show-exempt");
// remove exempt factions
if (context.fPlayer != null && context.fPlayer.getPlayer() != null && !context.fPlayer.getPlayer().hasPermission("factions.show.bypassexempt")) {
List<String> exemptFactions = FactionsPlugin.getInstance().getConfig().getStringList("show-exempt");
factionList.removeIf(next -> exemptFactions.contains(next.getTag()));
}
// Sort by total followers first
factionList.sort((f1, f2) -> {
int f1Size = f1.getFPlayers().size();
int f2Size = f2.getFPlayers().size();
if (f1Size < f2Size) {
return 1;
} else if (f1Size > f2Size) {
return -1;
factionList.removeIf(next -> exemptFactions.contains(next.getTag()));
}
return 0;
// Sort by total followers first
factionList.sort((f1, f2) -> {
int f1Size = f1.getFPlayers().size();
int f2Size = f2.getFPlayers().size();
if (f1Size < f2Size) {
return 1;
} else if (f1Size > f2Size) {
return -1;
}
return 0;
});
// Then sort by how many members are online now
factionList.sort((f1, f2) -> {
int f1Size = f1.getFPlayersWhereOnline(true).size();
int f2Size = f2.getFPlayersWhereOnline(true).size();
if (f1Size < f2Size) {
return 1;
} else if (f1Size > f2Size) {
return -1;
}
return 0;
});
ArrayList<String> lines = new ArrayList<>();
factionList.add(0, Factions.getInstance().getWilderness());
final int pageheight = 9;
int pagenumber = context.argAsInt(0, 1);
int pagecount = (factionList.size() / pageheight) + 1;
if (pagenumber > pagecount) {
pagenumber = pagecount;
} else if (pagenumber < 1) {
pagenumber = 1;
}
int start = (pagenumber - 1) * pageheight;
int end = start + pageheight;
if (end > factionList.size()) {
end = factionList.size();
}
String header = FactionsPlugin.getInstance().getConfig().getString("list.header", defaults[0]);
header = header.replace("{pagenumber}", String.valueOf(pagenumber)).replace("{pagecount}", String.valueOf(pagecount));
lines.add(FactionsPlugin.getInstance().txt.parse(header));
for (Faction faction : factionList.subList(start, end)) {
if (faction.isWilderness()) {
lines.add(FactionsPlugin.getInstance().txt.parse(TagUtil.parsePlain(faction, FactionsPlugin.getInstance().getConfig().getString("list.factionless", defaults[1]))));
continue;
}
lines.add(FactionsPlugin.getInstance().txt.parse(TagUtil.parsePlain(faction, context.fPlayer, FactionsPlugin.getInstance().getConfig().getString("list.entry", defaults[2]))));
}
context.sendMessage(lines);
});
// Then sort by how many members are online now
factionList.sort((f1, f2) -> {
int f1Size = f1.getFPlayersWhereOnline(true).size();
int f2Size = f2.getFPlayersWhereOnline(true).size();
if (f1Size < f2Size) {
return 1;
} else if (f1Size > f2Size) {
return -1;
}
return 0;
});
ArrayList<String> lines = new ArrayList<>();
factionList.add(0, Factions.getInstance().getWilderness());
final int pageheight = 9;
int pagenumber = context.argAsInt(0, 1);
int pagecount = (factionList.size() / pageheight) + 1;
if (pagenumber > pagecount) {
pagenumber = pagecount;
} else if (pagenumber < 1) {
pagenumber = 1;
}
int start = (pagenumber - 1) * pageheight;
int end = start + pageheight;
if (end > factionList.size()) {
end = factionList.size();
}
String header = FactionsPlugin.getInstance().getConfig().getString("list.header", defaults[0]);
header = header.replace("{pagenumber}", String.valueOf(pagenumber)).replace("{pagecount}", String.valueOf(pagecount));
lines.add(FactionsPlugin.getInstance().txt.parse(header));
for (Faction faction : factionList.subList(start, end)) {
if (faction.isWilderness()) {
lines.add(FactionsPlugin.getInstance().txt.parse(TagUtil.parsePlain(faction, FactionsPlugin.getInstance().getConfig().getString("list.factionless", defaults[1]))));
continue;
}
lines.add(FactionsPlugin.getInstance().txt.parse(TagUtil.parsePlain(faction, context.fPlayer, FactionsPlugin.getInstance().getConfig().getString("list.entry", defaults[2]))));
}
context.sendMessage(lines);
}
@Override

View File

@@ -6,6 +6,10 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdLock extends FCommand {
/**
* @author FactionsUUID Team
*/
// TODO: This solution needs refactoring.
/*
factions.lock:
@@ -15,11 +19,10 @@ public class CmdLock extends FCommand {
public CmdLock() {
super();
this.aliases.add("lock");
this.aliases.addAll(Aliases.lock);
this.optionalArgs.put("on/off", "flip");
this.requirements = new CommandRequirements.Builder(Permission.LOCK)
.playerOnly()
.build();
}

View File

@@ -5,12 +5,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdLogins extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdLogins() {
super();
this.aliases.add("login");
this.aliases.add("logins");
this.aliases.add("logout");
this.aliases.add("logouts");
this.aliases.addAll(Aliases.logins);
this.requirements = new CommandRequirements.Builder(Permission.MONITOR_LOGINS)
.playerOnly()

View File

@@ -0,0 +1,54 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import java.text.DecimalFormat;
import java.util.Set;
/**
* @author Saser
*/
public class CmdLookup extends FCommand {
private DecimalFormat format = new DecimalFormat("#.#");
public CmdLookup() {
super();
this.aliases.addAll(Aliases.lookup);
this.requiredArgs.add("faction name");
this.requirements = new CommandRequirements.Builder(Permission.LOOKUP)
.playerOnly()
.build();
}
@Override
public void perform(CommandContext context) {
Faction faction = context.argAsFaction(0);
if (faction == null) {
context.msg(TL.COMMAND_LOOKUP_INVALID);
return;
}
if (faction.isNormal()) {
if (faction.getHome() != null) {
context.msg(TL.COMMAND_LOOKUP_FACTION_HOME, this.format.format(faction.getHome().getX()), this.format.format(faction.getHome().getY()), this.format.format(faction.getHome().getZ()));
}
Set<FLocation> locations = Board.getInstance().getAllClaims(faction);
context.msg(TL.COMMAND_LOOKUP_CLAIM_COUNT, locations.size(), faction.getTag());
for (FLocation flocation : locations) {
context.msg(TL.COMMAND_LOOKUP_CLAIM_LIST, flocation.getWorldName(), flocation.getX() * 16L, flocation.getZ() * 16L);
}
} else {
context.msg(TL.COMMAND_LOOKUP_ONLY_NORMAL);
}
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_LOOKUP_DESCRIPTION;
}
}

View File

@@ -7,9 +7,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdLowPower extends FCommand {
/**
* @author Illyria Team
*/
public CmdLowPower() {
super();
this.aliases.add("lowpower");
this.aliases.addAll(Aliases.lowPower);
this.requirements = new CommandRequirements.Builder(Permission.POWER_ANY)
.playerOnly()

View File

@@ -9,9 +9,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdMap extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdMap() {
super();
this.aliases.add("map");
this.aliases.addAll(Aliases.map_map);
this.optionalArgs.put("on/off", "once");
this.requirements = new CommandRequirements.Builder(Permission.MAP)

View File

@@ -5,11 +5,14 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdMapHeight extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdMapHeight() {
super();
this.aliases.add("mapheight");
this.aliases.add("mh");
this.aliases.addAll(Aliases.map_height);
this.optionalArgs.put("height", "height");
this.requirements = new CommandRequirements.Builder(Permission.MAPHEIGHT)

View File

@@ -3,6 +3,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL;
@@ -11,12 +13,13 @@ import org.bukkit.ChatColor;
public class CmdMod extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdMod() {
super();
this.aliases.add("mod");
this.aliases.add("setmod");
this.aliases.add("officer");
this.aliases.add("setofficer");
this.aliases.addAll(Aliases.mod);
this.optionalArgs.put("player name", "name");
@@ -28,51 +31,53 @@ public class CmdMod extends FCommand {
@Override
public void perform(CommandContext context) {
FPlayer you = context.argAsBestFPlayerMatch(0);
if (you == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_MOD_CANDIDATES.toString()).color(ChatColor.GOLD);
for (FPlayer player : context.faction.getFPlayersWhereRole(Role.NORMAL)) {
String s = player.getName();
msg.then(s + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_MOD_CLICKTOPROMOTE.toString() + s).command("/" + Conf.baseCommandAliases.get(0) + " mod " + s);
FPlayer you = context.argAsBestFPlayerMatch(0);
if (you == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_MOD_CANDIDATES.toString()).color(ChatColor.GOLD);
for (FPlayer player : context.faction.getFPlayersWhereRole(Role.NORMAL)) {
String s = player.getName();
msg.then(s + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_MOD_CLICKTOPROMOTE.toString() + s).command("/" + Conf.baseCommandAliases.get(0) + " mod " + s);
}
context.sendFancyMessage(msg);
return;
}
context.sendFancyMessage(msg);
return;
}
boolean permAny = Permission.MOD_ANY.has(context.sender, false);
Faction targetFaction = you.getFaction();
if (targetFaction != context.faction && !permAny) {
context.msg(TL.COMMAND_MOD_NOTMEMBER, you.describeTo(context.fPlayer, true));
return;
}
boolean permAny = Permission.MOD_ANY.has(context.sender, false);
Faction targetFaction = you.getFaction();
if (targetFaction != context.faction && !permAny) {
context.msg(TL.COMMAND_MOD_NOTMEMBER, you.describeTo(context.fPlayer, true));
return;
}
if (context.fPlayer != null && context.fPlayer.getRole() != Role.LEADER && !permAny) {
context.msg(TL.COMMAND_MOD_NOTADMIN);
return;
}
if (context.fPlayer != null && context.fPlayer.getRole() != Role.LEADER && !permAny) {
context.msg(TL.COMMAND_MOD_NOTADMIN);
return;
}
if (you == context.fPlayer && !permAny) {
context.msg(TL.COMMAND_MOD_SELF);
return;
}
if (you == context.fPlayer && !permAny) {
context.msg(TL.COMMAND_MOD_SELF);
return;
}
if (you.getRole() == Role.LEADER) {
context.msg(TL.COMMAND_MOD_TARGETISADMIN);
return;
}
if (you.getRole() == Role.LEADER) {
context.msg(TL.COMMAND_MOD_TARGETISADMIN);
return;
}
if (you.getRole() == Role.MODERATOR) {
// Revoke
you.setRole(Role.NORMAL);
targetFaction.msg(TL.COMMAND_MOD_REVOKED, you.describeTo(targetFaction, true));
context.msg(TL.COMMAND_MOD_REVOKES, you.describeTo(context.fPlayer, true));
} else {
// Give
you.setRole(Role.MODERATOR);
targetFaction.msg(TL.COMMAND_MOD_PROMOTED, you.describeTo(targetFaction, true));
context.msg(TL.COMMAND_MOD_PROMOTES, you.describeTo(context.fPlayer, true));
FactionsPlugin.instance.getFlogManager().log(targetFaction, FLogType.RANK_EDIT, context.fPlayer.getName(), you.getName(), ChatColor.LIGHT_PURPLE + "Mod");
if (you.getRole() == Role.MODERATOR) {
// Revoke
you.setRole(Role.NORMAL);
targetFaction.msg(TL.COMMAND_MOD_REVOKED, you.describeTo(targetFaction, true));
context.msg(TL.COMMAND_MOD_REVOKES, you.describeTo(context.fPlayer, true));
} else {
// Give
you.setRole(Role.MODERATOR);
targetFaction.msg(TL.COMMAND_MOD_PROMOTED, you.describeTo(targetFaction, true));
context.msg(TL.COMMAND_MOD_PROMOTES, you.describeTo(context.fPlayer, true));
}
}
}
@Override

View File

@@ -6,13 +6,14 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdModifyPower extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdModifyPower() {
super();
this.aliases.add("pm");
this.aliases.add("mp");
this.aliases.add("modifypower");
this.aliases.add("modpower");
this.aliases.addAll(Aliases.modifyPower);
this.requiredArgs.add("name");
this.requiredArgs.add("power");

View File

@@ -9,10 +9,14 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CmdNear extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdNear() {
super();
this.aliases.add("near");
this.aliases.add("nearby");
this.aliases.addAll(Aliases.near);
this.requirements = new CommandRequirements.Builder(Permission.NEAR)
.playerOnly()

View File

@@ -3,15 +3,20 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL;
public class CmdOpen extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdOpen() {
super();
this.aliases.add("open");
this.aliases.addAll(Aliases.open);
this.optionalArgs.put("yes/no", "flip");
this.requirements = new CommandRequirements.Builder(Permission.OPEN)
@@ -23,23 +28,25 @@ public class CmdOpen extends FCommand {
@Override
public void perform(CommandContext context) {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostOpen, TL.COMMAND_OPEN_TOOPEN, TL.COMMAND_OPEN_FOROPEN)) {
return;
}
context.faction.setOpen(context.argAsBool(0, !context.faction.getOpen()));
String open = context.faction.getOpen() ? TL.COMMAND_OPEN_OPEN.toString() : TL.COMMAND_OPEN_CLOSED.toString();
// Inform
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
if (fplayer.getFactionId().equals(context.faction.getId())) {
fplayer.msg(TL.COMMAND_OPEN_CHANGES, context.fPlayer.getName(), open);
continue;
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostOpen, TL.COMMAND_OPEN_TOOPEN, TL.COMMAND_OPEN_FOROPEN)) {
return;
}
fplayer.msg(TL.COMMAND_OPEN_CHANGED, context.faction.getTag(fplayer.getFaction()), open);
}
context.faction.setOpen(context.argAsBool(0, !context.faction.getOpen()));
String open = context.faction.getOpen() ? TL.COMMAND_OPEN_OPEN.toString() : TL.COMMAND_OPEN_CLOSED.toString();
// Inform
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
if (fplayer.getFactionId().equals(context.faction.getId())) {
fplayer.msg(TL.COMMAND_OPEN_CHANGES, context.fPlayer.getName(), open);
continue;
}
fplayer.msg(TL.COMMAND_OPEN_CHANGED, context.faction.getTag(fplayer.getFaction()), open);
}
});
}
@Override

View File

@@ -8,9 +8,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdOwner extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdOwner() {
super();
this.aliases.add("owner");
this.aliases.addAll(Aliases.owner_owner);
this.optionalArgs.put("player name", "you");
this.requirements = new CommandRequirements.Builder(Permission.OWNER)

View File

@@ -9,9 +9,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdOwnerList extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdOwnerList() {
super();
this.aliases.add("ownerlist");
this.aliases.addAll(Aliases.owner_list);
this.requirements = new CommandRequirements.Builder(Permission.OWNERLIST)
.playerOnly()

View File

@@ -6,9 +6,13 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdPaypalSee extends FCommand {
/**
* @author Driftay
*/
public CmdPaypalSee() {
this.aliases.add("seepaypal");
this.aliases.add("paypal");
this.aliases.addAll(Aliases.paypal_see);
this.optionalArgs.put("faction", "yours");
@@ -20,7 +24,7 @@ public class CmdPaypalSee extends FCommand {
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fpaypal.Enabled")) {
context.msg(TL.GENERIC_DISABLED);
context.msg(TL.GENERIC_DISABLED, "Faction Paypals");
return;
}

View File

@@ -8,8 +8,12 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdPaypalSet extends FCommand {
/**
* @author Driftay
*/
public CmdPaypalSet() {
this.aliases.add("setpaypal");
this.aliases.addAll(Aliases.paypal_set);
this.optionalArgs.put("faction", "yours");
@@ -25,7 +29,7 @@ public class CmdPaypalSet extends FCommand {
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fpaypal.Enabled")) {
context.fPlayer.msg(TL.GENERIC_DISABLED);
context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Paypals");
return;
}
if (context.fPlayer.getRole() != Role.LEADER && !context.fPlayer.isAdminBypassing()) {

View File

@@ -8,9 +8,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdPeaceful extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPeaceful() {
super();
this.aliases.add("peaceful");
this.aliases.addAll(Aliases.peaceful);
this.requiredArgs.add("faction tag");
this.requirements = new CommandRequirements.Builder(Permission.SET_PEACEFUL)

View File

@@ -17,12 +17,13 @@ import java.util.Set;
public class CmdPerm extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPerm() {
super();
this.aliases.add("perm");
this.aliases.add("perms");
this.aliases.add("permission");
this.aliases.add("permissions");
this.aliases.addAll(Aliases.perm);
this.optionalArgs.put("relation", "relation");
this.optionalArgs.put("action", "action");

View File

@@ -10,9 +10,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdPermanent extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPermanent() {
super();
this.aliases.add("permanent");
this.aliases.addAll(Aliases.permanent_faction);
this.requiredArgs.add("faction tag");
this.requirements = new CommandRequirements.Builder(Permission.SET_PERMANENT)

View File

@@ -6,9 +6,14 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdPermanentPower extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPermanentPower() {
super();
this.aliases.add("permanentpower");
this.aliases.addAll(Aliases.permanent_power);
this.requiredArgs.add("faction");
this.requiredArgs.add("power");

View File

@@ -0,0 +1,21 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdPlayerTitleToggle extends FCommand {
public CmdPlayerTitleToggle() {
super();
this.aliases.addAll(Aliases.titles);
this.requirements = new CommandRequirements.Builder(Permission.TOGGLE_TITLES)
.build();
}
@Override
public void perform(CommandContext context) {
context.fPlayer.setTitlesEnabled(!context.fPlayer.hasTitlesEnabled());
context.msg(TL.COMMAND_TITLETOGGLE_TOGGLED, context.fPlayer.hasTitlesEnabled() ? FactionsPlugin.getInstance().color("&dEnabled") : FactionsPlugin.getInstance().color("&dDisabled"));
}
@Override
public TL getUsageTranslation() {return TL.COMMAND_TITLETOGGLE_DESCRIPTION;}
}

View File

@@ -7,10 +7,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdPower extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPower() {
super();
this.aliases.add("power");
this.aliases.add("pow");
this.aliases.addAll(Aliases.power_power);
this.optionalArgs.put("player name", "you");
this.requirements = new CommandRequirements.Builder(Permission.POWER)

View File

@@ -9,9 +9,13 @@ import org.bukkit.command.ConsoleCommandSender;
public class CmdPowerBoost extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdPowerBoost() {
super();
this.aliases.add("powerboost");
this.aliases.addAll(Aliases.power_boost);
this.requiredArgs.add("plugin|f|player|faction");
this.requiredArgs.add("name");
this.requiredArgs.add("# or reset");

View File

@@ -2,6 +2,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.listeners.FactionsPlayerListener;
import com.massivecraft.factions.shop.ShopConfig;
import com.massivecraft.factions.struct.Permission;
@@ -9,9 +10,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdReload extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdReload() {
super();
this.aliases.add("reload");
this.aliases.addAll(Aliases.reload);
this.requirements = new CommandRequirements.Builder(Permission.RELOAD).build();
}
@@ -26,7 +31,7 @@ public class CmdReload extends FCommand {
FactionsPlugin.getInstance().loadLang();
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight", false)) {
FactionsPlugin.getInstance().factionsFlight = true;
}
@@ -34,6 +39,10 @@ public class CmdReload extends FCommand {
FactionsPlayerListener.loadCorners();
}
Discord.setupDiscord();
//Recheck if commands should truly be disabled and rebuild.
FCmdRoot.instance.addVariableCommands();
FCmdRoot.instance.rebuild();
long timeReload = (System.currentTimeMillis() - timeInitStart);
context.msg(TL.COMMAND_RELOAD_TIME, timeReload);

View File

@@ -8,11 +8,14 @@ import java.util.HashMap;
import java.util.List;
public class CmdRules extends FCommand {
/**
* @author Illyria Team
*/
public CmdRules() {
super();
aliases.add("r");
aliases.add("rule");
aliases.add("rules");
aliases.addAll(Aliases.rules);
this.optionalArgs.put("add/remove/set/clear", "");

View File

@@ -6,9 +6,12 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSB extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSB() {
this.aliases.add("sb");
this.aliases.add("scoreboard");
this.aliases.addAll(Aliases.scoreboard);
this.requirements = new CommandRequirements.Builder(Permission.SCOREBOARD)
.playerOnly()

View File

@@ -1,19 +1,19 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.*;
import com.massivecraft.factions.shop.ShopConfig;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSaveAll extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSaveAll() {
super();
this.aliases.add("saveall");
this.aliases.add("save");
this.aliases.addAll(Aliases.saveAll);
this.requirements = new CommandRequirements.Builder(Permission.SAVE)
.build();
@@ -25,6 +25,11 @@ public class CmdSaveAll extends FCommand {
Factions.getInstance().forceSave(false);
Board.getInstance().forceSave(false);
Conf.save();
try {
FactionsPlugin.instance.getFlogManager().saveLogs();
} catch (Exception e) {
e.printStackTrace();
}
ShopConfig.saveShop();
context.msg(TL.COMMAND_SAVEALL_SUCCESS);
}

View File

@@ -15,6 +15,10 @@ import java.util.HashMap;
public class CmdSeeChunk extends FCommand {
/**
* @author FactionsUUID Team
*/
//Used a hashmap cuz imma make a particle selection gui later, will store it where the boolean is rn.
public static HashMap<String, Boolean> seeChunkMap = new HashMap<>();
private long interval;
@@ -28,8 +32,7 @@ public class CmdSeeChunk extends FCommand {
public CmdSeeChunk() {
super();
aliases.add("seechunk");
aliases.add("sc");
aliases.addAll(Aliases.seeChunk);
this.useParticles = FactionsPlugin.getInstance().getConfig().getBoolean("see-chunk.particles", true);
interval = FactionsPlugin.getInstance().getConfig().getLong("see-chunk.interval", 10L);

View File

@@ -7,9 +7,12 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSeeDiscord extends FCommand{
/**
* @author Driftay
*/
public CmdSeeDiscord() {
this.aliases.add("seediscord");
this.aliases.add("discord");
this.aliases.addAll(Aliases.discord_see);
this.optionalArgs.put("faction", "yours");
@@ -21,7 +24,7 @@ public class CmdSeeDiscord extends FCommand{
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fdiscord.Enabled")) {
context.msg(TL.GENERIC_DISABLED);
context.msg(TL.GENERIC_DISABLED, "Faction Discords");
return;
}

View File

@@ -5,9 +5,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSetBanner extends FCommand {
/**
* @author Illyria Team
*/
public CmdSetBanner() {
super();
aliases.add("setbanner");
aliases.addAll(Aliases.setBanner);
this.requirements = new CommandRequirements.Builder(Permission.BANNER)
.playerOnly()

View File

@@ -6,13 +6,14 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSetDefaultRole extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSetDefaultRole() {
super();
this.aliases.add("defaultrole");
this.aliases.add("defaultrank");
this.aliases.add("default");
this.aliases.add("def");
this.aliases.addAll(Aliases.setDefaultRole);
this.requiredArgs.add("role");
this.requirements = new CommandRequirements.Builder(Permission.DEFAULTRANK)

View File

@@ -8,9 +8,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSetDiscord extends FCommand {
/**
* @author Driftay
*/
public CmdSetDiscord(){
super();
this.aliases.add("setdiscord");
this.aliases.addAll(Aliases.discord_set);
this.optionalArgs.put("faction", "yours");

View File

@@ -9,9 +9,13 @@ import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSetFWarp extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSetFWarp() {
this.aliases.add("setwarp");
this.aliases.add("sw");
this.aliases.addAll(Aliases.setWarp);
this.requiredArgs.add("warp name");
this.optionalArgs.put("password", "password");
this.requirements = new CommandRequirements.Builder(Permission.SETWARP).playerOnly().memberOnly().withAction(PermissableAction.SETWARP).build();

View File

@@ -7,9 +7,12 @@ import org.bukkit.ChatColor;
public class CmdSetMaxVaults extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSetMaxVaults() {
this.aliases.add("setmaxvaults");
this.aliases.add("smv");
this.aliases.addAll(Aliases.setMaxVaults);
this.requiredArgs.add("faction");
this.requiredArgs.add("number");

View File

@@ -7,8 +7,12 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSethome extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdSethome() {
this.aliases.add("sethome");
this.aliases.addAll(Aliases.setHome);
this.optionalArgs.put("faction tag", "mine");
this.requirements = new CommandRequirements.Builder(Permission.SETHOME)
@@ -20,36 +24,38 @@ public class CmdSethome extends FCommand {
@Override
public void perform(CommandContext context) {
if (!Conf.homesEnabled) {
context.msg(TL.COMMAND_SETHOME_DISABLED);
return;
}
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
if (!Conf.homesEnabled) {
context.msg(TL.COMMAND_SETHOME_DISABLED);
return;
}
Faction faction = context.argAsFaction(0, context.faction);
if (faction == null) {
return;
}
Faction faction = context.argAsFaction(0, context.faction);
if (faction == null) {
return;
}
// Can the player set the faction home HERE?
if (!Permission.BYPASS.has(context.player) &&
Conf.homesMustBeInClaimedTerritory &&
Board.getInstance().getFactionAt(new FLocation(context.player)) != faction) {
context.msg(TL.COMMAND_SETHOME_NOTCLAIMED);
return;
}
// Can the player set the faction home HERE?
if (!Permission.BYPASS.has(context.player) &&
Conf.homesMustBeInClaimedTerritory &&
Board.getInstance().getFactionAt(new FLocation(context.player)) != faction) {
context.msg(TL.COMMAND_SETHOME_NOTCLAIMED);
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostSethome, TL.COMMAND_SETHOME_TOSET, TL.COMMAND_SETHOME_FORSET)) {
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostSethome, TL.COMMAND_SETHOME_TOSET, TL.COMMAND_SETHOME_FORSET)) {
return;
}
faction.setHome(context.player.getLocation());
faction.setHome(context.player.getLocation());
faction.msg(TL.COMMAND_SETHOME_SET, context.fPlayer.describeTo(context.faction, true));
faction.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdHome.getUsageTemplate(context));
if (faction != context.faction) {
context.msg(TL.COMMAND_SETHOME_SETOTHER, faction.getTag(context.fPlayer));
}
faction.msg(TL.COMMAND_SETHOME_SET, context.fPlayer.describeTo(context.faction, true));
faction.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdHome.getUsageTemplate(context));
if (faction != context.faction) {
context.msg(TL.COMMAND_SETHOME_SETOTHER, faction.getTag(context.fPlayer));
}
});
}
@Override

View File

@@ -14,11 +14,14 @@ import java.util.List;
public class CmdShow extends FCommand {
/**
* @author FactionsUUID Team
*/
List<String> defaults = new ArrayList<>();
public CmdShow() {
this.aliases.add("show");
this.aliases.add("who");
this.aliases.addAll(Aliases.show_show);
// add defaults to /f show in case config doesnt have it
defaults.add("{header}");

View File

@@ -8,9 +8,12 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdShowClaims extends FCommand {
/**
* @author Illyria Team
*/
public CmdShowClaims() {
this.aliases.add("showclaims");
this.aliases.add("showclaim");
this.aliases.addAll(Aliases.show_claims);
this.requirements = new CommandRequirements.Builder(Permission.SHOWCLAIMS)
.playerOnly()

View File

@@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage;
@@ -10,9 +11,13 @@ import org.bukkit.ChatColor;
public class CmdShowInvites extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdShowInvites() {
super();
aliases.add("showinvites");
aliases.addAll(Aliases.show_invites);
this.requirements = new CommandRequirements.Builder(Permission.SHOW_INVITES)
.playerOnly()
@@ -23,14 +28,12 @@ public class CmdShowInvites extends FCommand {
@Override
public void perform(CommandContext context) {
FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_SHOWINVITES_CLICKTOREVOKE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
}
context.sendFancyMessage(msg);
FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD);
for (String id : context.faction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id);
String name = fp != null ? fp.getName() : id;
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_SHOWINVITES_CLICKTOREVOKE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
}
}
@Override

View File

@@ -7,10 +7,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdSpawnerLock extends FCommand {
/**
* @author Illyria Team
*/
public CmdSpawnerLock(){
super();
this.aliases.add("lockspawners");
this.aliases.add("spawnerlock");
this.aliases.addAll(Aliases.spawnerlock);
this.requirements = new CommandRequirements.Builder(Permission.LOCKSPAWNERS)
.build();

View File

@@ -10,10 +10,13 @@ import java.util.ArrayList;
public class CmdStatus extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdStatus() {
super();
this.aliases.add("status");
this.aliases.add("s");
this.aliases.addAll(Aliases.status);
this.requirements = new CommandRequirements.Builder(Permission.STATUS)
.playerOnly()

View File

@@ -4,9 +4,13 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdStealth extends FCommand {
/**
* @author Driftay
*/
public CmdStealth() {
this.aliases.add("ninja");
this.aliases.add("stealth");
this.aliases.addAll(Aliases.stealth);
this.requirements = new CommandRequirements.Builder(Permission.STEALTH)
.playerOnly()

View File

@@ -6,6 +6,9 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdStrikes extends FCommand {
/**
* @author Driftay
*/
public CmdStrikesGive cmdStrikesGive = new CmdStrikesGive();
public CmdStrikesInfo cmdStrikesInfo = new CmdStrikesInfo();
@@ -15,7 +18,7 @@ public class CmdStrikes extends FCommand {
public CmdStrikes() {
super();
this.aliases.add("strikes");
this.aliases.addAll(Aliases.strikes_strikes);
this.addSubCommand(cmdStrikesGive);
this.addSubCommand(cmdStrikesInfo);

View File

@@ -6,10 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdStrikesGive extends FCommand {
/**
* @author Driftay
*/
public CmdStrikesGive() {
super();
this.aliases.add("give");
this.aliases.addAll(Aliases.strikes_give);
this.requiredArgs.add(0, "faction");
this.requirements = new CommandRequirements.Builder(Permission.SETSTRIKES)

View File

@@ -6,9 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdStrikesInfo extends FCommand {
/**
* @author Driftay
*/
public CmdStrikesInfo() {
super();
this.aliases.add("info");
this.aliases.addAll(Aliases.strikes_info);
this.optionalArgs.put("target", "faction");
this.requirements = new CommandRequirements.Builder(Permission.SETSTRIKES)

View File

@@ -6,9 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdStrikesSet extends FCommand {
/**
* @author Driftay
*/
public CmdStrikesSet() {
super();
this.aliases.add("set");
this.aliases.addAll(Aliases.strikes_set);
this.requiredArgs.add(0, "faction");
this.requiredArgs.add(1, "amount");

View File

@@ -6,10 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdStrikesTake extends FCommand {
/**
* @author Driftay
*/
public CmdStrikesTake() {
super();
this.aliases.add("take");
this.aliases.addAll(Aliases.strikes_take);
this.requiredArgs.add(0, "faction");
this.requiredArgs.add(1, "number of strikes");

View File

@@ -13,10 +13,13 @@ import org.bukkit.entity.Player;
public class CmdStuck extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdStuck() {
super();
this.aliases.add("stuck");
this.aliases.add("halp!"); // halp!c:
this.aliases.addAll(Aliases.stuck);
this.requirements = new CommandRequirements.Builder(Permission.STUCK)

View File

@@ -1,6 +1,8 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.*;
import com.massivecraft.factions.cmd.audit.FLogType;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.event.FactionRenameEvent;
import com.massivecraft.factions.scoreboards.FTeamWrapper;
import com.massivecraft.factions.struct.Permission;
@@ -13,9 +15,12 @@ import java.util.ArrayList;
public class CmdTag extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdTag() {
this.aliases.add("tag");
this.aliases.add("rename");
this.aliases.addAll(Aliases.tag);
this.requiredArgs.add("faction tag");
@@ -28,55 +33,57 @@ public class CmdTag extends FCommand {
@Override
public void perform(CommandContext context) {
String tag = context.argAsString(0);
// TODO does not first test cover selfcase?
if (Factions.getInstance().isTagTaken(tag) && !MiscUtil.getComparisonString(tag).equals(context.faction.getComparisonTag())) {
context.msg(TL.COMMAND_TAG_TAKEN);
return;
}
String tag = context.argAsString(0);
ArrayList<String> errors = MiscUtil.validateTag(tag);
if (errors.size() > 0) {
context.sendMessage(errors);
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if (!context.canAffordCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE.toString())) {
return;
}
// trigger the faction rename event (cancellable)
FactionRenameEvent renameEvent = new FactionRenameEvent(context.fPlayer, tag);
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
if (renameEvent.isCancelled()) {
return;
}
// then make 'em pay (if applicable)
if (!context.payForCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE, TL.COMMAND_TAG_FORCHANGE)) {
return;
}
String oldtag = context.faction.getTag();
context.faction.setTag(tag);
// Inform
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
if (fplayer.getFactionId().equals(context.faction.getId())) {
fplayer.msg(TL.COMMAND_TAG_FACTION, context.fPlayer.describeTo(context.faction, true), context.faction.getTag(context.faction));
continue;
// TODO does not first test cover selfcase?
if (Factions.getInstance().isTagTaken(tag) && !MiscUtil.getComparisonString(tag).equals(context.faction.getComparisonTag())) {
context.msg(TL.COMMAND_TAG_TAKEN);
return;
}
// Broadcast the tag change (if applicable)
if (Conf.broadcastTagChanges) {
Faction faction = fplayer.getFaction();
fplayer.msg(TL.COMMAND_TAG_CHANGED, context.fPlayer.getColorTo(faction) + oldtag, context.faction.getTag(faction));
ArrayList<String> errors = MiscUtil.validateTag(tag);
if (errors.size() > 0) {
context.sendMessage(errors);
return;
}
}
FTeamWrapper.updatePrefixes(context.faction);
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if (!context.canAffordCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE.toString())) {
return;
}
// trigger the faction rename event (cancellable)
FactionRenameEvent renameEvent = new FactionRenameEvent(context.fPlayer, tag);
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
if (renameEvent.isCancelled()) {
return;
}
// then make 'em pay (if applicable)
if (!context.payForCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE, TL.COMMAND_TAG_FORCHANGE)) {
return;
}
String oldtag = context.faction.getTag();
context.faction.setTag(tag);
Discord.changeFactionTag(context.faction, oldtag);
FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.FTAG_EDIT, context.fPlayer.getName(), tag);
// Inform
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
if (fplayer.getFactionId().equals(context.faction.getId())) {
fplayer.msg(TL.COMMAND_TAG_FACTION, context.fPlayer.describeTo(context.faction, true), context.faction.getTag(context.faction));
continue;
}
// Broadcast the tag change (if applicable)
if (Conf.broadcastTagChanges) {
Faction faction = fplayer.getFaction();
fplayer.msg(TL.COMMAND_TAG_CHANGED, context.fPlayer.getColorTo(faction) + oldtag, context.faction.getTag(faction));
}
}
FTeamWrapper.updatePrefixes(context.faction);
}
@Override

View File

@@ -2,14 +2,19 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import com.massivecraft.factions.zcore.util.TextUtil;
public class CmdTitle extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdTitle() {
this.aliases.add("title");
this.aliases.addAll(Aliases.title);
this.requiredArgs.add("player name");
this.optionalArgs.put("title", "");
@@ -20,16 +25,19 @@ public class CmdTitle extends FCommand {
@Override
public void perform(CommandContext context) {
FPlayer you = context.argAsBestFPlayerMatch(0);
if (you == null) return;
context.args.remove(0);
String title = TextUtil.implode(context.args, " ");
if (!context.canIAdministerYou(context.fPlayer, you)) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostTitle, TL.COMMAND_TITLE_TOCHANGE, TL.COMMAND_TITLE_FORCHANGE)) return;
you.setTitle(context.sender, title);
// Inform
context.faction.msg(TL.COMMAND_TITLE_CHANGED, context.fPlayer.describeTo(context.faction, true), you.describeTo(context.faction, true));
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
FPlayer you = context.argAsBestFPlayerMatch(0);
if (you == null) return;
context.args.remove(0);
String title = TextUtil.implode(context.args, " ");
if (!context.canIAdministerYou(context.fPlayer, you)) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if (!context.payForCommand(Conf.econCostTitle, TL.COMMAND_TITLE_TOCHANGE, TL.COMMAND_TITLE_FORCHANGE))
return;
you.setTitle(context.sender, title);
// Inform
context.faction.msg(TL.COMMAND_TITLE_CHANGED, context.fPlayer.describeTo(context.faction, true), you.describeTo(context.faction, true));
});
}
@Override

View File

@@ -6,11 +6,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdToggleAllianceChat extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdToggleAllianceChat() {
super();
this.aliases.add("tac");
this.aliases.add("togglealliancechat");
this.aliases.add("ac");
this.aliases.addAll(Aliases.toggleAllianceChat);
this.requirements = new CommandRequirements.Builder(Permission.TOGGLE_ALLIANCE_CHAT)
.playerOnly()

View File

@@ -12,10 +12,13 @@ import java.util.ArrayList;
public class CmdTop extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdTop() {
super();
this.aliases.add("top");
this.aliases.add("t");
this.aliases.addAll(Aliases.top);
this.requiredArgs.add("criteria");
this.optionalArgs.put("page", "1");

View File

@@ -9,9 +9,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdTpBanner extends FCommand {
/**
* @author Illyria Team
*/
public CmdTpBanner() {
super();
this.aliases.add("tpbanner");
this.aliases.addAll(Aliases.tpBanner);
this.requirements = new CommandRequirements.Builder(Permission.TPBANNER)
.playerOnly()
@@ -25,8 +29,6 @@ public class CmdTpBanner extends FCommand {
return;
}
final FactionsPlayerListener fpl = new FactionsPlayerListener();
if (FactionsBlockListener.bannerLocations.containsKey(context.fPlayer.getTag())) {
context.msg(TL.COMMAND_TPBANNER_SUCCESS);
context.doWarmUp(WarmUpUtil.Warmup.BANNER, TL.WARMUPS_NOTIFY_TELEPORT, "Banner", () -> {

View File

@@ -8,9 +8,13 @@ import com.massivecraft.factions.zcore.util.TL;
public class CmdUnban extends FCommand {
/**
* @author FactionsUUID Team
*/
public CmdUnban() {
super();
this.aliases.add("unban");
this.aliases.addAll(Aliases.unban);
this.requiredArgs.add("target");
this.requirements = new CommandRequirements.Builder(Permission.BAN)
@@ -44,7 +48,7 @@ public class CmdUnban extends FCommand {
context.faction.unban(target);
context.msg(TL.COMMAND_UNBAN_UNBANNED, context.fPlayer.getName(), target.getName());
target.msg(TL.COMMAND_UNBAN_TARGET.toString(), context.faction.getTag(target));
target.msg(TL.COMMAND_UNBAN_TARGET, context.faction.getTag(target));
}
@Override

Some files were not shown because too many files have changed in this diff Show More