Compare commits

..

113 Commits
1.9.0 ... 2.0.4

Author SHA1 Message Date
Driftay
bdc658922f small fix with placeholder 2019-10-13 11:08:17 -04:00
DroppingAnvil
40d6054275 So many improvements 2019-10-13 02:53:45 -05:00
DroppingAnvil
93744347db Moved code 2 lines up to not bypass the reload time count 2019-10-13 02:52:23 -05:00
DroppingAnvil
b13afcb6a2 Fixed /f corner cannot claim spam, Fixed some issues with no blocks placeable near faction vault with certain circumstances, /f reload now reloads corners, Message for needing more power to claim missing space fixed. 2019-10-13 02:48:53 -05:00
DroppingAnvil
cd33572460 Merge from DroppingAnvil/1.6.x
Bug and spelling fixes + version change
2019-10-12 15:24:43 -05:00
DroppingAnvil
c9eca60c18 Bug and spelling fixes + version change 2019-10-12 15:23:11 -05:00
DroppingAnvil
9b9633aa68 Merge from DroppingAnvil/1.6.x 2019-10-12 13:37:30 -05:00
DroppingAnvil
b46009f633 MissionGUI improvements with a small fix for first run of the plugin 2019-10-12 13:34:36 -05:00
DroppingAnvil
b1d51f40ce Merge from Driftay/1.6.x 2019-10-10 13:08:14 -05:00
Driftay
f6fc529898 Merge pull request #24 from DroppingAnvil/1.6.x
Now 1.7 compatible again
2019-10-10 01:06:36 -04:00
DroppingAnvil
f730023b42 Now 1.7 compatible again 2019-10-09 16:53:32 -05:00
Driftay
7339afd60e Merge pull request #23 from DroppingAnvil/1.6.x
This update makes the plugin easier to set up (:
2019-10-09 17:17:17 -04:00
DroppingAnvil
2b0bfae44c This update makes the plugin easier to set up (: 2019-10-08 17:48:46 -05:00
Driftay
533bd1b984 Merge pull request #22 from DroppingAnvil/1.6.x
More permission kit fixes
2019-10-07 20:56:49 -04:00
DroppingAnvil
0b626397a5 More permission kit fixes 2019-10-07 19:11:55 -05:00
DroppingAnvil
db669ce2c2 More permission kit fixes 2019-10-06 17:30:08 -05:00
Driftay
65e7061135 Merge pull request #21 from DroppingAnvil/1.6.x
More permission kit fixes
2019-10-04 18:55:52 -04:00
DroppingAnvil
4b23117262 More permission kit fixes 2019-10-04 17:54:22 -05:00
Driftay
06395b5c4a Merge pull request #20 from DroppingAnvil/1.6.x
Players unable to use /f perms due to lack of permissions
2019-10-04 18:48:50 -04:00
DroppingAnvil
7973d807e6 Merge from Driftay/1.6.x
Merge from Driftay 1.6.x
2019-10-04 17:38:56 -05:00
DroppingAnvil
666d6ab21d Players unable to use /f perms due to lack of permissions 2019-10-04 17:35:25 -05:00
Driftay
fac351d35a Update README.md 2019-10-02 13:56:28 -04:00
Driftay
bd4f92e133 Update README.md 2019-10-02 13:49:41 -04:00
Driftay
4bf1676b2b Update README.md 2019-10-02 13:47:34 -04:00
Driftay
6ba970ac13 2 typos 2019-10-01 12:34:02 -04:00
Driftay
a057a235b8 Fixed a Bunch of Misc stuff & Made config.yml CLEAN 2019-10-01 12:18:44 -04:00
Driftay
10f06baadc Version Change 2019-09-30 16:04:41 -04:00
Driftay
07fa138d58 Disabled Discord Features By Default 2019-09-30 16:03:44 -04:00
Driftay
abf5c45053 Version Change 2019-09-29 18:51:24 -04:00
Driftay
a1f527346a Fixed NPE on Guild loading 2019-09-29 18:45:48 -04:00
Driftay
8a4478764f Merge pull request #19 from DroppingAnvil/1.6.x
You can now mention discord users in game!
2019-09-29 18:45:15 -04:00
DroppingAnvil
8b70947d03 Uncommented something that shouldnt have been 2019-09-29 13:36:37 -05:00
DroppingAnvil
58b25c726f First step to mentions! You can now mention discord users ingame if they have a one word name and there is not someone named the same thing! I plan to make this system much much better soon! 2019-09-29 13:29:23 -05:00
Driftay
22ed86b4d8 Added f points to stats discord command 2019-09-29 08:13:48 -04:00
Driftay
ed9b2419a6 Jar reduced by 200kbs 2019-09-29 07:24:37 -04:00
Driftay
2d0d3c96fc Little thing to avoid npe's being thrown in the console 2019-09-29 06:50:45 -04:00
Driftay
206914247d Version Change 2019-09-29 06:44:45 -04:00
DroppingAnvil
90d9486165 Merge pull request #7 from Driftay/1.6.x
Merge
2019-09-29 04:16:37 -05:00
Driftay
e5cfc1ebdc Changed f invitebot format 2019-09-29 05:16:13 -04:00
Driftay
f63121ed86 Removed token from conf, so owners didnt accidentally use that token 2019-09-29 04:46:21 -04:00
Driftay
3998a346b4 Discord Integration AKA Changing Factions Forever 2019-09-29 04:39:30 -04:00
Driftay
0b1add2a3e Fixed Some things with inventorysee 2019-09-28 03:22:23 -04:00
Driftay
4ab3f3a465 Stopped Referencing ItemStack by mistake 2019-09-28 03:05:03 -04:00
Driftay
6f20087ebe Version Change 2019-09-27 13:01:36 -04:00
Driftay
a493f1494e Code Cleanup 2019-09-24 17:54:12 -04:00
Driftay
2a08f167bb Fixed Citizens error with new upgrades 2019-09-24 17:42:10 -04:00
DroppingAnvil
c2ac4a6517 Merge from Driftay/1.6.x 2019-09-24 12:07:58 -05:00
Driftay
f358e6d75b Added Anti-FChest-Items
(Ability to deny storing items in factions chest)
2019-09-24 06:39:43 -04:00
Driftay
8338e21dd2 Added F Discord 2019-09-21 13:02:51 -04:00
Driftay
d47806b33a Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-09-21 10:35:23 -04:00
Driftay
99edc5b3b5 Missions Not Be Able to Be Done Multiple Times 2019-09-21 10:35:08 -04:00
Driftay
a19cfade75 Merge pull request #18 from DroppingAnvil/1.6.x
Allow F grace from console
2019-09-20 17:06:41 -04:00
Driftay
5b8d2ac4d5 Version Change 2019-09-20 16:59:57 -04:00
Driftay
d6ca2934de Fixed a Few Things 2019-09-20 16:59:31 -04:00
DroppingAnvil
31c3cc538a Merge pull request #5 from Driftay/1.6.x
Merge
2019-09-19 19:25:36 -05:00
DroppingAnvil
917a5feca8 Allow F grace from console 2019-09-19 13:35:07 -05:00
Driftay
81636c6448 Version Change 2019-09-18 08:01:05 -04:00
Driftay
3ce77fe7e1 Fixed Shop Items Sowwy :) 2019-09-18 07:47:03 -04:00
Driftay
8ec16505c4 Fixed Shop Items Sowwy :) 2019-09-18 07:43:18 -04:00
Driftay
0ac6112437 Added Anti-Creeper Glitch To avoid issues with freecam cegging 2019-09-18 05:22:05 -04:00
Driftay
3d45684c6f Version Change 2019-09-17 19:29:40 -04:00
Driftay
4046ab62e2 Merge pull request #17 from DroppingAnvil/1.6.x
Fixed grace period issues!
2019-09-17 19:29:07 -04:00
Driftay
b70741b0d5 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-09-17 19:08:47 -04:00
Driftay
bd4e6cb6a8 Shop GUI Cleaned up :D 2019-09-17 19:08:23 -04:00
DroppingAnvil
a3b819cda3 Fixed grace period issues! 2019-09-17 17:28:32 -05:00
Driftay
0971f72a7a Merge pull request #16 from DroppingAnvil/1.6.x
Fixed Faction Upgrades compatibility with 1.14
2019-09-16 16:23:36 -04:00
DroppingAnvil
b29dd64581 Removed my old conversion code for 1.14 since transitioned to XMaterial. XMaterial support added for EXP upgrade 2019-09-16 13:45:41 -05:00
DroppingAnvil
bc00a5ebd7 Changed Faction Upgrades GUI to XMaterial 2019-09-16 13:37:25 -05:00
DroppingAnvil
89413057cc Fixed some default Faction Upgrades materials not being compatible with 1.14 2019-09-16 12:51:58 -05:00
Driftay
c0a9eeca87 PlaceHolders and better configurability 2019-09-16 07:56:11 -04:00
Driftay
17378f7c3a Merge pull request #15 from DroppingAnvil/1.6.x
Added 2 new Faction Mission types!
2019-09-16 07:37:45 -04:00
Driftay
41fb4dd7ad Added Spawner Lock Command, And Formatted Grace Differently 2019-09-16 07:36:42 -04:00
DroppingAnvil
4181ff539d Cleaned up unused imports 2019-09-15 23:03:58 -05:00
DroppingAnvil
b3eca15839 Added 2 new Faction Mission types! 2019-09-15 23:01:34 -05:00
Driftay
8df75a59d4 version change 2019-09-15 18:49:12 -04:00
Driftay
b0ca56fc71 Spelling POG 2019-09-15 18:48:47 -04:00
Driftay
338b062de0 Merge pull request #14 from DroppingAnvil/1.6.x
New F Upgrade!
2019-09-15 18:16:51 -04:00
DroppingAnvil
1e7bd8ff35 Removed 2 lines used for debug. 2019-09-15 17:10:15 -05:00
DroppingAnvil
26010c6ba2 Added a new F Upgrade type! 2019-09-15 17:08:36 -05:00
Driftay
570cb4e805 Merge pull request #13 from AigleDev/1.6.x
fix an NPE and other changes
2019-09-15 16:58:14 -04:00
Driftay
2fe4d29c0e Spelling POG 2019-09-15 16:33:22 -04:00
DroppingAnvil
f78290b63d Merge from Driftay/1.6.x 2019-09-15 14:03:20 -05:00
AigleDev
fb3204ddb1 fix an NPE and other changes 2019-09-15 20:53:27 +02:00
Driftay
4f38bfa949 forgot i already added 1 to the level 2019-09-15 07:53:20 -04:00
Driftay
488eb78405 Forgot To Register Upgrade Listener xD 2019-09-15 07:52:29 -04:00
Driftay
82d2971b65 Added Warp, DamageIncrease & Reduction, and TNT F Upgrades 2019-09-15 07:51:12 -04:00
Driftay
7f988031ca Showing Dropping Anvil Something (Ignore) 2019-09-15 05:19:06 -04:00
Driftay
2feaed0aad Showing Dropping Anvil Something (Ignore) 2019-09-15 05:15:33 -04:00
Driftay
e7db7170d1 Showing Dropping Anvil Something (Ignore) 2019-09-15 05:14:14 -04:00
Driftay
2a1a8db554 Showing Dropping Anvil Something (Ignore) 2019-09-15 05:12:52 -04:00
Driftay
e07dc303ef Showing Dropping Anvil Something (Ignore) 2019-09-15 05:08:00 -04:00
Driftay
978bcbbb3b Merge remote-tracking branch 'origin/1.6.x' into 1.6.x
# Conflicts:
#	src/main/java/com/massivecraft/factions/listeners/FactionsBlockListener.java
#	src/main/java/com/massivecraft/factions/missions/MissionHandler.java
2019-09-15 05:04:22 -04:00
Driftay
d98f5d9723 Showing Dropping Anvil Something (Ignore) 2019-09-15 05:02:53 -04:00
Driftay
7e9c6cead8 Merge pull request #12 from DroppingAnvil/1.6.x
Added new mission type + added an existing type that was missing from config + added ALL for all missions that use Material or EntityType
2019-09-15 04:55:59 -04:00
DroppingAnvil
8f013e13a4 Fixed a small config mistake I had made 2019-09-15 03:50:07 -05:00
DroppingAnvil
b1525601a0 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-09-15 03:46:59 -05:00
DroppingAnvil
0d5e5dda73 Added tame mission type added "ALL" for all Missions that require Material or EntityType 2019-09-15 03:46:41 -05:00
DroppingAnvil
b4b226e4f0 Merge pull request #3 from Driftay/1.6.x
Update from base
2019-09-15 03:32:36 -05:00
Driftay
c4e81286b7 Deny Breaking Banners to avoid dupe glitches in enemy territory 2019-09-15 04:26:16 -04:00
DroppingAnvil
fcab9790b5 Merge!
Finally back on course and able to merge automatically with Driftay's SaberFactions!
2019-09-15 03:25:14 -05:00
DroppingAnvil
6f5ba4c11b Getting back on course... 2019-09-15 03:23:10 -05:00
DroppingAnvil
8e238e2b48 Merging branches 1 new mission type 2019-09-15 03:14:15 -05:00
Driftay
ed0e17e2a0 Missions Fix 2019-09-15 03:48:25 -04:00
DroppingAnvil
c23d19435d Added check for gamemode when disabling flight as to not disable flight for players not using factions flight but minecraft flight 2019-09-14 10:22:58 -05:00
BuildTools
8035e26af0 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2019-09-14 09:23:35 -05:00
BuildTools
2439e5258f Fixed WarBanner Persistence Error with Placement 2019-09-14 09:22:38 -05:00
DroppingAnvil
049ba10321 Update README.md 2019-09-12 19:32:58 -05:00
DroppingAnvil
ab9ce5649d Update README.md 2019-09-12 19:04:49 -05:00
BuildTools
0530b67b77 Updated Factions.jar 2019-09-12 18:58:40 -05:00
BuildTools
baeb797c0d Updated configuration converted for new SaberFactions config. 2019-09-12 18:57:09 -05:00
DroppingAnvil
679fbbf92f Fixed missing import for ConvertConfigHandler added convert perm to Admin kit 2019-09-12 17:28:15 -05:00
BuildTools
a58b28536b Changed role names added capitalization and a grammar fix. 2019-09-12 17:14:10 -05:00
BuildTools
8ede39413c Added configuration conversion! 2019-09-12 15:53:52 -05:00
81 changed files with 2863 additions and 875 deletions

View File

@@ -1,5 +1,7 @@
# SaberFactions
![Downloads](https://img.shields.io/github/downloads/driftay/saber-factions/total.svg) [![CodeFactor](https://www.codefactor.io/repository/github/driftay/saber-factions/badge)](https://www.codefactor.io/repository/github/driftay/saber-factions)
SaberFactions is a fork of both FactionsUUID and SavageFactions. Creators of those plugins include DtrShock and ProSavage. Credits to them.
SaberFactions is the newest, latest and greatest factions plugin designed for the best and most functional factions experience minecraft has seen!

30
pom.xml
View File

@@ -4,7 +4,7 @@
<groupId>com.massivecraft</groupId>
<artifactId>Factions</artifactId>
<version>1.6.9.5-U0.2.1-1.9.0-BETA</version>
<version>1.6.9.5-U0.2.1-2.0.3-BETA</version>
<packaging>jar</packaging>
<name>SaberFactions</name>
@@ -178,6 +178,18 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>3.8.3_463</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>club.minnced</groupId>
<artifactId>opus-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
@@ -369,9 +381,20 @@
<artifactId>worldguardwrapper</artifactId>
<version>1.1.6-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.jagrosh</groupId>
<artifactId>jda-utilities-commons</artifactId>
<version>2.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
<repository>
<id>net.coreprotect</id>
<url>http://maven.playpro.com/</url>
@@ -392,6 +415,11 @@
<id>maven.sk89q.com</id>
<url>http://maven.sk89q.com/repo/</url>
</repository>
<repository>
<id>jcenter</id>
<name>jcenter-bintray</name>
<url>https://jcenter.bintray.com</url>
</repository>
<repository>
<id>repo.mikeprimm.com</id>
<url>http://repo.mikeprimm.com/</url>

View File

@@ -84,6 +84,7 @@ public class Conf {
public static int stealthFlyCheckRadius = 32;
public static int factionBufferSize = 20;
public static boolean useCheckSystem = true;
public static boolean spawnerLock = false;
public static boolean gracePeriod = false;
public static boolean noEnderpearlsInFly = false;
public static boolean broadcastDescriptionChanges = false;
@@ -96,6 +97,12 @@ public class Conf {
public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction.
public static boolean worldGuardChecking = false;
public static boolean worldGuardBuildPriority = false;
//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";
// server logging options
public static boolean logFactionCreate = true;
public static boolean logFactionDisband = true;
@@ -154,22 +161,22 @@ public class Conf {
public static boolean territoryDenyBuildWhenOffline = true;
public static boolean territoryPainBuild = false;
public static boolean territoryPainBuildWhenOffline = false;
public static boolean territoryDenyUseage = true;
public static boolean territoryDenyUsage = true;
public static boolean territoryEnemyDenyBuild = true;
public static boolean territoryEnemyDenyBuildWhenOffline = true;
public static boolean territoryEnemyPainBuild = false;
public static boolean territoryEnemyPainBuildWhenOffline = false;
public static boolean territoryEnemyDenyUseage = true;
public static boolean territoryEnemyDenyUsage = true;
public static boolean territoryAllyDenyBuild = true;
public static boolean territoryAllyDenyBuildWhenOffline = true;
public static boolean territoryAllyPainBuild = false;
public static boolean territoryAllyPainBuildWhenOffline = false;
public static boolean territoryAllyDenyUseage = true;
public static boolean territoryAllyDenyUsage = true;
public static boolean territoryTruceDenyBuild = true;
public static boolean territoryTruceDenyBuildWhenOffline = true;
public static boolean territoryTrucePainBuild = false;
public static boolean territoryTrucePainBuildWhenOffline = false;
public static boolean territoryTruceDenyUseage = true;
public static boolean territoryTruceDenyUsage = true;
public static boolean territoryBlockCreepers = false;
public static boolean territoryBlockCreepersWhenOffline = false;
public static boolean territoryBlockFireballs = false;
@@ -179,12 +186,12 @@ public class Conf {
public static boolean territoryDenyEndermanBlocks = true;
public static boolean territoryDenyEndermanBlocksWhenOffline = true;
public static boolean safeZoneDenyBuild = true;
public static boolean safeZoneDenyUseage = true;
public static boolean safeZoneDenyUsage = true;
public static boolean safeZoneBlockTNT = true;
public static boolean safeZonePreventAllDamageToPlayers = false;
public static boolean safeZoneDenyEndermanBlocks = true;
public static boolean warZoneDenyBuild = true;
public static boolean warZoneDenyUseage = true;
public static boolean warZoneDenyUsage = true;
public static boolean warZoneBlockCreepers = false;
public static boolean warZoneBlockFireballs = false;
public static boolean warZoneBlockTNT = true;
@@ -192,7 +199,7 @@ public class Conf {
public static boolean warZoneFriendlyFire = false;
public static boolean warZoneDenyEndermanBlocks = true;
public static boolean wildernessDenyBuild = false;
public static boolean wildernessDenyUseage = false;
public static boolean wildernessDenyUsage = false;
public static boolean wildernessBlockCreepers = false;
public static boolean wildernessBlockFireballs = false;
public static boolean wildernessBlockTNT = false;
@@ -210,9 +217,9 @@ public class Conf {
public static boolean ownedMessageByChunk = false;
public static boolean pistonProtectionThroughDenyBuild = true;
public static Set<Material> territoryProtectedMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryDenyUseageMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryDenyUsageMaterials = EnumSet.noneOf(Material.class);
public static Set<Material> territoryProtectedMaterialsWhenOffline = EnumSet.noneOf(Material.class);
public static Set<Material> territoryDenyUseageMaterialsWhenOffline = EnumSet.noneOf(Material.class);
public static Set<Material> territoryDenyUsageMaterialsWhenOffline = EnumSet.noneOf(Material.class);
public static transient Set<EntityType> safeZoneNerfedCreatureTypes = EnumSet.noneOf(EntityType.class);
/// <summary>
/// This defines a set of materials which should always be allowed to use, regardless of factions permissions.
@@ -381,25 +388,25 @@ public class Conf {
// Config is not loading if value is empty ???
territoryBypassProtectedMaterials.add(Material.COOKIE);
territoryDenyUseageMaterials.add(XMaterial.FIRE_CHARGE.parseMaterial());
territoryDenyUseageMaterials.add(Material.FLINT_AND_STEEL);
territoryDenyUseageMaterials.add(Material.BUCKET);
territoryDenyUseageMaterials.add(Material.WATER_BUCKET);
territoryDenyUseageMaterials.add(Material.LAVA_BUCKET);
territoryDenyUsageMaterials.add(XMaterial.FIRE_CHARGE.parseMaterial());
territoryDenyUsageMaterials.add(Material.FLINT_AND_STEEL);
territoryDenyUsageMaterials.add(Material.BUCKET);
territoryDenyUsageMaterials.add(Material.WATER_BUCKET);
territoryDenyUsageMaterials.add(Material.LAVA_BUCKET);
if (!FactionsPlugin.getInstance().mc17) {
territoryDenyUseageMaterials.add(Material.ARMOR_STAND);
territoryDenyUsageMaterials.add(Material.ARMOR_STAND);
}
territoryProtectedMaterialsWhenOffline.add(Material.BEACON);
territoryDenyUseageMaterialsWhenOffline.add(XMaterial.FIRE_CHARGE.parseMaterial());
territoryDenyUseageMaterialsWhenOffline.add(Material.FLINT_AND_STEEL);
territoryDenyUseageMaterialsWhenOffline.add(Material.BUCKET);
territoryDenyUseageMaterialsWhenOffline.add(Material.WATER_BUCKET);
territoryDenyUseageMaterialsWhenOffline.add(Material.LAVA_BUCKET);
territoryDenyUsageMaterialsWhenOffline.add(XMaterial.FIRE_CHARGE.parseMaterial());
territoryDenyUsageMaterialsWhenOffline.add(Material.FLINT_AND_STEEL);
territoryDenyUsageMaterialsWhenOffline.add(Material.BUCKET);
territoryDenyUsageMaterialsWhenOffline.add(Material.WATER_BUCKET);
territoryDenyUsageMaterialsWhenOffline.add(Material.LAVA_BUCKET);
if (!FactionsPlugin.getInstance().mc17) {
territoryDenyUseageMaterialsWhenOffline.add(Material.ARMOR_STAND);
territoryDenyUsageMaterialsWhenOffline.add(Material.ARMOR_STAND);
}
safeZoneNerfedCreatureTypes.add(EntityType.BLAZE);
safeZoneNerfedCreatureTypes.add(EntityType.CAVE_SPIDER);

View File

@@ -23,6 +23,55 @@ import java.util.concurrent.ConcurrentHashMap;
public interface Faction extends EconomyParticipator {
String getMemberRoleId();
void setMemberRoleId(String roleId);
String getGuildId();
void setGuildId(String id);
String getWallNotifyChannelId();
void setWallNotifyChannelId(String channelId);
String getBufferNotifyChannelId();
void setBufferNotifyChannelId(String channelId);
String getWeeWooChannelId();
void setWeeWooChannelId(String channelId);
String getNotifyFormat();
void setNotifyFormat(String format);
String getWeeWooFormat();
void setWeeWooFormat(String format);
String getFactionChatChannelId();
void setFactionChatChannelId(String channelId);
String getDiscord();
void setDiscord(String link);
void checkPerms();
double getReinforcedArmor();
void setReinforcedArmor(double percent);
int getWarpsLimit();
void setWarpsLimit(int limit);
int getTntBankLimit();
void setTntBankLimit(int limit);
int getWallCheckMinutes();
@@ -46,6 +95,8 @@ public interface Faction extends EconomyParticipator {
Map<String, Mission> getMissions();
List<String> getCompletedMissions();
void deinviteAlt(FPlayer alt);
void deinviteAllAlts();

56
src/main/java/com/massivecraft/factions/FactionsPlugin.java Normal file → Executable file
View File

@@ -10,13 +10,15 @@ import com.massivecraft.factions.cmd.FCmdRoot;
import com.massivecraft.factions.cmd.FCommand;
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.chest.ChestLogsHandler;
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;
import com.massivecraft.factions.listeners.*;
import com.massivecraft.factions.missions.MissionHandler;
import com.massivecraft.factions.shop.ShopClickPersistence;
import com.massivecraft.factions.shop.ShopConfig;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Relation;
@@ -87,6 +89,7 @@ public class FactionsPlugin extends MPlugin {
private ClipPlaceholderAPIManager clipPlaceholderAPIManager;
private boolean mvdwPlaceholderAPIManager = false;
private Listener[] eventsListener;
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
public FactionsPlugin() {
@@ -143,18 +146,10 @@ public class FactionsPlugin extends MPlugin {
public void onEnable() {
log("==== Setup ====");
// Vault dependency check.
if (getServer().getPluginManager().getPlugin("Vault") == null) {
log("Vault is not present, the plugin will not run properly.");
getServer().getPluginManager().disablePlugin(instance);
return;
}
int version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]);
switch (version) {
case 7:
FactionsPlugin.instance.log("Minecraft Version 1.7 found, disabling banners, itemflags inside GUIs, and Titles.");
FactionsPlugin.instance.log("Minecraft Version 1.7 found, disabling banners, itemflags inside GUIs, corners, and Titles.");
mc17 = true;
break;
case 8:
@@ -173,6 +168,18 @@ public class FactionsPlugin extends MPlugin {
mc114 = true;
break;
}
//Dependency checks
if (Bukkit.getPluginManager().isPluginEnabled("Vault") && Bukkit.getPluginManager().isPluginEnabled("Essentials")) {
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
FactionsPlugin.econ = rsp.getProvider();
} else {
divider();
System.out.println("You are missing dependencies!");
System.out.println("Please verify EssentialsX and Vault are installed!");
Bukkit.getPluginManager().disablePlugin(instance);
divider();
return;
}
migrateFPlayerLeaders();
log("==== End Setup ====");
@@ -181,7 +188,12 @@ public class FactionsPlugin extends MPlugin {
}
this.loadSuccessful = false;
saveDefaultConfig();
if (!new File(this.getDataFolder() + "/config.yml").exists()) {
this.saveResource("config.yml", false);
this.reloadConfig();
}
//Attempt to generate a permission list
PermissionList.generateFile();
// Load Conf from disk
Conf.load();
@@ -256,6 +268,12 @@ public class FactionsPlugin extends MPlugin {
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");
}
ShopConfig.setup();
getServer().getPluginManager().registerEvents(factionsPlayerListener = new FactionsPlayerListener(), this);
@@ -267,13 +285,10 @@ public class FactionsPlugin extends MPlugin {
new FactionsExploitListener(),
new FactionsBlockListener(),
new FUpgradesGUI(),
new EXPUpgrade(),
new CropUpgrades(),
new RedstoneUpgrade(),
new ShopClickPersistence(),
new UpgradesListener(),
new MissionHandler(this),
new ChestLogsHandler(),
new SpawnerUpgrades()
new AntiChestListener(),
new ChestLogsHandler()
};
for (Listener eventListener : eventsListener)
@@ -283,10 +298,6 @@ public class FactionsPlugin extends MPlugin {
if (!CommodoreProvider.isSupported()) this.getCommand(refCommand).setTabCompleter(this);
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
FactionsPlugin.econ = rsp.getProvider();
if (getDescription().getFullName().contains("BETA")) {
divider();
System.out.println("You are using a BETA version of the plugin!");
@@ -418,7 +429,6 @@ public class FactionsPlugin extends MPlugin {
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();
}
@@ -426,7 +436,7 @@ public class FactionsPlugin extends MPlugin {
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
AutoLeaveTask = null;
}
DiscordListener.saveGuilds();
super.onDisable();
}

View File

@@ -29,7 +29,7 @@ public class CmdAutoHelp extends FCommand {
for (FCommand scmd : pcmd.subCommands) {
if (scmd.visibility == CommandVisibility.VISIBLE) {
lines.add(scmd.getUseageTemplate(context, true));
lines.add(scmd.getUsageTemplate(context, true));
}
// TODO deal with other visibilities
}

View File

@@ -3,7 +3,6 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.util.TL;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Material;
@@ -15,15 +14,9 @@ import org.bukkit.inventory.meta.ItemMeta;
public class CmdBanner extends FCommand {
public CmdBanner() {
super();
this.aliases.add("banner");
this.aliases.add("warbanner");
this.requirements = new CommandRequirements.Builder(Permission.BANNER)
.playerOnly()
.memberOnly()
.build();
this.requirements = new CommandRequirements.Builder(Permission.BANNER).playerOnly().memberOnly().build();
}
@Override
@@ -32,45 +25,39 @@ public class CmdBanner extends FCommand {
context.msg(TL.COMMAND_BANNER_DISABLED);
return;
}
if (context.faction.getBanner() == null) {
context.msg(TL.COMMAND_BANNER_NOBANNER);
return;
}
if (!context.fPlayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000))) {
context.msg(TL.COMMAND_BANNER_NOTENOUGHMONEY);
return;
}
takeMoney(context.fPlayer, FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Cost", 5000));
//ItemStack warBanner = FactionsPlugin.getInstance().createItem(Material.BANNER, 1, (short) 1, FactionsPlugin.getInstance().getConfig().getString("fbanners.Item.Name"), FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Item.Lore"));
//BannerMeta bannerMeta = (BannerMeta) warBanner.getItemMeta();
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();
if (warBanner != null) {
ItemMeta warmeta = warBanner.getItemMeta();
warmeta.setDisplayName(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fbanners.Item.Name")));
warmeta.setLore(FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Item.Lore")));
warBanner.setItemMeta(warmeta);
} else {
warBanner = FactionsPlugin.getInstance().createItem(XMaterial.BLACK_BANNER.parseMaterial(), 1, (short) 1, FactionsPlugin.getInstance().getConfig().getString("fbanners.Item.Name"), FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Item.Lore"));
}
ItemMeta warmeta = warBanner.getItemMeta();
warmeta.setDisplayName(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fbanners.Item.Name")));
warmeta.setLore(FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Item.Lore")));
warBanner.setItemMeta(warmeta);
context.msg(TL.COMMAND_BANNER_SUCCESS);
warBanner.setAmount(1);
context.player.getInventory().addItem(warBanner);
}
public boolean hasMoney(FPlayer fme, int amt) {
Economy econ = FactionsPlugin.getInstance().getEcon();
if (econ.getBalance(fme.getPlayer()) >= amt) {
return true;
} else {
fme.msg(TL.COMMAND_BANNER_NOTENOUGHMONEY);
return false;
}
fme.msg(TL.COMMAND_BANNER_NOTENOUGHMONEY);
return false;
}
public void takeMoney(FPlayer fme, int amt) {
if (hasMoney(fme, amt)) {
if (this.hasMoney(fme, amt)) {
Economy econ = FactionsPlugin.getInstance().getEcon();
econ.withdrawPlayer(fme.getPlayer(), amt);
econ.withdrawPlayer(fme.getPlayer(), (double) amt);
fme.sendMessage(TL.COMMAND_BANNER_MONEYTAKE.toString().replace("{amount}", amt + ""));
}
}
@@ -78,9 +65,9 @@ public class CmdBanner extends FCommand {
public boolean inventoryContains(Inventory inventory, ItemStack item) {
int count = 0;
ItemStack[] items = inventory.getContents();
for (int i = 0; i < items.length; i++) {
if (items[i] != null && items[i].getType() == item.getType() && items[i].getDurability() == item.getDurability()) {
count += items[i].getAmount();
for (ItemStack item1 : items) {
if (item1 != null && item1.getType() == item.getType() && item1.getDurability() == item.getDurability()) {
count += item1.getAmount();
}
if (count >= item.getAmount()) {
return true;
@@ -89,22 +76,21 @@ public class CmdBanner extends FCommand {
return false;
}
public void removeFromInventory(Inventory inventory, ItemStack item) {
int amt = item.getAmount();
ItemStack[] items = inventory.getContents();
for (int i = 0; i < items.length; i++) {
for (int i = 0; i < items.length; ++i) {
if (items[i] != null && items[i].getType() == item.getType() && items[i].getDurability() == item.getDurability()) {
if (items[i].getAmount() > amt) {
items[i].setAmount(items[i].getAmount() - amt);
break;
} else if (items[i].getAmount() == amt) {
}
if (items[i].getAmount() == amt) {
items[i] = null;
break;
} else {
amt -= items[i].getAmount();
items[i] = null;
}
amt -= items[i].getAmount();
items[i] = null;
}
}
inventory.setContents(items);
@@ -114,14 +100,14 @@ public class CmdBanner extends FCommand {
PlayerInventory inventory = p.getInventory();
ItemStack[] cont = inventory.getContents();
int i = 0;
for (ItemStack item : cont)
for (ItemStack item : cont) {
if (item != null && item.getType() != Material.AIR) {
i++;
++i;
}
}
return 36 - i;
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_BANNER_DESCRIPTION;

View File

@@ -90,7 +90,7 @@ public class CmdCreate extends FCommand {
follower.msg(TL.COMMAND_CREATE_CREATED, context.fPlayer.getName(), faction.getTag(follower));
}
}
context.msg(TL.COMMAND_CREATE_YOUSHOULD, FactionsPlugin.getInstance().cmdBase.cmdDescription.getUseageTemplate(context));
context.msg(TL.COMMAND_CREATE_YOUSHOULD, FactionsPlugin.getInstance().cmdBase.cmdDescription.getUsageTemplate(context));
if (Conf.econEnabled) Econ.setBalance(faction.getAccountId(), Conf.econFactionStartingBalance);
if (Conf.logFactionCreate)
FactionsPlugin.getInstance().log(context.fPlayer.getName() + TL.COMMAND_CREATE_CREATEDLOG.toString() + tag);

View File

@@ -64,7 +64,7 @@ public class CmdDeinvite extends FCommand {
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.getUseageTemplate(context));
context.msg(TL.COMMAND_DEINVITE_MIGHTWANT, FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
return;
}

View File

@@ -75,28 +75,28 @@ public class CmdHelp extends FCommand {
ArrayList<String> pageLines;
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdHelp.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdList.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdShow.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPower.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdJoin.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdLeave.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdChat.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdToggleAllianceChat.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdHome.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdHelp.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdList.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdShow.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPower.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdJoin.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdLeave.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdChat.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdToggleAllianceChat.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdHome.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_NEXTCREATE.toString()));
helpPages.add(pageLines);
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdCreate.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDescription.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdTag.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdCreate.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDescription.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdTag.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_INVITATIONS.toString()));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOpen.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdInvite.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDeinvite.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOpen.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdInvite.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDeinvite.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_HOME.toString()));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUsageTemplate(context));
helpPages.add(pageLines);
if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled) {
@@ -106,7 +106,7 @@ public class CmdHelp extends FCommand {
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_BANK_2.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_BANK_3.toString()));
pageLines.add("");
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMoney.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMoney.getUsageTemplate(context));
pageLines.add("");
pageLines.add("");
pageLines.add("");
@@ -114,36 +114,36 @@ public class CmdHelp extends FCommand {
}
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdClaim.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdAutoClaim.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdUnclaim.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdUnclaimall.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdKick.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMod.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdAdmin.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdTitle.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSB.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSeeChunk.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdStatus.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdClaim.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdAutoClaim.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdUnclaim.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdUnclaimall.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMod.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdAdmin.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdTitle.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSB.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSeeChunk.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdStatus.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_PLAYERTITLES.toString()));
helpPages.add(pageLines);
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMap.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdBoom.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOwner.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOwnerList.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdMap.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdBoom.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOwner.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdOwnerList.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_OWNERSHIP_1.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_OWNERSHIP_2.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_OWNERSHIP_3.toString()));
helpPages.add(pageLines);
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDisband.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdDisband.getUsageTemplate(context));
pageLines.add("");
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationAlly.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationNeutral.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationEnemy.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationAlly.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationNeutral.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdRelationEnemy.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_RELATIONS_1.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_RELATIONS_2.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_RELATIONS_3.toString()));
@@ -176,32 +176,32 @@ public class CmdHelp extends FCommand {
pageLines = new ArrayList<>();
pageLines.add(TL.COMMAND_HELP_MOAR_1.toString());
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdBypass.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdBypass.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_ADMIN_1.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_ADMIN_2.toString()));
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_ADMIN_3.toString()));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSafeunclaimall.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdWarunclaimall.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSafeunclaimall.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdWarunclaimall.getUsageTemplate(context));
//TODO:TL
pageLines.add(FactionsPlugin.getInstance().txt.parse("<i>Note: " + FactionsPlugin.getInstance().cmdBase.cmdUnclaim.getUseageTemplate(context) + FactionsPlugin.getInstance().txt.parse("<i>") + " works on safe/war zones as well."));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPeaceful.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().txt.parse("<i>Note: " + FactionsPlugin.getInstance().cmdBase.cmdUnclaim.getUsageTemplate(context) + FactionsPlugin.getInstance().txt.parse("<i>") + " works on safe/war zones as well."));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPeaceful.getUsageTemplate(context));
helpPages.add(pageLines);
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_MOAR_2.toString()));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdChatSpy.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPermanent.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPermanentPower.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPowerBoost.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdConfig.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdChatSpy.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPermanent.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPermanentPower.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdPowerBoost.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdConfig.getUsageTemplate(context));
helpPages.add(pageLines);
pageLines = new ArrayList<>();
pageLines.add(FactionsPlugin.getInstance().txt.parse(TL.COMMAND_HELP_MOAR_3.toString()));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdLock.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdReload.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSaveAll.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdVersion.getUseageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdLock.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdReload.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdSaveAll.getUsageTemplate(context));
pageLines.add(FactionsPlugin.getInstance().cmdBase.cmdVersion.getUsageTemplate(context));
helpPages.add(pageLines);
}

View File

@@ -46,7 +46,7 @@ public class CmdHome extends FCommand {
if (!context.faction.hasHome()) {
context.msg(TL.COMMAND_HOME_NOHOME.toString() + (context.fPlayer.getRole().value < Role.MODERATOR.value ? TL.GENERIC_ASKYOURLEADER.toString() : TL.GENERIC_YOUSHOULD.toString()));
context.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUseageTemplate(context));
context.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUsageTemplate(context));
return;
}

View File

@@ -38,7 +38,7 @@ public class CmdInventorySee extends FCommand {
Access use = context.fPlayer.getFaction().getAccess(context.fPlayer, PermissableAction.TERRITORY);
if (use == Access.DENY || (use == Access.UNDEFINED && !context.assertMinRole(Role.MODERATOR))) {
context.msg(TL.GENERIC_NOPERMISSION, "territory");
context.msg(TL.GENERIC_NOPERMISSION, "see other faction members inventories");
return;
}
@@ -46,7 +46,7 @@ public class CmdInventorySee extends FCommand {
FPlayer targetInv = context.argAsFPlayer(0);
if (targetInv == null || !fplayers.contains(targetInv.getPlayer())) {
context.msg(TL.PLAYER_NOT_FOUND, Objects.requireNonNull(targetInv).toString());
context.msg(TL.PLAYER_NOT_FOUND, Objects.requireNonNull(targetInv.getName()));
return;
}

View File

@@ -33,7 +33,7 @@ public class CmdInvite extends FCommand {
if (target.getFaction() == context.faction) {
context.msg(TL.COMMAND_INVITE_ALREADYMEMBER, target.getName(), context.faction.getTag());
context.msg(TL.GENERIC_YOUMAYWANT.toString() + FactionsPlugin.getInstance().cmdBase.cmdKick.getUseageTemplate(context));
context.msg(TL.GENERIC_YOUMAYWANT.toString() + FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
return;
}

View File

@@ -58,7 +58,7 @@ public class CmdKick extends FCommand {
if (context.fPlayer == toKick) {
context.msg(TL.COMMAND_KICK_SELF);
context.msg(TL.GENERIC_YOUMAYWANT.toString() + FactionsPlugin.getInstance().cmdBase.cmdLeave.getUseageTemplate(context));
context.msg(TL.GENERIC_YOUMAYWANT.toString() + FactionsPlugin.getInstance().cmdBase.cmdLeave.getUsageTemplate(context));
return;
}

View File

@@ -24,8 +24,10 @@ public class CmdPaypalSee extends FCommand {
return;
}
if (context.args.size() == 0) {
if (context.fPlayer.getFaction().getPaypal().isEmpty()) {
if (context.fPlayer.getFaction().getPaypal() == null) {
context.msg(TL.COMMAND_PAYPAL_NOTSET);
} else {
context.msg(TL.PAYPALSEE_PLAYER_PAYPAL, context.fPlayer.getFaction().getPaypal());
@@ -34,7 +36,7 @@ public class CmdPaypalSee extends FCommand {
if (context.fPlayer.isAdminBypassing()) {
Faction faction = context.argAsFaction(0);
if (faction != null) {
if (faction.getPaypal().isEmpty()) {
if (faction.getPaypal() == null) {
context.msg(TL.COMMAND_PAYPALSEE_FACTION_NOTSET, faction.getTag());
} else {
context.msg(TL.COMMAND_PAYPALSEE_FACTION_PAYPAL.toString(), faction.getTag(), faction.getPaypal());
@@ -44,7 +46,7 @@ public class CmdPaypalSee extends FCommand {
context.msg(TL.GENERIC_NOPERMISSION, "see another factions paypal.");
}
} else {
context.msg(FactionsPlugin.getInstance().cmdBase.cmdPaypalSee.getUseageTemplate(context));
context.msg(FactionsPlugin.getInstance().cmdBase.cmdPaypalSee.getUsageTemplate(context));
}
}

View File

@@ -50,7 +50,7 @@ public class CmdPaypalSet extends FCommand {
context.msg(TL.GENERIC_NOPERMISSION, "set another factions paypal!");
}
} else {
context.msg(FactionsPlugin.getInstance().cmdBase.cmdPaypalSet.getUseageTemplate(context));
context.msg(FactionsPlugin.getInstance().cmdBase.cmdPaypalSet.getUsageTemplate(context));
}
}

View File

@@ -2,6 +2,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.listeners.FactionsPlayerListener;
import com.massivecraft.factions.shop.ShopConfig;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
@@ -19,6 +21,7 @@ public class CmdReload extends FCommand {
long timeInitStart = System.currentTimeMillis();
Conf.load();
Conf.save();
ShopConfig.loadShop();
FactionsPlugin.getInstance().reloadConfig();
FactionsPlugin.getInstance().loadLang();
@@ -26,6 +29,11 @@ public class CmdReload extends FCommand {
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
FactionsPlugin.getInstance().factionsFlight = true;
}
if (!FactionsPlugin.getInstance().mc17) {
FactionsPlayerListener.loadCorners();
}
long timeReload = (System.currentTimeMillis() - timeInitStart);
context.msg(TL.COMMAND_RELOAD_TIME, timeReload);

View File

@@ -0,0 +1,59 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSeeDiscord extends FCommand{
public CmdSeeDiscord() {
this.aliases.add("seediscord");
this.aliases.add("discord");
this.optionalArgs.put("faction", "yours");
this.requirements = new CommandRequirements.Builder(Permission.DISCORD)
.memberOnly()
.build();
}
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fdiscord.Enabled")) {
context.msg(TL.GENERIC_DISABLED);
return;
}
if (context.args.size() == 0) {
if (context.fPlayer.getFaction().getDiscord() == null) {
context.msg(TL.COMMAND_DISCORD_NOTSET);
} else {
context.msg(TL.DISCORD_PLAYER_DISCORD, context.fPlayer.getFaction().getDiscord());
}
} else if (context.args.size() == 1) {
if (context.fPlayer.isAdminBypassing()) {
Faction faction = context.argAsFaction(0);
if (faction != null) {
if (faction.getDiscord() == null) {
context.msg(TL.COMMAND_DISCORDSEE_FACTION_NOTSET, faction.getTag());
} else {
context.msg(TL.COMMAND_DISCORDSEE_FACTION_DISCORD.toString(), faction.getTag(), faction.getDiscord());
}
}
} else {
context.msg(TL.GENERIC_NOPERMISSION, "see another factions discord.");
}
} else {
context.msg(FactionsPlugin.getInstance().cmdBase.cmdSeeDiscord.getUsageTemplate(context));
}
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DISCORDSEE_DESCRIPTION;
}
}

View File

@@ -0,0 +1,65 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSetDiscord extends FCommand {
public CmdSetDiscord(){
super();
this.aliases.add("setdiscord");
this.optionalArgs.put("faction", "yours");
this.requiredArgs.add("link");
this.requirements = new CommandRequirements.Builder(Permission.SETDISCORD)
.playerOnly()
.memberOnly()
.build();
}
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("fdiscord.Enabled")) {
context.fPlayer.msg(TL.GENERIC_DISABLED, "discord");
return;
}
if (context.args.size() == 1) {
if (isDiscordInvite(context.argAsString(0))) {
context.fPlayer.getFaction().setDiscord(context.argAsString(0));
context.msg(TL.COMMAND_DISCORDSET_SUCCESSFUL, context.argAsString(0));
} else {
context.msg(TL.COMMAND_DISCORDSET_NOTEMAIL, context.argAsString(0));
}
} else if (context.args.size() == 2) {
if (context.fPlayer.isAdminBypassing()) {
Faction faction = context.argAsFaction(1);
if (faction != null) {
if (isDiscordInvite(context.argAsString(0))) {
context.fPlayer.getFaction().setDiscord(context.argAsString(0));
context.msg(TL.COMMAND_DISCORDSET_ADMIN_SUCCESSFUL, faction.getTag(), context.argAsString(0));
} else {
context.msg(TL.COMMAND_DISCORDSET_ADMIN_FAILED, context.argAsString(0));
}
}
} else {
context.msg(TL.GENERIC_NOPERMISSION, "set another factions discord link!");
}
} else {
context.msg(FactionsPlugin.getInstance().cmdBase.cmdSetDiscord.getUsageTemplate(context));
}
}
private boolean isDiscordInvite(String invite){
return invite.contains("discord.gg") || invite.contains("discord.me");
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DISCORDSET_DESCRIPTION;
}
}

View File

@@ -9,57 +9,42 @@ import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSetFWarp extends FCommand {
public CmdSetFWarp() {
super();
this.aliases.add("setwarp");
this.aliases.add("sw");
this.requiredArgs.add("warp name");
this.optionalArgs.put("password", "password");
this.requirements = new CommandRequirements.Builder(Permission.SETWARP)
.playerOnly()
.memberOnly()
.withAction(PermissableAction.SETWARP)
.build();
this.requirements = new CommandRequirements.Builder(Permission.SETWARP).playerOnly().memberOnly().withAction(PermissableAction.SETWARP).build();
}
@Override
public void perform(CommandContext context) {
if (!(context.fPlayer.getRelationToLocation() == Relation.MEMBER)) {
if (context.fPlayer.getRelationToLocation() != Relation.MEMBER) {
context.msg(TL.COMMAND_SETFWARP_NOTCLAIMED);
return;
}
String warp = context.argAsString(0);
// Checks if warp with same name already exists and ignores maxWarp check if it does.
boolean warpExists = context.faction.isWarp(warp);
int maxWarps = FactionsPlugin.getInstance().getConfig().getInt("max-warps", 5);
int maxWarps = context.faction.getWarpsLimit();
boolean tooManyWarps = maxWarps <= context.faction.getWarps().size();
if (tooManyWarps && !warpExists) {
context.msg(TL.COMMAND_SETFWARP_LIMIT, maxWarps);
return;
}
if (!transact(context.fPlayer, context)) {
if (!this.transact(context.fPlayer, context)) {
return;
}
String password = context.argAsString(1);
LazyLocation loc = new LazyLocation(context.player.getLocation());
context.faction.setWarp(warp, loc);
if (password != null) {
context.faction.setWarpPassword(warp, password);
}
context.msg(TL.COMMAND_SETFWARP_SET, warp, password != null ? password : "");
context.msg(TL.COMMAND_SETFWARP_SET, warp, (password != null) ? password : "");
}
private boolean transact(FPlayer player, CommandContext context) {
return !FactionsPlugin.getInstance().getConfig().getBoolean("warp-cost.enabled", false) || player.isAdminBypassing() || context.payForCommand(FactionsPlugin.getInstance().getConfig().getDouble("warp-cost.setwarp", 5), TL.COMMAND_SETFWARP_TOSET.toString(), TL.COMMAND_SETFWARP_FORSET.toString());
return !FactionsPlugin.getInstance().getConfig().getBoolean("warp-cost.enabled", false) || player.isAdminBypassing() || context.payForCommand(FactionsPlugin.getInstance().getConfig().getDouble("warp-cost.setwarp", 5.0), TL.COMMAND_SETFWARP_TOSET.toString(), TL.COMMAND_SETFWARP_FORSET.toString());
}
@Override

View File

@@ -46,7 +46,7 @@ public class CmdSethome extends FCommand {
faction.setHome(context.player.getLocation());
faction.msg(TL.COMMAND_SETHOME_SET, context.fPlayer.describeTo(context.faction, true));
faction.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdHome.getUseageTemplate(context));
faction.sendMessage(FactionsPlugin.getInstance().cmdBase.cmdHome.getUsageTemplate(context));
if (faction != context.faction) {
context.msg(TL.COMMAND_SETHOME_SETOTHER, faction.getTag(context.fPlayer));
}

View File

@@ -0,0 +1,29 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdSpawnerLock extends FCommand {
public CmdSpawnerLock(){
super();
this.aliases.add("lockspawners");
this.aliases.add("spawnerlock");
this.requirements = new CommandRequirements.Builder(Permission.LOCKSPAWNERS)
.build();
}
@Override
public void perform(CommandContext context){
Conf.spawnerLock = !Conf.spawnerLock;
context.msg(TL.COMMAND_SPAWNER_LOCK_TOGGLED, Conf.spawnerLock ? FactionsPlugin.getInstance().color("&aEnabled") : FactionsPlugin.getInstance().color("&4Disabled"));
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_SPAWNER_LOCK_DESCRIPTION;
}
}

View File

@@ -31,7 +31,7 @@ public class CmdUnban extends FCommand {
if (target.getFaction() != context.fPlayer.getFaction()) {
if (target.getFaction().getAccess(context.fPlayer, PermissableAction.BAN) != Access.ALLOW) {
if (!context.fPlayer.isAdminBypassing()) {
context.fPlayer.msg(TL.COMMAND_UNBAN_TARGET_IN_OTHER_FACTION);
context.fPlayer.msg(TL.COMMAND_UNBAN_TARGET_IN_OTHER_FACTION, target.getName());
}
}
}
@@ -44,7 +44,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, context.faction.getTag(target));
target.msg(TL.COMMAND_UNBAN_TARGET.toString(), context.faction.getTag(target));
}
@Override

View File

@@ -20,6 +20,8 @@ import com.massivecraft.factions.cmd.roles.CmdDemote;
import com.massivecraft.factions.cmd.roles.CmdPromote;
import com.massivecraft.factions.cmd.tnt.CmdTnt;
import com.massivecraft.factions.cmd.tnt.CmdTntFill;
import com.massivecraft.factions.discord.CmdInviteBot;
import com.massivecraft.factions.discord.CmdSetGuild;
import com.massivecraft.factions.missions.CmdMissions;
import com.massivecraft.factions.shop.CmdShop;
import com.massivecraft.factions.zcore.util.TL;
@@ -146,6 +148,11 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
public CmdCheck cmdCheck = new CmdCheck();
public CmdWeeWoo cmdWeeWoo = new CmdWeeWoo();
public CmdConvertConfig cmdConvertConfig = new CmdConvertConfig();
public CmdSpawnerLock cmdSpawnerLock = new CmdSpawnerLock();
public CmdSetDiscord cmdSetDiscord = new CmdSetDiscord();
public CmdSeeDiscord cmdSeeDiscord = new CmdSeeDiscord();
public CmdInviteBot cmdInviteBot = new CmdInviteBot();
public CmdSetGuild cmdSetGuild = new CmdSetGuild();
public FCmdRoot() {
super();
@@ -255,6 +262,12 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
this.addSubCommand(this.cmdFGlobal);
this.addSubCommand(this.cmdViewChest);
this.addSubCommand(this.cmdConvertConfig);
this.addSubCommand(this.cmdSpawnerLock);
if(Conf.useDiscordSystem){
this.addSubCommand(this.cmdInviteBot);
this.addSubCommand(this.cmdSetGuild);
}
if (Conf.useCheckSystem) {
this.addSubCommand(this.cmdCheck);
@@ -305,6 +318,12 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
FactionsPlugin.getInstance().log(Level.INFO, "Enabling FactionsTop command, this is a very basic /f top please get a dedicated /f top resource if you want land calculation etc.");
this.addSubCommand(this.cmdTop);
}
if (FactionsPlugin.getInstance().getConfig().getBoolean("fdiscord.Enabled")) {
this.addSubCommand(this.cmdSetDiscord);
this.addSubCommand(this.cmdSeeDiscord);
}
if (FactionsPlugin.getInstance().getConfig().getBoolean("fpaypal.Enabled")) {
this.addSubCommand(this.cmdPaypalSet);
this.addSubCommand(this.cmdPaypalSee);

View File

@@ -96,7 +96,7 @@ public abstract class FCommand {
if (context.args.size() < this.requiredArgs.size()) {
if (context.sender != null) {
context.msg(TL.GENERIC_ARGS_TOOFEW);
context.sender.sendMessage(this.getUseageTemplate(context));
context.sender.sendMessage(this.getUsageTemplate(context));
}
return false;
}
@@ -106,7 +106,7 @@ public abstract class FCommand {
// Get the to many string slice
List<String> theToMany = context.args.subList(this.requiredArgs.size() + this.optionalArgs.size(), context.args.size());
context.msg(TL.GENERIC_ARGS_TOOMANY, TextUtil.implode(theToMany, " "));
context.sender.sendMessage(this.getUseageTemplate(context));
context.sender.sendMessage(this.getUsageTemplate(context));
}
return false;
}
@@ -200,7 +200,7 @@ public abstract class FCommand {
/*
Help and Usage information
*/
public String getUseageTemplate(CommandContext context, boolean addShortHelp) {
public String getUsageTemplate(CommandContext context, boolean addShortHelp) {
StringBuilder ret = new StringBuilder();
ret.append(FactionsPlugin.getInstance().color(TL.COMMAND_USEAGE_TEMPLATE_COLOR.toString()));
ret.append('/');
@@ -241,8 +241,8 @@ public abstract class FCommand {
return ret.toString();
}
public String getUseageTemplate(CommandContext context) {
return getUseageTemplate(context, false);
public String getUsageTemplate(CommandContext context) {
return getUsageTemplate(context, false);
}
}

View File

@@ -5,10 +5,18 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.MessageBuilder;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.MessageEmbed;
import net.dv8tion.jda.core.entities.TextChannel;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -68,6 +76,32 @@ public class CheckTask implements Runnable {
CheckTask.wallChecks.add(faction.getId());
}
faction.msg(TL.CHECK_WALLS_CHECK);
if (!Conf.useDiscordSystem) return;
String channelId = faction.getWallNotifyChannelId();
if (channelId == null) {
continue;
}
if (channelId.isEmpty()) {
continue;
}
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(channelId);
if (textChannel == null) {
continue;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
} else {
String format = faction.getNotifyFormat();
if (format == null || format.isEmpty()) {
format = "@everyone, check %type%";
}
format = format.replace("%type%", "walls");
MessageEmbed embed = new EmbedBuilder().setColor(Color.WHITE).setFooter(this.simpleDateFormat.format(new Date(currentTime)), null).build();
textChannel.sendMessage(new MessageBuilder(embed).setContent(format).build()).queue();
}
}
@@ -91,8 +125,33 @@ public class CheckTask implements Runnable {
CheckTask.bufferChecks.add(faction.getId());
}
faction.msg(TL.CHECK_BUFFERS_CHECK);
if (!Conf.useDiscordSystem) return;
String channelId = faction.getBufferNotifyChannelId();
if (channelId == null) {
continue;
}
if (channelId.isEmpty()) {
continue;
}
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(channelId);
if (textChannel == null) {
continue;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
} else {
String format = faction.getNotifyFormat();
if (format == null || format.isEmpty()) {
format = "@everyone, check %type%";
}
format = format.replace("%type%", "buffers");
MessageEmbed embed = new EmbedBuilder().setColor(Color.WHITE).setFooter(this.simpleDateFormat.format(new Date(currentTime)), null).build();
textChannel.sendMessage(new MessageBuilder(embed).setContent(format).build()).queue();
}
}
}
}

View File

@@ -1,17 +1,25 @@
package com.massivecraft.factions.cmd.check;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.Channel;
import net.dv8tion.jda.core.entities.MessageEmbed;
import net.dv8tion.jda.core.entities.TextChannel;
import org.bukkit.OfflinePlayer;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@@ -76,6 +84,21 @@ public class CmdCheck extends FCommand {
}
context.faction.getChecks().put(currentTime, "U" + context.fPlayer.getNameAndTag());
context.msg(TL.CHECK_WALLS_MARKED_CHECKED);
if (!Conf.useDiscordSystem) return;
String channelId = context.faction.getWallNotifyChannelId();
if (channelId == null || channelId.isEmpty()) {
return;
}
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(channelId);
if (textChannel == null) {
return;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, net.dv8tion.jda.core.Permission.MESSAGE_READ, net.dv8tion.jda.core.Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
return;
}
MessageEmbed embed = new EmbedBuilder().setColor(Color.MAGENTA).setTitle("Walls checked by " + context.fPlayer.getNameAndTag()).setFooter(simpleDateFormat.format(new Date(currentTime)), null).build();
textChannel.sendMessage(embed).queue();
}
} else if (subCommand.equalsIgnoreCase("buffers")) {
if (!CheckTask.bufferCheck(context.faction.getId())) {
@@ -93,6 +116,21 @@ public class CmdCheck extends FCommand {
}
context.faction.getChecks().put(System.currentTimeMillis(), "Y" + context.fPlayer.getNameAndTag());
context.msg(TL.CHECK_BUFFERS_MARKED_CHECKED);
if (!Conf.useDiscordSystem) return;
String channelId = context.faction.getBufferNotifyChannelId();
if (channelId == null || channelId.isEmpty()) {
return;
}
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(channelId);
if (textChannel == null) {
return;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, net.dv8tion.jda.core.Permission.MESSAGE_READ, net.dv8tion.jda.core.Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
return;
}
MessageEmbed embed = new EmbedBuilder().setColor(Color.MAGENTA).setTitle("Buffers checked by " + context.fPlayer.getNameAndTag()).setFooter(simpleDateFormat.format(new Date(currentTime)), null).build();
textChannel.sendMessage(embed).queue();
}
} else if (subCommand.equalsIgnoreCase("settings")) {
if (!context.fPlayer.getRole().isAtLeast(Role.COLEADER)) {

View File

@@ -1,10 +1,14 @@
package com.massivecraft.factions.cmd.check;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.entities.Channel;
import net.dv8tion.jda.core.entities.TextChannel;
public class CmdWeeWoo extends FCommand {
public CmdWeeWoo() {
@@ -30,7 +34,19 @@ public class CmdWeeWoo extends FCommand {
}
context.faction.setWeeWoo(true);
context.msg(TL.COMMAND_WEEWOO_STARTED, context.fPlayer.getNameAndTag());
if (!Conf.useDiscordSystem) return;
String discordChannelId = context.faction.getWeeWooChannelId();
if (discordChannelId != null && !discordChannelId.isEmpty()) {
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(discordChannelId);
if (textChannel == null) {
return;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, net.dv8tion.jda.core.Permission.MESSAGE_READ, net.dv8tion.jda.core.Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
return;
}
textChannel.sendMessage(TL.WEEWOO_STARTED_DISCORD.format(context.fPlayer.getNameAndTag())).queue();
}
} else if (argument.equalsIgnoreCase("stop")) {
if (!weewoo) {
context.msg(TL.COMMAND_WEEWOO_ALREADY_STOPPED);
@@ -38,6 +54,19 @@ public class CmdWeeWoo extends FCommand {
}
context.faction.setWeeWoo(false);
context.msg(TL.COMMAND_WEEWOO_STOPPED, context.fPlayer.getNameAndTag());
if(!Conf.useDiscordSystem) return;
String discordChannelId = context.faction.getWeeWooChannelId();
if (discordChannelId != null && !discordChannelId.isEmpty()) {
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(discordChannelId);
if (textChannel == null) {
return;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, net.dv8tion.jda.core.Permission.MESSAGE_READ, net.dv8tion.jda.core.Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
return;
}
textChannel.sendMessage(TL.WEEWOO_STOPPED_DISCORD.format(context.fPlayer.getNameAndTag())).queue();
}
} else {
context.msg("/f weewoo <start/stop>");
}

View File

@@ -1,9 +1,14 @@
package com.massivecraft.factions.cmd.check;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.TextChannel;
public class WeeWooTask implements Runnable {
@@ -20,6 +25,26 @@ public class WeeWooTask implements Runnable {
continue;
}
faction.msg(TL.WEE_WOO_MESSAGE);
if (!Conf.useDiscordSystem) return;
String discordChannelId = faction.getWeeWooChannelId();
if (discordChannelId == null || discordChannelId.isEmpty()) {
continue;
}
TextChannel textChannel = FactionChatHandler.jda.getTextChannelById(discordChannelId);
if (textChannel == null) {
continue;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
textChannel.getGuild().getOwner().getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage((":x: Missing read/write in " + textChannel.getAsMention())).queue());
} else {
String format = faction.getWeeWooFormat();
if (format == null || format.isEmpty()) {
format = "@everyone, we're being raided! Get online!";
}
textChannel.sendMessage(format).queue();
}
}
}
}

View File

@@ -0,0 +1,67 @@
package com.massivecraft.factions.cmd.chest;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class AntiChestListener implements Listener {
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked();
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
if (!e.getView().getTopInventory().getTitle().equalsIgnoreCase(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title")))) return;
if (e.isCancelled()) return;
Inventory clicked = e.getClickedInventory();
if (e.getClick().isShiftClick()) {
if (clicked == e.getWhoClicked().getInventory()) {
ItemStack clickedOn = e.getCurrentItem();
if (clickedOn != null && FactionsPlugin.getInstance().itemList.contains(clickedOn.getType().toString())) {
fPlayer.msg(TL.CHEST_ITEM_DENIED_TRANSFER, clickedOn.getType().toString());
e.setCancelled(true);
}
}
}
if (clicked != e.getWhoClicked().getInventory()) {
ItemStack onCursor = e.getCursor();
if (onCursor != null && FactionsPlugin.getInstance().itemList.contains(onCursor.getType().toString())) {
fPlayer.msg(TL.CHEST_ITEM_DENIED_TRANSFER, onCursor.getType().toString());
e.setCancelled(true);
}
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent e) {
Player p = (Player) e.getWhoClicked();
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(p);
if (!e.getView().getTopInventory().getTitle().equalsIgnoreCase(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title")))) return;
if (e.isCancelled()) return;
ItemStack dragged = e.getOldCursor();
if (FactionsPlugin.getInstance().itemList.contains(dragged.getType().toString())) {
int inventorySize = e.getInventory().getSize();
for (int i : e.getRawSlots()) {
if (i < inventorySize) {
fPlayer.msg(TL.CHEST_ITEM_DENIED_TRANSFER, dragged.getType().toString());
e.setCancelled(true);
break;
}
}
}
}
}

View File

@@ -9,6 +9,8 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.CornerTask;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Comparator;
@@ -29,6 +31,10 @@ public class CmdCorner extends FCommand {
@Override
public void perform(CommandContext context) {
if (FactionsPlugin.getInstance().mc17) {
context.player.sendMessage(ChatColor.RED + "This command is disabled!");
return;
}
FLocation to = new FLocation(context.player.getLocation());
if (FactionsPlugin.getInstance().getFactionsPlayerListener().getCorners().contains(to)) {
Faction cornerAt = Board.getInstance().getFactionAt(to);

View File

@@ -23,20 +23,25 @@ public class ConvertConfigHandler {
static FileConfiguration sv = YamlConfiguration.loadConfiguration(savageConfigFile);
static File configFile = new File("plugins/Factions/config.yml");
static FileConfiguration sb = YamlConfiguration.loadConfiguration(configFile);
public static void setString(String s){
static JavaPlugin plugin = JavaPlugin.getProvidingPlugin(FactionsPlugin.class);
public static void setString(String s) {
sb.set(s, sv.getString(s));
}
public static void setInt(String s){
public static void setInt(String s) {
sb.set(s, sv.getInt(s));
}
public static void setConfigSec(String s){
public static void setConfigSec(String s) {
ConfigurationSection cs = sv.getConfigurationSection(s);
sb.set(s, cs);
}
static JavaPlugin plugin = JavaPlugin.getProvidingPlugin(FactionsPlugin.class);
public static void setBoolean(String s){
public static void setBoolean(String s) {
sb.set(s, sv.getBoolean(s));
}
public static void convertconfig(Player player) {
if (new File("plugins/Factions/SavageFactions/config.yml").exists()) {
BukkitScheduler scheduler = plugin.getServer().getScheduler();

View File

@@ -35,7 +35,7 @@ public class CmdMoney extends FCommand {
@Override
public void perform(CommandContext context) {
if (!Conf.econEnabled) {
if (!Conf.econEnabled || !Conf.bankEnabled) {
context.msg(TL.ECON_OFF, "economy option is enabled, please set \'econEnabled\' to true in conf.json");
return;
}

View File

@@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd.grace;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
@@ -14,14 +15,13 @@ public class CmdGrace extends FCommand {
this.aliases.add("grace");
this.requirements = new CommandRequirements.Builder(Permission.GRACE)
.playerOnly()
.build();
}
@Override
public void perform(CommandContext context) {
Conf.gracePeriod = !Conf.gracePeriod;
context.msg(TL.COMMAND_GRACE_TOGGLE, Conf.gracePeriod ? TL.GENERIC_ENABLED : TL.GENERIC_DISABLED);
context.msg(TL.COMMAND_GRACE_TOGGLE, Conf.gracePeriod ? FactionsPlugin.getInstance().color("&aEnabled") : FactionsPlugin.getInstance().color("&4Disabled"));
}

View File

@@ -115,16 +115,16 @@ public class CmdTnt extends FCommand {
context.msg(TL.GENERIC_ARGS_TOOFEW);
context.msg(context.args.get(0).equalsIgnoreCase("take") || context.args.get(0).equalsIgnoreCase("t") ? TL.COMMAND_TNT_TAKE_DESCRIPTION : TL.COMMAND_TNT_ADD_DESCRIPTION);
}
context.sendMessage(TL.COMMAND_TNT_AMOUNT.toString().replace("{amount}", context.faction.getTnt() + ""));
context.msg(TL.COMMAND_TNT_AMOUNT, context.faction.getTnt(), context.faction.getTntBankLimit());
}
public boolean inventoryContains(Inventory inventory, ItemStack item) {
int count = 0;
ItemStack[] items = inventory.getContents();
for (int i = 0; i < items.length; i++) {
if (items[i] != null && items[i].getType() == item.getType() && items[i].getDurability() == item.getDurability()) {
count += items[i].getAmount();
for (ItemStack item1 : items) {
if (item1 != null && item1.getType() == item.getType() && item1.getDurability() == item.getDurability()) {
count += item1.getAmount();
}
if (count >= item.getAmount()) {
return true;

View File

@@ -0,0 +1,31 @@
package com.massivecraft.factions.discord;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.Permission;
public class CmdInviteBot extends FCommand {
public CmdInviteBot(){
super();
this.aliases.add("invitebot");
}
@Override
public void perform(CommandContext context) {
JDA jda = FactionChatHandler.jda;
FancyMessage fancyMessage = new FancyMessage();
fancyMessage.link(jda.asBot().getInviteUrl(Permission.MESSAGE_READ, Permission.MESSAGE_WRITE, Permission.MESSAGE_HISTORY, Permission.MESSAGE_ADD_REACTION, Permission.MESSAGE_EMBED_LINKS));
fancyMessage.text(FactionsPlugin.getInstance().color("&c&lFactions Bot - &2Click here to invite the bot"));
fancyMessage.send(context.fPlayer.getPlayer());
}
@Override
public TL getUsageTranslation() {
return TL.INVITE_BOT_USAGE;
}
}

View File

@@ -0,0 +1,96 @@
package com.massivecraft.factions.discord;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.priv.react.PrivateMessageReactionAddEvent;
import org.bukkit.ChatColor;
import java.util.concurrent.TimeUnit;
public class CmdSetGuild extends FCommand {
private EventWaiter eventWaiter;
private boolean waiterAdded;
public CmdSetGuild() {
super();
this.eventWaiter = new EventWaiter();
this.waiterAdded = false;
this.aliases.add("setguild");
this.optionalArgs.put("id", "none");
this.optionalArgs.put("faction", "you");
this.requirements = new CommandRequirements.Builder(Permission.SET_GUILD)
.playerOnly()
.memberOnly()
.build();
}
@Override
public void perform(CommandContext context) {
String guildId = context.argAsString(0, null);
Faction faction = context.argAsFaction(1, context.faction);
JDA jda = FactionChatHandler.jda;
if (jda != null) {
if (!this.waiterAdded) {
jda.addEventListener(new EventWaiter[]{this.eventWaiter});
this.waiterAdded = true;
}
if (guildId != null && !guildId.equalsIgnoreCase("null")) {
Guild guild = null;
try {
guild = jda.getGuildById(guildId);
} catch (NumberFormatException var7) {
}
if (guild == null) {
context.msg(TL.SET_GUILD_ID_INVALID_ID);
} else if (Factions.getInstance().getAllFactions().stream().anyMatch((f) -> guildId.equals(f.getGuildId()))) {
context.msg(TL.SET_GUILD_ID_GUILD_ALREADY_LINKED);
} else {
context.msg(TL.SET_GUILD_ID_PMING_OWNER);
User user = guild.getOwner().getUser();
Guild finalGuild = guild;
Guild finalGuild1 = guild;
user.openPrivateChannel().queue((privateChannel) -> privateChannel.sendMessage("Link guild **" + finalGuild1.getName() + "** to faction **" + ChatColor.stripColor(faction.getTag()) + "**?").queue((message) -> {
String checkMark = "âś…";
message.addReaction(checkMark).queue();
this.eventWaiter.waitForEvent(PrivateMessageReactionAddEvent.class, (event) -> event.getReactionEmote().getName().equals(checkMark) && event.getUser().getId().equals(user.getId()) && event.getMessageId().equals(message.getId()), (event) -> {
faction.setGuildId(context.argAsString(0));
context.msg(TL.SET_GUILD_ID_SUCCESS);
privateChannel.sendMessage("Successfully linked **" + finalGuild.getName() + " & " + ChatColor.stripColor(faction.getTag()) + "**").queue();
}, 15L, TimeUnit.SECONDS, () -> {
privateChannel.sendMessage(TL.SET_GUILD_ID_TIMED_OUT_DISCORD.toString()).queue();
context.msg(TL.SET_GUILD_ID_TIMED_OUT_MINECRAFT);
});
}, (t) -> {
context.msg(TL.SET_GUILD_ID_UNABLE_TO_MESSAGE_GUILD_OWNER);
}), (t) -> context.msg(TL.SET_GUILD_ID_UNABLE_TO_MESSAGE_GUILD_OWNER));
}
} else {
faction.setGuildId(null);
faction.setWeeWooChannelId(null);
faction.setBufferNotifyChannelId(null);
faction.setWallNotifyChannelId(null);
faction.setFactionChatChannelId(null);
context.msg(TL.SET_GUILD_ID_RESET_ID);
}
}
}
@Override
public TL getUsageTranslation() {
return TL.SET_GUILD_ID_USAGE;
}
}

View File

@@ -0,0 +1,528 @@
package com.massivecraft.factions.discord;
import com.massivecraft.factions.*;
import com.massivecraft.factions.discord.json.JSONGuilds;
import com.massivecraft.factions.zcore.util.TL;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.exceptions.PermissionException;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.text.DecimalFormat;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
public class DiscordListener extends ListenerAdapter {
private static File file = new File(FactionsPlugin.getInstance().getDataFolder(), "discord_guilds.json");
public static JSONGuilds guilds = loadGuilds();
private final DecimalFormat decimalFormat;
private FactionsPlugin plugin;
public DiscordListener(FactionsPlugin plugin) {
this.decimalFormat = new DecimalFormat("$#,###.##");
this.plugin = plugin;
int minute = 3600;
plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, DiscordListener::saveGuilds, (long) (minute * 15), (long) (minute * 15));
}
private static JSONGuilds loadGuilds() {
try {
if (file.exists())
return FactionsPlugin.getInstance().gson.fromJson(String.join("\n", Files.readAllLines(file.toPath())), JSONGuilds.class);
Files.createFile(file.toPath());
Files.write(file.toPath(), "{}".getBytes());
return FactionsPlugin.getInstance().gson.fromJson(String.join("\n", Files.readAllLines(file.toPath())), JSONGuilds.class);
} catch (IOException e) {
e.printStackTrace();
throw new NullPointerException();
}
}
public static void saveGuilds() {
try {
String content = FactionsPlugin.getInstance().gson.toJson(guilds);
Files.write(file.toPath(), content.getBytes());
}
catch (IOException e) {
e.printStackTrace();
throw new NullPointerException();
}
}
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
try {
if (event.getMessage().isWebhookMessage() || event.getAuthor().isBot()) {
return;
}
String prefix = DiscordListener.guilds.getGuildById(event.getGuild().getId()).getPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = ".";
}
String content = event.getMessage().getContentRaw();
if (!content.startsWith(prefix) && !content.startsWith(event.getGuild().getSelfMember().getAsMention())) {
return;
}
if (content.startsWith(prefix + "help") || content.startsWith(event.getGuild().getSelfMember().getAsMention() + " help")) {
this.help(event, content, prefix);
} else if (content.startsWith(prefix + "stats")) {
this.stats(event, content, prefix);
} else if (content.startsWith(prefix + "fstats")) {
this.fstats(event, content, prefix);
} else if (content.startsWith(event.getGuild().getSelfMember().getAsMention() + " setprefix")) {
this.setPrefix(event, content);
} else if (content.startsWith(prefix + "setfchatchannel")) {
this.setFChatChannel(event);
} else if (content.startsWith(prefix + "setwallnotifychannel") || content.startsWith(prefix + "swnc")) {
this.setWallNotifyChannel(event);
} else if (content.startsWith(prefix + "setbuffernotifychannel") || content.startsWith(prefix + "sbnf")) {
this.setBufferNotifyChannel(event);
} else if (content.startsWith(prefix + "setweewoochannel")) {
this.setWeewooChannel(event);
} else if (content.startsWith(prefix + "setnotifyformat")) {
this.setNotifyFormat(event, content, prefix);
} else if (content.startsWith(prefix + "setweewooformat")) {
this.setWeewooFormat(event, content, prefix);
} else if (content.startsWith(prefix + "setmemberrole")) {
this.setMemberRole(event, content, prefix);
} else if (content.startsWith(prefix + "checkleaderboard") || content.startsWith(prefix + "cl")) {
this.checkLeaderboard(event);
} else if (content.startsWith(prefix + "weewoo")) {
this.weewoo(event, content, prefix);
} else if (content.startsWith(prefix + "settings")) {
this.settings(event);
}
} catch (PermissionException exception) {
if (!event.getGuild().getSelfMember().hasPermission(event.getChannel(), Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
return;
}
event.getChannel().sendMessage((":x: Missing permission, `" + exception.getPermission().toString() + "`")).queue();
}
}
private Faction getFaction(Guild guild) {
return Factions.getInstance().getAllFactions().stream().filter(faction -> guild.getId().equals(faction.getGuildId())).findAny().orElse(null);
}
private Faction getFactionWithWarning(TextChannel textChannel) {
Faction faction = this.getFaction(textChannel.getGuild());
if (faction == null) {
textChannel.sendMessage((":x: This guild isn't linked to a faction, use `/f setguild " + textChannel.getGuild().getId() + "` in game")).queue();
}
return faction;
}
private boolean cantAccessPermissionWithWarning(TextChannel textChannel, Member member) {
boolean can = member.hasPermission(Permission.MANAGE_SERVER);
if (!can) {
textChannel.sendMessage(":x: You need to have the Manage Server permission to do that").queue();
}
return !can;
}
private boolean canAccessRole(Faction faction, Member member) {
if (member.hasPermission(Permission.MANAGE_SERVER)) {
return true;
}
Role role = member.getGuild().getRoleById(faction.getMemberRoleId());
return role != null && member.getRoles().stream().anyMatch(r -> r.getPosition() >= role.getPosition());
}
private boolean cantAccessRoleWithWarning(TextChannel textChannel, Faction faction, Member member) {
boolean can = this.canAccessRole(faction, member);
if (!can) {
textChannel.sendMessage(":x: You don't have a faction member role").queue();
}
return !can;
}
private void help(GuildMessageReceivedEvent event, String content, String prefix) {
if (content.contains("help ")) {
content = content.substring(content.indexOf("help") + 5).trim();
EmbedBuilder embedBuilder = new EmbedBuilder().setColor(Color.MAGENTA);
if (content.equalsIgnoreCase("help")) {
embedBuilder.setTitle("Help | Help command").setDescription("Provides a list of commands & docs about commands").addField("Usage", "`" + prefix + "help [command]`", false);
} else if (content.equalsIgnoreCase("stats")) {
embedBuilder.setTitle("Help | Stats command").setDescription("Provides stats about the given player").addField("Usage", "`" + prefix + "stats <player name>`", false);
} else if (content.equalsIgnoreCase("fstats")) {
embedBuilder.setTitle("Help | Fstats command").setDescription("Provides stats about the give faction").addField("Usage", "`" + prefix + "fstats <faction name>`", false);
} else if (content.equalsIgnoreCase("setprefix")) {
embedBuilder.setTitle("Help | Setprefix command").setDescription("Changes the bot's prefix for all commands in the current guild").addField("Usage", "`@" + event.getGuild().getSelfMember().getEffectiveName() + " setprefix <new prefix>`", false);
} else if (content.equalsIgnoreCase("setfchatchannel")) {
embedBuilder.setTitle("Help | Setfchatchannel").setDescription("Sets or removes the channel for Faction chat \"mirroring\", where messages sent in in-game faction chat are sent in the channel & messages sent in the channel are sent to in-game faction chat").addField("Usage", "`" + prefix + "setfchatchannel [#channel]`", false);
} else if (content.equalsIgnoreCase("setwallnotifychannel")) {
embedBuilder.setTitle("Help | Setwallnotifychanel").setDescription("Sets or removes the wall check notification channel").addField("Usage", "`" + prefix + "setwallnotifychannel [#channel]`", false);
} else if (content.equalsIgnoreCase("setbuffernotifychannel")) {
embedBuilder.setTitle("Help | Setbuffernotifychannel").setDescription("Sets or removes the buffer check notification channel").addField("Usage", "`" + prefix + "setbuffernotifychannel [#channel]`", false);
} else if (content.equalsIgnoreCase("setweewoochannel")) {
embedBuilder.setTitle("Help | Setweewoochannel").setDescription("Sets or removes the weewoo (raid alert) channel").addField("Usage", "`" + prefix + "setweewoochannel [#channel>`", false);
} else if (content.equalsIgnoreCase("setnotifyformat")) {
embedBuilder.setTitle("Help | Setnotifyformat").setDescription("Sets the wall & buffer notification format, where `%type%` will be replaced with `walls` or `buffers`").addField("Usage", "`" + prefix + "setnotifyformat <format>`", false).addField("Default", "`@everyone, check %type%`", false);
} else if (content.equalsIgnoreCase("setweewooformat")) {
embedBuilder.setTitle("Help | Setweewooformat").setDescription("Sets the weewoo (raid alert) format").addField("Usage", "`" + prefix + "setweewooformat <fomat>`", false).addField("Default", "`@everyone, we're being raided! Get online!`", false);
} else if (content.equalsIgnoreCase("setmemberrole")) {
embedBuilder.setTitle("Help | Setmemberrole").setDescription("Sets the __lowest__ member role, where the specified role & any roles above it will be counted as members").addField("Usage", "`" + prefix + "setmemberrole <@role/role name/role id>`", false);
} else if (content.equalsIgnoreCase("checkleaderboard")) {
embedBuilder.setTitle("Help | Checkleaderboard").setDescription("Gets the leaderboard for wall & buffer checks").addField("Usage", "`" + prefix + "checkleaderboard`", false);
} else if (content.equalsIgnoreCase("weewoo")) {
embedBuilder.setTitle("Help | Weewoo").setDescription("Starts/stops the weewoo (raid alert").addField("Usage", "`" + prefix + "weewoo <start/stop>`", false);
} else if (content.equalsIgnoreCase("settings")) {
embedBuilder.setTitle("Help | Settings").setDescription("Gets the current settings").addField("Usage", "`" + prefix + "settings`", false);
} else {
embedBuilder.setColor(Color.RED).setTitle("Command not found");
}
event.getChannel().sendMessage(embedBuilder.build()).queue();
} else {
event.getChannel().sendMessage(("`" + prefix + "help [command]` This list or documentation of a command\n"
+ prefix + "stats <player name>` Get stats for a player\n`"
+ prefix + "fstats <faction name>` Get stats for a faction`\n__Requires Manage Server permission__\n@" + event.getGuild().getSelfMember().getEffectiveName() + " setprefix <prefix>` Change the bot's prefix for this guild`\n" +
"\n**Requires a linked faction**\n__Requires Manage Server permission__\n`" + prefix + "setfchatchannel [#channel]` Set or reset the fchat channel\n`" +
prefix + "setwallnotifychannel [#channel]` Set or reset the wall check notification channel\n`" + prefix + "setbuffernotifychannel [#channel]` Set or reset the buffer check notification channel\n`" +
prefix + "setweewoochannel [#channel]` Set or reset the weewoo channel\n`" + prefix + "setnotifyformat <format>` Changes the notification format (`%type%` -> `walls/buffers`)\n`" + prefix + "setweewooformat <format>` Changes the weewoo format\n`" +
prefix + "setmemberrole <@role/role name/role id>` Changes the *lowest* member role\n__Member role only__\n`" +
prefix + "checkleaderboard` Wall & buffer check leaderboard\n`" +
prefix + "weewoo <start/stop>` Starts/stops the weewoo\n`" +
prefix + "settings` Displays the current settings")).queue();
}
}
private void fstats(GuildMessageReceivedEvent event, String content, String prefix) {
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "fstats <faction name>`")).queue();
return;
}
String[] args = content.split(" ");
Faction faction = Factions.getInstance().getByTag(args[1]);
if (faction == null) {
event.getChannel().sendMessage(":x: Faction not found").queue();
return;
}
EmbedBuilder embedBuilder = new EmbedBuilder().setColor(Color.MAGENTA).setTitle("Faction Stats").setAuthor(ChatColor.stripColor(faction.getTag())).addField("Description", faction.getDescription(), false).addField("Players Online", String.valueOf(faction.getOnlinePlayers().size()), true).addField("Total players", String.valueOf(faction.getFPlayers().size()), true).addField("Alts", String.valueOf(faction.getAltPlayers().size()), true).addField("Land", String.valueOf(faction.getLandRounded()), true).addField("Power", faction.getPowerRounded() + "/" + faction.getPowerMaxRounded(), true);
Faction guildFaction = this.getFaction(event.getGuild());
if (guildFaction != null && guildFaction.getId().equals(faction.getId()) && this.canAccessRole(guildFaction, event.getMember())) {
embedBuilder.addField("Kills", String.valueOf(faction.getKills()), true).addField("Points", String.valueOf(faction.getPoints()), true).addField("Deaths", String.valueOf(faction.getDeaths()), true);
}
event.getChannel().sendMessage(embedBuilder.build()).queue();
}
private void stats(GuildMessageReceivedEvent event, String content, String prefix) {
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "stats <player name>`")).queue();
return;
}
String[] args = content.split(" ");
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(args[1]);
FPlayer fPlayer = FPlayers.getInstance().getByOfflinePlayer(offlinePlayer);
String role = fPlayer.getRole().toString();
role = role.substring(0, 1).toUpperCase() + role.substring(1).toLowerCase();
EmbedBuilder embedBuilder = new EmbedBuilder().setColor(Color.MAGENTA).setTitle("Player Stats").setAuthor(offlinePlayer.getName(), null, Conf.avatarUrl.replace("%uuid%", offlinePlayer.getUniqueId().toString())).addField("Balance", this.decimalFormat.format(this.plugin.getEcon().getBalance(offlinePlayer)), false).addField("Faction", ChatColor.stripColor(fPlayer.getFaction().getTag()), true).addField("Faction Role", role, true).addField("Power", fPlayer.getPower() + "/" + fPlayer.getPowerMax(), true).addField("Online", offlinePlayer.isOnline() ? "Yes" : "No", true);
Faction faction = this.getFaction(event.getGuild());
if (faction != null && fPlayer.getFactionId().equals(faction.getId())) {
embedBuilder.addField("Wall checks", String.valueOf(faction.getPlayerWallCheckCount().getOrDefault(offlinePlayer.getUniqueId(), 0)), true).addField("Buffer checks", String.valueOf(faction.getPlayerBufferCheckCount().getOrDefault(offlinePlayer.getUniqueId(), 0)), true).addField("Kills", String.valueOf(fPlayer.getKills()), true).addField("Deaths", String.valueOf(fPlayer.getDeaths()), true);
}
event.getChannel().sendMessage(embedBuilder.build()).queue();
}
private void setPrefix(GuildMessageReceivedEvent event, String content) {
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
String[] split = content.split(" ");
if (split.length != 3) {
event.getChannel().sendMessage((":x: Usage, `@" + event.getGuild().getSelfMember().getEffectiveName() + " setprefix <prefix>`")).queue();
return;
}
String newPrefix = split[2];
if (newPrefix.length() > 16) {
event.getChannel().sendMessage(":x: Prefix may not be longer than 16 characters").queue();
return;
}
DiscordListener.guilds.getGuildById(event.getGuild().getId()).setPrefix(newPrefix);
event.getMessage().addReaction("\u2705").queue();
}
private void setFChatChannel(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
List<TextChannel> mentionedChannels = event.getMessage().getMentionedChannels();
if (mentionedChannels.isEmpty()) {
faction.setFactionChatChannelId(null);
event.getChannel().sendMessage("Cleared fchat channel").queue();
} else {
TextChannel textChannel = mentionedChannels.get(0);
if (!event.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
event.getChannel().sendMessage((":x: Missing read/write permission in " + textChannel.getAsMention())).queue();
return;
}
faction.setFactionChatChannelId(textChannel.getId());
event.getChannel().sendMessage(("New fchat channel set to " + textChannel.getAsMention())).queue();
}
}
private void setWallNotifyChannel(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
List<TextChannel> mentionedChannels = event.getMessage().getMentionedChannels();
if (mentionedChannels.isEmpty()) {
faction.setWallNotifyChannelId(null);
event.getChannel().sendMessage("Cleared wall notify channel").queue();
} else {
TextChannel textChannel = mentionedChannels.get(0);
if (!event.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
event.getChannel().sendMessage((":x: Missing read/write permission in " + textChannel.getAsMention())).queue();
return;
}
faction.setWallNotifyChannelId(textChannel.getId());
event.getChannel().sendMessage(("New wall notify channel set to " + textChannel.getAsMention())).queue();
}
}
private void setBufferNotifyChannel(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
List<TextChannel> mentionedChannels = event.getMessage().getMentionedChannels();
if (mentionedChannels.isEmpty()) {
faction.setBufferNotifyChannelId(null);
event.getChannel().sendMessage("Cleared buffer notify channel").queue();
} else {
TextChannel textChannel = mentionedChannels.get(0);
if (!event.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
event.getChannel().sendMessage((":x: Missing read/write permission in " + textChannel.getAsMention())).queue();
return;
}
faction.setBufferNotifyChannelId(textChannel.getId());
event.getChannel().sendMessage(("New buffer notify channel set to " + textChannel.getAsMention())).queue();
}
}
private void setWeewooChannel(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (!event.getMember().hasPermission(Permission.MANAGE_SERVER)) {
event.getChannel().sendMessage(":x: You need to have the Manage Server permission to do that").queue();
return;
}
List<TextChannel> mentionedChannels = event.getMessage().getMentionedChannels();
if (mentionedChannels.isEmpty()) {
faction.setWeeWooChannelId(null);
event.getChannel().sendMessage("Cleared weewoo channel").queue();
} else {
TextChannel textChannel = mentionedChannels.get(0);
if (!event.getGuild().getSelfMember().hasPermission(textChannel, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) {
event.getChannel().sendMessage((":x: Missing read/write permission in " + textChannel.getAsMention())).queue();
return;
}
faction.setWeeWooChannelId(textChannel.getId());
event.getChannel().sendMessage(("New weewoo channel set to " + textChannel.getAsMention())).queue();
}
}
private void setNotifyFormat(GuildMessageReceivedEvent event, String content, String prefix) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "setnotifyformat <format>` (%type%)")).queue();
return;
}
List<String> arguments = new ArrayList<>(Arrays.asList(content.split(" ")));
arguments.remove(0);
String format = String.join(" ", arguments);
if (format.length() > 1000) {
event.getChannel().sendMessage(":x: The notify format may not be longer than 1000 characters").queue();
return;
}
faction.setNotifyFormat(format);
event.getChannel().sendMessage(("New notify format set to `" + format + "`")).queue();
}
private void setWeewooFormat(GuildMessageReceivedEvent event, String content, String prefix) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "setweewooformat <format>`")).queue();
return;
}
List<String> arguments = new ArrayList<>(Arrays.asList(content.split(" ")));
arguments.remove(0);
String format = String.join(" ", arguments);
if (format.length() > 1000) {
event.getChannel().sendMessage(":x: The weewoo format may not be longer than 1000 characters").queue();
return;
}
faction.setWeeWooFormat(format);
event.getChannel().sendMessage(("New weewoo format set to `" + format + "`")).queue();
}
private void setMemberRole(GuildMessageReceivedEvent event, String content, String prefix) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) {
return;
}
List<String> split = new ArrayList<>(Arrays.asList(content.split(" ")));
if (split.size() < 2) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "setmemberrole <@role/role name/role id>`")).queue();
return;
}
split.remove(0);
Role role = event.getMessage().getMentionedRoles().stream().findFirst().orElse(null);
if (role == null) {
role = event.getGuild().getRolesByName(String.join(" ", split), true).stream().findAny().orElse(null);
}
if (role == null) {
try {
role = event.getGuild().getRoleById(split.get(0));
} catch (NumberFormatException ex) {
}
}
if (role == null) {
event.getChannel().sendMessage(":x: Role not found").queue();
return;
}
faction.setMemberRoleId(role.getId());
event.getChannel().sendMessage(("New *lowest* member role set to `" + role.getName() + "`")).queue();
}
private void checkLeaderboard(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessRoleWithWarning(event.getChannel(), faction, event.getMember())) {
return;
}
Map<UUID, Integer> players = new HashMap<>();
for (Map.Entry<UUID, Integer> entry : faction.getPlayerWallCheckCount().entrySet()) {
players.put(entry.getKey(), entry.getValue());
}
for (Map.Entry<UUID, Integer> entry : faction.getPlayerBufferCheckCount().entrySet()) {
if (players.containsKey(entry.getKey())) {
players.replace(entry.getKey(), players.get(entry.getKey()) + entry.getValue());
} else {
players.put(entry.getKey(), entry.getValue());
}
}
List<Map.Entry<UUID, Integer>> entryList = players.entrySet().stream().sorted(Comparator.comparingInt(Map.Entry::getValue)).collect(Collectors.toList());
EmbedBuilder embedBuilder = new EmbedBuilder().setTitle("Check Leaderboard").setColor(Color.MAGENTA);
StringBuilder stringBuilder = new StringBuilder();
for (int max = (entryList.size() > 10) ? 10 : entryList.size(), current = 0; current < max; ++current) {
Map.Entry<UUID, Integer> entry2 = entryList.get(current);
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(entry2.getKey());
stringBuilder.append("**").append(current + 1).append(".** ").append(offlinePlayer.getName()).append(" __").append(entry2.getValue()).append(" Total (").append(faction.getPlayerBufferCheckCount().getOrDefault(entry2.getKey(), 0)).append(" Buffer, ").append(faction.getPlayerWallCheckCount().getOrDefault(entry2.getKey(), 0)).append(" Wall)__\n");
}
if (entryList.isEmpty()) {
stringBuilder.append("_No data_");
}
event.getChannel().sendMessage(embedBuilder.setDescription(stringBuilder.toString()).build()).queue();
}
private void weewoo(GuildMessageReceivedEvent event, String content, String prefix) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessRoleWithWarning(event.getChannel(), faction, event.getMember())) {
return;
}
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "weewoo <start/stop>`")).queue();
return;
}
List<String> arguments = new ArrayList<>(Arrays.asList(content.split(" ")));
boolean weeWoo = faction.isWeeWoo();
if (arguments.get(1).equalsIgnoreCase("start")) {
if (weeWoo) {
event.getChannel().sendMessage(TL.WEEWOO_ALREADY_STARTED_DISCORD.toString()).queue();
return;
}
faction.setWeeWoo(true);
event.getMessage().addReaction("\u2705").queue();
faction.msg(TL.COMMAND_WEEWOO_STARTED, event.getAuthor().getAsTag());
String discordChannelId = faction.getWeeWooChannelId();
if (discordChannelId != null && !discordChannelId.isEmpty()) {
TextChannel textChannel = event.getJDA().getTextChannelById(discordChannelId);
if (textChannel == null) {
return;
}
textChannel.sendMessage(TL.WEEWOO_STARTED_DISCORD.format(event.getAuthor().getAsTag())).queue();
}
} else if (arguments.get(1).equalsIgnoreCase("stop")) {
if (!weeWoo) {
event.getChannel().sendMessage(TL.WEEWOO_ALREADY_STOPPED_DISCORD.toString()).queue();
return;
}
faction.setWeeWoo(false);
event.getMessage().addReaction("\u2705").queue();
faction.msg(TL.COMMAND_WEEWOO_STARTED, event.getAuthor().getAsTag());
String discordChannelId = faction.getWeeWooChannelId();
if (discordChannelId != null && !discordChannelId.isEmpty()) {
TextChannel textChannel = event.getJDA().getTextChannelById(discordChannelId);
if (textChannel == null) {
return;
}
textChannel.sendMessage(TL.WEEWOO_STOPPED_DISCORD.format(event.getAuthor().getAsTag())).queue();
}
} else {
event.getChannel().sendMessage(":x: Usage, `.weewoo <start/stop>`").queue();
}
}
private void settings(GuildMessageReceivedEvent event) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null) {
return;
}
if (this.cantAccessRoleWithWarning(event.getChannel(), faction, event.getMember())) {
return;
}
int wallCheck = faction.getWallCheckMinutes();
int bufferCheck = faction.getBufferCheckMinutes();
String wallChannel = faction.getWallNotifyChannelId();
String bufferChannel = faction.getBufferNotifyChannelId();
String weeWooChannel = faction.getWeeWooChannelId();
String fChatChannel = faction.getFactionChatChannelId();
MessageEmbed embed = new EmbedBuilder().setTitle("Settings").setColor(Color.MAGENTA).addField("WeeWoo channel", (weeWooChannel != null && !weeWooChannel.isEmpty()) ? ("<#" + weeWooChannel + ">") : "None", true).addField("Wall check channel", (wallChannel != null && !wallChannel.isEmpty()) ? ("<#" + wallChannel + ">") : "None", true).addField("Buffer check channel", (bufferChannel != null && !bufferChannel.isEmpty()) ? ("<#" + bufferChannel + ">") : "None", true).addField("Faction Chat channel", (fChatChannel != null && !fChatChannel.isEmpty()) ? ("<#" + fChatChannel + ">") : "None", true).addField("Wall check notifications", (wallCheck <= 0) ? "Offline" : (wallCheck + " Minutes"), true).addField("Buffer check notifications", (bufferCheck <= 0) ? "Offline" : (bufferCheck + " Minutes"), true).addField("Notify format", "`" + faction.getNotifyFormat() + "`", false).addField("WeeWoo format", "`" + faction.getWeeWooFormat() + "`", false).build();
event.getChannel().sendMessage(embed).queue();
}
}

View File

@@ -0,0 +1,120 @@
package com.massivecraft.factions.discord;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import mkremins.fanciful.FancyMessage;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.entities.Webhook;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.webhook.WebhookClient;
import net.dv8tion.jda.webhook.WebhookMessage;
import net.dv8tion.jda.webhook.WebhookMessageBuilder;
import org.bukkit.ChatColor;
import javax.security.auth.login.LoginException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class FactionChatHandler extends ListenerAdapter {
public static JDA jda;
private FactionsPlugin plugin;
public FactionChatHandler(FactionsPlugin plugin) {
this.plugin = plugin;
startBot();
jda.addEventListener(this);
jda.addEventListener(new DiscordListener(plugin));
}
private void startBot() {
try {
jda = new JDABuilder(AccountType.BOT).setToken(Conf.discordBotToken).buildBlocking();
} catch (LoginException | InterruptedException e) {
e.printStackTrace();
}
}
public static void sendMessage(FactionsPlugin plugin, Faction faction, UUID uuid, String username, String message) {
String factionsChatChannelId = faction.getFactionChatChannelId();
String messageWithMentions = null;
if (factionsChatChannelId == null || factionsChatChannelId.isEmpty()) {
return;
}
if (jda == null) {
return;
}
TextChannel textChannel = jda.getTextChannelById(factionsChatChannelId);
if (textChannel == null) {
return;
}
if (!textChannel.getGuild().getSelfMember().hasPermission(textChannel, Permission.MANAGE_WEBHOOKS)) {
textChannel.sendMessage("Missing `Manage Webhooks` permission in this channel").queue();
return;
}
Webhook webhook = (textChannel.getWebhooks().complete()).stream().filter(w -> w.getName().equals(Conf.webhookName)).findAny().orElse(null);
WebhookClient webhookClient;
if (webhook != null) {
webhookClient = webhook.newClient().build();
} else {
webhookClient = textChannel.createWebhook(Conf.webhookName).complete().newClient().build();
}
if (message.contains("@")) {
List<String> x = new ArrayList<>(Arrays.asList(message.split(" ")));
for (String y : x) {
if (y.contains("@")) {
if (!jda.getUsersByName(y.replace("@", ""), false).isEmpty() && jda.getUsersByName(y.replace("@", ""), false).size() < 2) {
x.set(x.indexOf(y), jda.getUsersByName(y.replace("@", ""), false).get(0).getAsMention());
}
}
}
StringBuilder sB = new StringBuilder();
for (String s : x) {
sB.append(s);
sB.append(" ");
}
messageWithMentions = sB.toString();
}
if (messageWithMentions != null) {
WebhookMessage webhookMessage = new WebhookMessageBuilder().setUsername(ChatColor.stripColor(username)).setAvatarUrl(Conf.avatarUrl.replace("%uuid%", uuid.toString())).setContent(ChatColor.stripColor(messageWithMentions)).build();
webhookClient.send(webhookMessage).join();
webhookClient.close();
return;
}
WebhookMessage webhookMessage = new WebhookMessageBuilder().setUsername(ChatColor.stripColor(username)).setAvatarUrl(Conf.avatarUrl.replace("%uuid%", uuid.toString())).setContent(ChatColor.stripColor(message)).build();
webhookClient.send(webhookMessage).join();
webhookClient.close();
}
@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
if (event.isWebhookMessage() || event.getAuthor().isBot()) {
return;
}
Faction faction = Factions.getInstance().getAllFactions().stream().filter(f -> event.getChannel().getId().equals(f.getFactionChatChannelId())).findAny().orElse(null);
if (faction == null) {
return;
}
String content = event.getMessage().getContentDisplay();
String message = (content.length() > 500) ? content.substring(0, 500) : content;
FancyMessage fancyMessage = new FancyMessage();
fancyMessage.text(ChatColor.translateAlternateColorCodes('&', Conf.fromDiscordFactionChatPrefix + String.format(Conf.factionChatFormat, event.getAuthor().getAsTag(), message)));
List<FancyMessage> messages = new ArrayList<>();
messages.add(fancyMessage);
for (Message.Attachment attachment : event.getMessage().getAttachments()) {
messages.add(new FancyMessage().text(" [Attachment]").color(ChatColor.AQUA).link(attachment.getUrl()).tooltip(attachment.getFileName()));
}
plugin.getServer().getScheduler().runTask(plugin, () -> messages.forEach(msg -> faction.getOnlinePlayers().forEach(fancyMessage::send)));
}
}

View File

@@ -0,0 +1,18 @@
package com.massivecraft.factions.discord.json;
public class JSONGuild {
private String prefix;
public JSONGuild() {
this.prefix = null;
}
public String getPrefix() {
return this.prefix;
}
public void setPrefix(final String prefix) {
this.prefix = prefix;
}
}

View File

@@ -0,0 +1,26 @@
package com.massivecraft.factions.discord.json;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class JSONGuilds {
private Map<String, JSONGuild> guilds;
public JSONGuilds() {
this.guilds = new ConcurrentHashMap<>();
}
public JSONGuild getGuildById(String id) {
JSONGuild[] newGuild = new JSONGuild[1];
return guilds.computeIfAbsent(id, i -> {
newGuild[0] = new JSONGuild();
guilds.put(i, newGuild[0]);
return newGuild[0];
});
}
public Map<String, JSONGuild> getAllGuilds() {
return this.guilds;
}
}

View File

@@ -37,7 +37,7 @@ public class EssentialsHomeHandler implements Listener {
Faction factionAt = Board.getInstance().getFactionAt(floc);
if (factionAt.equals(faction) && factionAt.isNormal()) {
user.delHome(homeName);
FactionsPlugin.getInstance().log(Level.INFO, "FactionLeaveEvent: Removing home %s, player %s, in territory of %s", homeName, event.getfPlayer().getName(), faction.getTag());
FactionsPlugin.getInstance().log(Level.INFO, "Removing home %s, player %s, in territory of %s", homeName, event.getfPlayer().getName(), faction.getTag());
}
}
}

View File

@@ -101,9 +101,6 @@ public class FactionsBlockListener implements Listener {
return false;
}
public static boolean graceisEnabled() {
return Conf.gracePeriod;
}
private static boolean CheckPlayerAccess(Player player, FPlayer me, FLocation loc, Faction myFaction, Access access, PermissableAction action, boolean shouldHurt) {
boolean landOwned = (myFaction.doesLocationHaveOwnersSet(loc) && !myFaction.getOwnerList(loc).isEmpty());
@@ -155,6 +152,14 @@ public class FactionsBlockListener implements Listener {
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false)) {
event.setCancelled(true);
return;
}
if (event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial())) {
if (Conf.spawnerLock) {
event.setCancelled(true);
event.getPlayer().sendMessage(FactionsPlugin.getInstance().color(TL.COMMAND_SPAWNER_LOCK_CANNOT_PLACE.toString()));
}
}
}
@@ -257,10 +262,9 @@ public class FactionsBlockListener implements Listener {
}
}
@EventHandler
@EventHandler (ignoreCancelled = true)
public void onHopperPlace(BlockPlaceEvent e) {
if (e.getItemInHand().getType() != Material.HOPPER && !FactionsPlugin.getInstance().getConfig().getBoolean("fvault.No-Hoppers-near-vault")) {
if (e.getItemInHand().getType() != Material.HOPPER || !FactionsPlugin.getInstance().getConfig().getBoolean("fvault.No-Hoppers-near-vault")) {
return;
}
@@ -327,6 +331,21 @@ public class FactionsBlockListener implements Listener {
}
}
@EventHandler
public void onBannerBreak(BlockBreakEvent e) {
FPlayer fme = FPlayers.getInstance().getByPlayer(e.getPlayer());
if (FactionsPlugin.getInstance().mc17) {
return;
}
if (bannerLocations.containsValue(e.getBlock().getLocation())) {
if (e.getBlock().getType().name().contains("BANNER")) {
e.setCancelled(true);
fme.msg(TL.BANNER_CANNOT_BREAK);
}
}
}
@EventHandler
public void onBannerPlace(BlockPlaceEvent e) {
if (FactionsPlugin.getInstance().mc17) {
@@ -455,24 +474,18 @@ public class FactionsBlockListener implements Listener {
//Grace
@EventHandler
public void onBreak(EntityExplodeEvent e) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("f-grace.Enabled"))
return;
if (!Conf.gracePeriod) return;
if (!graceisEnabled()) {
e.setCancelled(true);
}
e.setCancelled(true);
}
@EventHandler
public void entityDamage(EntityDamageEvent e) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("f-grace.Enabled"))
return;
if (!Conf.gracePeriod) return;
if (!graceisEnabled()) {
if (e.getEntity() instanceof Player) {
if (e.getCause() == EntityDamageEvent.DamageCause.PROJECTILE) {
e.setCancelled(true);
}
}
}
}
@@ -480,10 +493,9 @@ public class FactionsBlockListener implements Listener {
@EventHandler
public void onTNTPlace(BlockPlaceEvent e1) {
FPlayer fp = FPlayers.getInstance().getByPlayer(e1.getPlayer());
if (!FactionsPlugin.getInstance().getConfig().getBoolean("f-grace.Enabled"))
return;
if (!Conf.gracePeriod) return;
if (!graceisEnabled() && !fp.isAdminBypassing()) {
if (!fp.isAdminBypassing()) {
if (e1.getBlock().getType().equals(Material.TNT)) {
e1.setCancelled(true);

View File

@@ -1,6 +1,7 @@
package com.massivecraft.factions.listeners;
import com.massivecraft.factions.*;
import com.massivecraft.factions.discord.FactionChatHandler;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
@@ -82,7 +83,7 @@ public class FactionsChatListener implements Listener {
fplayer.sendMessage("[FCspy] " + myFaction.getTag() + ": " + message);
}
}
FactionChatHandler.sendMessage(FactionsPlugin.getInstance(), myFaction, me.getPlayer().getUniqueId(), me.getPlayer().getName(), event.getMessage());
event.setCancelled(true);
} else if (chat == ChatMode.ALLIANCE) {
Faction myFaction = me.getFaction();

View File

@@ -32,6 +32,16 @@ public class FactionsEntityListener implements Listener {
private static final Set<PotionEffectType> badPotionEffects = new LinkedHashSet<>(Arrays.asList(PotionEffectType.BLINDNESS, PotionEffectType.CONFUSION, PotionEffectType.HARM, PotionEffectType.HUNGER, PotionEffectType.POISON, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WEAKNESS, PotionEffectType.WITHER));
@EventHandler
public void onCreeperGlitch(EntityDamageEvent e) {
if (!e.getEntity().getType().equals(EntityType.CREEPER)) {
return;
}
if (e.getCause().equals(EntityDamageEvent.DamageCause.DROWNING) || e.getCause().equals(EntityDamageEvent.DamageCause.SUFFOCATION)) {
e.getEntity().remove();
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityDeath(EntityDeathEvent event) {
Entity entity = event.getEntity();

View File

@@ -47,25 +47,31 @@ import java.util.logging.Level;
public class FactionsPlayerListener implements Listener {
HashMap<Player, Boolean> fallMap = new HashMap<>();
private Set<FLocation> corners;
public static Set<FLocation> corners;
// Holds the next time a player can have a map shown.
private HashMap<UUID, Long> showTimes = new HashMap<>();
// for handling people who repeatedly spam attempts to open a door (or similar) in another faction's territory
private Map<String, InteractAttemptSpam> interactSpammers = new HashMap<>();
public FactionsPlayerListener() {
this.corners = new HashSet<>();
for (Player player : FactionsPlugin.getInstance().getServer().getOnlinePlayers()) {
initPlayer(player);
}
if (!FactionsPlugin.getInstance().mc17) {
loadCorners();
}
}
public static void loadCorners() {
FactionsPlayerListener.corners = new HashSet<>();
for (World world : FactionsPlugin.getInstance().getServer().getWorlds()) {
WorldBorder border = world.getWorldBorder();
if (border != null) {
int cornerCoord = (int) ((border.getSize() - 1.0) / 2.0);
this.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(cornerCoord), FLocation.blockToChunk(cornerCoord)));
this.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(cornerCoord), FLocation.blockToChunk(-cornerCoord)));
this.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(-cornerCoord), FLocation.blockToChunk(cornerCoord)));
this.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(-cornerCoord), FLocation.blockToChunk(-cornerCoord)));
FactionsPlayerListener.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(cornerCoord), FLocation.blockToChunk(cornerCoord)));
FactionsPlayerListener.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(cornerCoord), FLocation.blockToChunk(-cornerCoord)));
FactionsPlayerListener.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(-cornerCoord), FLocation.blockToChunk(cornerCoord)));
FactionsPlayerListener.corners.add(new FLocation(world.getName(), FLocation.blockToChunk(-cornerCoord), FLocation.blockToChunk(-cornerCoord)));
}
}
}
@@ -108,17 +114,17 @@ public class FactionsPlayerListener implements Listener {
}
if (otherFaction.hasPlayersOnline()) {
if (!Conf.territoryDenyUseageMaterials.contains(material)) {
if (!Conf.territoryDenyUsageMaterials.contains(material)) {
return true; // Item isn't one we're preventing for online factions.
}
} else {
if (!Conf.territoryDenyUseageMaterialsWhenOffline.contains(material)) {
if (!Conf.territoryDenyUsageMaterialsWhenOffline.contains(material)) {
return true; // Item isn't one we're preventing for offline factions.
}
}
if (otherFaction.isWilderness()) {
if (!Conf.wildernessDenyUseage || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) {
if (!Conf.wildernessDenyUsage || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) {
return true; // This is not faction territory. Use whatever you like here.
}
@@ -128,7 +134,7 @@ public class FactionsPlayerListener implements Listener {
return false;
} else if (otherFaction.isSafeZone()) {
if (!Conf.safeZoneDenyUseage || Permission.MANAGE_SAFE_ZONE.has(player)) {
if (!Conf.safeZoneDenyUsage || Permission.MANAGE_SAFE_ZONE.has(player)) {
return true;
}
@@ -138,7 +144,7 @@ public class FactionsPlayerListener implements Listener {
return false;
} else if (otherFaction.isWarZone()) {
if (!Conf.warZoneDenyUseage || Permission.MANAGE_WAR_ZONE.has(player)) {
if (!Conf.warZoneDenyUsage || Permission.MANAGE_WAR_ZONE.has(player)) {
return true;
}
@@ -288,19 +294,6 @@ public class FactionsPlayerListener implements Listener {
return false;
}
/// <summary>
/// This checks if the current player can execute an action based on it's factions access and surroundings
/// It will grant access in the following priorities:
/// - If Faction Land is Owned and the Owner is the current player, or player is faction leader.
/// - If Faction Land is not Owned and my access value is not set to DENY
/// - If none of the filters above matches, then we consider access is set to ALLOW|UNDEFINED
/// This check does not performs any kind of bypass check (i.e.: me.isAdminBypassing())
/// </summary>
/// <param name="player">The player entity which the check will be made upon</param>
/// <param name="me">The Faction player object related to the player</param>
/// <param name="loc">The World location where the action is being executed</param>
/// <param name="myFaction">The faction of the player being checked</param>
/// <param name="access">The current's faction access permission for the action</param>
private static boolean CheckPlayerAccess(Player player, FPlayer me, FLocation loc, Faction factionToCheck, Access access, PermissableAction action, boolean pain) {
boolean doPain = pain && Conf.handleExploitInteractionSpam;
if (access != null && access != Access.UNDEFINED) {
@@ -736,7 +729,8 @@ public class FactionsPlayerListener implements Listener {
}
if (me.getAutoClaimFor() != null) {
me.attemptClaim(me.getAutoClaimFor(), event.getTo(), true);
if (Conf.disableFlightOnFactionClaimChange && event.getPlayer().getGameMode() != GameMode.CREATIVE) CmdFly.disableFlight(me);
if (Conf.disableFlightOnFactionClaimChange && event.getPlayer().getGameMode() != GameMode.CREATIVE)
CmdFly.disableFlight(me);
} else if (me.isAutoSafeClaimEnabled()) {
if (!Permission.MANAGE_SAFE_ZONE.has(player)) {
me.setIsAutoSafeClaimEnabled(false);
@@ -805,9 +799,8 @@ public class FactionsPlayerListener implements Listener {
Player player = event.getPlayer();
// Check if the material is bypassing protection
if (block == null) return; // clicked in air, apparently
if(event.getItem() != null) {
if (Conf.territoryBypassProtectedMaterials.contains(event.getItem().getType())) return;
}
if (Conf.territoryBypassProtectedMaterials.contains(block.getType())) return;
if (GetPermissionFromUsableBlock(event.getClickedBlock().getType()) != null) {
if (!canPlayerUseBlock(player, block, false)) {
event.setCancelled(true);
@@ -824,6 +817,7 @@ public class FactionsPlayerListener implements Listener {
return;
}
}
if (event.getItem() == null) return;
if (!playerCanUseItemHere(player, block.getLocation(), event.getItem().getType(), false)) {
event.setCancelled(true);
@@ -850,7 +844,6 @@ public class FactionsPlayerListener implements Listener {
&& event.hasItem() && event.getItem().getType() == XMaterial.BONE_MEAL.parseMaterial()) {
if (!FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), block.getLocation(), PermissableAction.BUILD.name(), true)) {
FPlayer me = FPlayers.getInstance().getById(event.getPlayer().getUniqueId().toString());
Faction otherFaction = Board.getInstance().getFactionAt(new FLocation(block.getLocation()));
Faction myFaction = me.getFaction();
me.msg(TL.ACTIONS_NOPERMISSION.toString().replace("{faction}", myFaction.getTag(me.getFaction())).replace("{action}", "use bone meal"));

View File

@@ -14,10 +14,7 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class MissionGUI implements FactionGUI {
private FactionsPlugin plugin;
@@ -55,6 +52,13 @@ public class MissionGUI implements FactionGUI {
if (section == null) {
return;
}
if(FactionsPlugin.getInstance().getConfig().getBoolean("DenyMissionsMoreThenOnce")) {
if (fPlayer.getFaction().getCompletedMissions().contains(missionName)) {
fPlayer.msg(TL.MISSION_ALREAD_COMPLETED);
return;
}
}
ConfigurationSection missionSection = section.getConfigurationSection("Mission");
if (missionSection == null) {
return;
@@ -72,30 +76,39 @@ public class MissionGUI implements FactionGUI {
if (configurationSection == null) {
return;
}
for (int fill = 0; fill < configurationSection.getInt("FillItem.Rows") * 9; ++fill) {
ItemStack fillItem = new ItemStack(XMaterial.matchXMaterial(configurationSection.getString("FillItem.Material")).parseItem());
ItemMeta meta = fillItem.getItemMeta();
meta.setDisplayName("");
fillItem.setItemMeta(meta);
inventory.setItem(fill, fillItem);
}
for (String key : configurationSection.getKeys(false)) {
ConfigurationSection section = configurationSection.getConfigurationSection(key);
int slot = section.getInt("Slot");
if (!key.equals("FillItem")) {
ConfigurationSection section = configurationSection.getConfigurationSection(key);
int slot = section.getInt("Slot");
ItemStack itemStack = XMaterial.matchXMaterial(section.getString("Material")).parseItem();
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', section.getString("Name")));
List<String> loreLines = new ArrayList<>();
for (String line : section.getStringList("Lore")) {
loreLines.add(ChatColor.translateAlternateColorCodes('&', line));
ItemStack itemStack = XMaterial.matchXMaterial(section.getString("Material")).parseItem();
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', section.getString("Name")));
List<String> loreLines = new ArrayList<>();
for (String line : section.getStringList("Lore")) {
loreLines.add(ChatColor.translateAlternateColorCodes('&', line));
}
if (fPlayer.getFaction().getMissions().containsKey(key)) {
Mission mission = fPlayer.getFaction().getMissions().get(key);
itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, true);
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
loreLines.add("");
loreLines.add(plugin.color(plugin.getConfig().getString("Mission-Progress-Format")
.replace("{progress}", String.valueOf(mission.getProgress()))
.replace("{total}", String.valueOf(section.getConfigurationSection("Mission").get("Amount")))));
}
itemMeta.setLore(loreLines);
itemStack.setItemMeta(itemMeta);
inventory.setItem(slot, itemStack);
slots.put(slot, key);
}
if (fPlayer.getFaction().getMissions().containsKey(key)) {
Mission mission = fPlayer.getFaction().getMissions().get(key);
itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, true);
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
loreLines.add("");
loreLines.add(plugin.color(plugin.getConfig().getString("Mission-Progress-Format")
.replace("{progress}", String.valueOf(mission.getProgress()))
.replace("{total}", String.valueOf(section.getConfigurationSection("Mission").get("Amount")))));
}
itemMeta.setLore(loreLines);
itemStack.setItemMeta(itemMeta);
inventory.setItem(slot, itemStack);
slots.put(slot, key);
}
}

View File

@@ -5,14 +5,17 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityBreedEvent;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityTameEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import java.util.List;
import java.util.stream.Collectors;
@@ -26,18 +29,18 @@ public class MissionHandler implements Listener {
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityBreed(EntityBreedEvent event) {
if (event.getEntity() == null) {
public void onPlayerTame(EntityTameEvent event) {
if (!(event.getOwner() instanceof Player)) {
return;
}
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(event.getEntity().getKiller());
FPlayer fPlayer = FPlayers.getInstance().getByPlayer((Player) event.getOwner());
if (fPlayer == null) {
return;
}
List<Mission> missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("breed")).collect(Collectors.toList());
List<Mission> missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("tame")).collect(Collectors.toList());
for (Mission mission2 : missions) {
ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName());
if (!event.getEntityType().toString().equals(section.getConfigurationSection("Mission").getString("EntityType"))) {
if (!event.getEntityType().toString().equals(section.getConfigurationSection("Mission").getString("EntityType")) && !section.getConfigurationSection("Mission").getString("EntityType").equalsIgnoreCase("ALL")) {
continue;
}
mission2.incrementProgress();
@@ -116,6 +119,37 @@ public class MissionHandler implements Listener {
}
}
@EventHandler
public void onPlayerEnchant(EnchantItemEvent e) {
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(e.getEnchanter());
if (fPlayer == null) {
return;
}
List<Mission> missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("enchant")).collect(Collectors.toList());
for (Mission mission2 : missions) {
ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName());
mission2.incrementProgress();
checkIfDone(fPlayer, mission2, section);
}
}
@EventHandler
public void onPlayerConsume(PlayerItemConsumeEvent e) {
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(e.getPlayer());
if (fPlayer == null) {
return;
}
List<Mission> missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("consume")).collect(Collectors.toList());
for (Mission mission2 : missions) {
ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName());
if (!e.getItem().toString().contains(section.getConfigurationSection("Mission").getString("Item")) && !section.getConfigurationSection("Mission").getString("Item").equalsIgnoreCase("ALL")) {
continue;
}
mission2.incrementProgress();
checkIfDone(fPlayer, mission2, section);
}
}
private void checkIfDone(FPlayer fPlayer, Mission mission, ConfigurationSection section) {
if (mission.getProgress() < section.getConfigurationSection("Mission").getLong("Amount")) {
return;
@@ -125,5 +159,6 @@ public class MissionHandler implements Listener {
}
fPlayer.getFaction().getMissions().remove(mission.getName());
fPlayer.getFaction().msg(TL.MISSION_MISSION_FINISHED, plugin.color(section.getString("Name")));
fPlayer.getFaction().getCompletedMissions().add(mission.getName());
}
}

View File

@@ -24,7 +24,7 @@ public class CmdShop extends FCommand {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("F-Shop.Enabled")) {
return;
}
ShopGUI.openShop(context.fPlayer);
new ShopGUIFrame(context.faction).buildGUI(context.fPlayer);
}
@Override

View File

@@ -1,93 +0,0 @@
package com.massivecraft.factions.shop;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.util.List;
public class ShopClickPersistence implements Listener {
public static String color(String line) {
line = ChatColor.translateAlternateColorCodes('&', line);
return line;
}
public static List<String> colorList(List<String> lore) {
for (int i = 0; i <= lore.size() - 1; i++) {
lore.set(i, color(lore.get(i)));
}
return lore;
}
public void runCommands(List<String> list, Player p) {
for (String cmd : list) {
cmd = cmd.replace("%player%", p.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd);
}
}
@EventHandler
public void click(InventoryClickEvent e) {
Inventory i = e.getClickedInventory();
Player p = (Player) e.getWhoClicked();
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
FPlayer fplayer = FPlayers.getInstance().getByPlayer(p);
if (e.getView().getTitle().equalsIgnoreCase(color(config.getString("F-Shop.GUI.Name")))) {
ItemStack item = e.getCurrentItem();
if (item == null) return;
String name = color(item.getItemMeta().getDisplayName());
e.setCancelled(true);
int t = e.getSlot();
int items = ShopConfig.getShop().getConfigurationSection("items").getKeys(false).size();
for (int a = 1; a <= items; a++) {
String s = a + "";
int slot = ShopConfig.getShop().getInt("items." + s + ".slot");
if (t == slot) {
String n = ShopConfig.getShop().getString("items." + s + ".name");
if (name.contains(color(n))) {
String c = ChatColor.stripColor(color(name));
c = c.replace(ChatColor.stripColor(color(n)), "");
c = c.replace(color(" ("), "");
c = c.replace(color(" Points)"), "");
int cost = Integer.parseInt(c);
if (fplayer.getFaction().getPoints() >= cost) {
fplayer.getFaction().setPoints(fplayer.getFaction().getPoints() - cost);
runCommands(ShopConfig.getShop().getStringList("items." + s + ".cmds"), fplayer.getPlayer());
for (FPlayer fplayerBuy : fplayer.getFaction().getFPlayers()) {
// if (fplayer == fme) { continue; } //Idk if I wanna not send the title to the player
fplayerBuy.getPlayer().sendMessage(TL.SHOP_BOUGHT_BROADCAST_FACTION.toString()
.replace("{player}", fplayer.getPlayer().getName())
.replace("{item}", name));
}
fplayer.sendMessage(color(ShopConfig.getShop().getString("prefix").replace("%item%", n).replace("%points%", cost + "")));
p.closeInventory();
} else {
fplayer.sendMessage(TL.SHOP_NOT_ENOUGH_POINTS.toString());
p.closeInventory();
}
} else {
e.setCancelled(true);
return;
}
}
}
}
}
}

View File

@@ -40,6 +40,7 @@ public class ShopConfig {
getShop().set("items.1.name", "&aTest Shop");
ArrayList lore = new ArrayList();
lore.add("&cFully Customizable Lore!");
lore.add("&b&l{cost} &7Points");
getShop().set("items.1.lore", lore);
ArrayList t = new ArrayList();
t.add("broadcast %player% bought Test Shop!");

View File

@@ -1,100 +0,0 @@
package com.massivecraft.factions.shop;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.LinkedList;
import java.util.List;
public class ShopGUI {
/*
TODO: OOP Shop, and Clean it Up.
Made simplistic format for shop for the time being until I get time.
*/
public static void openShop(FPlayer p) {
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
Faction fac = p.getFaction();
Inventory i = Bukkit.createInventory(null, FactionsPlugin.getInstance().getConfig().getInt("F-Shop.GUI.Size"), color(config.getString("F-Shop.GUI.Name")));
ItemStack glass = new ItemStack(XMaterial.BLACK_STAINED_GLASS_PANE.parseMaterial(), 1, (short) 7);
ItemMeta glassmeta = glass.getItemMeta();
glassmeta.setDisplayName(ChatColor.GOLD + " ");
glass.setItemMeta(glassmeta);
for (int fill = 0; fill < FactionsPlugin.getInstance().getConfig().getInt("F-Shop.GUI.Size"); ++fill) {
i.setItem(fill, glass);
}
int items = ShopConfig.getShop().getConfigurationSection("items").getKeys(false).size();
for (int shopitems = 1; shopitems <= items; shopitems++) {
String s = shopitems + "";
int slot = ShopConfig.getShop().getInt("items." + s + ".slot");
ItemStack material = XMaterial.matchXMaterial(ShopConfig.getShop().getString("items." + s + ".block")).parseItem();
// int size = ShopConfig.getShop().getInt("items." + s + ".size");
int cost = ShopConfig.getShop().getInt("items." + s + ".cost");
String name = ShopConfig.getShop().getString("items." + s + ".name") + " &f(" + cost + " Points)";
List<String> lore = ShopConfig.getShop().getStringList("items." + s + ".lore");
String command = ShopConfig.getShop().getString("items." + s + ".cmd");
String type = ShopConfig.getShop().getString("items." + s + ".type");
boolean glowing = ShopConfig.getShop().getBoolean("items." + s + ".glowing");
ItemStack count = new ItemStack(XMaterial.PAPER.parseMaterial(), 1);
ItemMeta countmeta = count.getItemMeta();
countmeta.setDisplayName(color(config.getString("F-Shop.GUI.Information.name")));
List<String> PointInfo = new LinkedList<>();
for (String list : config.getStringList("F-Shop.GUI.Information.lore")) {
PointInfo.add(list.replace("%points%", fac.getPoints() + ""));
}
countmeta.setLore(colorList(PointInfo));
count.setItemMeta(countmeta);
i.setItem(FactionsPlugin.getInstance().getConfig().getInt("F-Shop.GUI.Information.slot"), count);
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(color(name));
meta.addItemFlags();
if (glowing) {
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.addEnchant(Enchantment.DURABILITY, 1, true);
}
if (!glowing) {
meta.removeEnchant(Enchantment.DURABILITY);
}
if (lore.contains("")) {
meta.setLore(null);
} else {
meta.setLore(FactionsPlugin.getInstance().colorList(lore));
}
item.setItemMeta(meta);
i.setItem(slot, item);
}
p.getPlayer().openInventory(i);
}
public static String color(String line) {
line = ChatColor.translateAlternateColorCodes('&', line);
return line;
}
public static List<String> colorList(List<String> lore) {
for (int i = 0; i <= lore.size() - 1; i++) {
lore.set(i, color(lore.get(i)));
}
return lore;
}
}

View File

@@ -0,0 +1,117 @@
package com.massivecraft.factions.shop;
import com.github.stefvanschie.inventoryframework.Gui;
import com.github.stefvanschie.inventoryframework.GuiItem;
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ShopGUIFrame {
private Gui gui;
private String s;
public ShopGUIFrame(Faction f) {
gui = new Gui(FactionsPlugin.getInstance(),
FactionsPlugin.getInstance().getConfig().getInt("F-Shop.GUI.Rows", 4),
FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("F-Shop.GUI.Name")));
this.s = s;
}
public void buildGUI(FPlayer fplayer) {
PaginatedPane pane = new PaginatedPane(0, 0, 9, gui.getRows());
List<GuiItem> GUIItems = new ArrayList<>();
ItemStack dummy = buildDummyItem(fplayer.getFaction());
for (int x = 0; x <= (gui.getRows() * 9) - 1; x++) GUIItems.add(new GuiItem(dummy, e -> e.setCancelled(true)));
int items = ShopConfig.getShop().getConfigurationSection("items").getKeys(false).size();
for (int a = 1; a <= items; a++) {
String s = a + "";
int slot = ShopConfig.getShop().getInt("items." + s + ".slot");
Material material = XMaterial.matchXMaterial(ShopConfig.getShop().getString("items." + s + ".block")).parseMaterial();
int cost = ShopConfig.getShop().getInt("items." + s + ".cost");
String name = ShopConfig.getShop().getString("items." + s + ".name");
boolean glowing = ShopConfig.getShop().getBoolean("items." + s + ".glowing");
List<String> lore = ShopConfig.getShop().getStringList("items." + s + ".lore");
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(FactionsPlugin.instance.color(name));
meta.addItemFlags();
if (glowing) {
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.addEnchant(Enchantment.DURABILITY, 1, true);
}
if (!glowing) {
meta.removeEnchant(Enchantment.DURABILITY);
}
List<String> replacedLore = lore.stream().map(t -> t.replace("{cost}", cost + "")).collect(Collectors.toList());
meta.setLore(FactionsPlugin.instance.colorList(replacedLore));
item.setItemMeta(meta);
GUIItems.set(slot, new GuiItem(item, e -> {
e.setCancelled(true);
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getWhoClicked());
if (fplayer.getFaction().getPoints() >= cost) {
fplayer.getFaction().setPoints(fplayer.getFaction().getPoints() - cost);
runCommands(ShopConfig.getShop().getStringList("items." + s + ".cmds"), fplayer.getPlayer());
for (FPlayer fplayerBuy : fplayer.getFaction().getFPlayers()) {
fplayerBuy.getPlayer().sendMessage(TL.SHOP_BOUGHT_BROADCAST_FACTION.toString()
.replace("{player}", fplayer.getPlayer().getName())
.replace("{item}", ChatColor.stripColor(FactionsPlugin.getInstance().color(name)))
.replace("{cost}", cost + ""));
}
buildGUI(fme);
} else {
fplayer.msg(TL.SHOP_NOT_ENOUGH_POINTS);
}
}));
pane.populateWithGuiItems(GUIItems);
gui.addPane(pane);
gui.update();
gui.show(fplayer.getPlayer());
}
}
private ItemStack buildDummyItem(Faction f) {
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("F-Shop.GUI.dummy-item");
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
ItemMeta meta = item.getItemMeta();
if (meta != null) {
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name").replace("{points}", f.getPoints() + "")));
item.setItemMeta(meta);
}
return item;
}
public void runCommands(List<String> list, Player p) {
for (String cmd : list) {
cmd = cmd.replace("%player%", p.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd);
}
}
}

View File

@@ -34,6 +34,7 @@ public enum Permission {
DESCRIPTION("description"),
DISBAND("disband"),
DISBAND_ANY("disband.any"),
DISCORD("discord"),
FLY("fly"),
FOCUS("focus"),
GLOBALCHAT("globalchat"),
@@ -50,6 +51,7 @@ public enum Permission {
LEAVE("leave"),
LIST("list"),
LOCK("lock"),
LOCKSPAWNERS("lockspawners"),
LOGOUT("logout"),
MAP("map"),
MAPHEIGHT("mapheight"),
@@ -73,6 +75,7 @@ public enum Permission {
OPEN("open"),
OWNER("owner"),
OWNERLIST("ownerlist"),
SET_GUILD("setguild"),
SET_PEACEFUL("setpeaceful"),
SET_PERMANENT("setpermanent"),
SET_PERMANENTPOWER("setpermanentpower"),
@@ -89,6 +92,7 @@ public enum Permission {
RELOAD("reload"),
SAVE("save"),
SPAM("spam"),
SETDISCORD("setdiscord"),
SETHOME("sethome"),
SETHOME_ANY("sethome.any"),
SETSTRIKES("setstrikes"),

View File

@@ -174,13 +174,13 @@ public enum Relation implements Permissable {
if (isMember()) {
return false;
} else if (isEnemy()) {
return Conf.territoryEnemyDenyUseage;
return Conf.territoryEnemyDenyUsage;
} else if (isAlly()) {
return Conf.territoryAllyDenyUseage;
return Conf.territoryAllyDenyUsage;
} else if (isTruce()) {
return Conf.territoryTruceDenyUseage;
return Conf.territoryTruceDenyUsage;
} else {
return Conf.territoryDenyUseage;
return Conf.territoryDenyUsage;
}
}

View File

@@ -67,7 +67,14 @@ public enum FactionTag implements Tag {
return String.valueOf(fac.getFPlayersWhereOnline(true).size());
}
}),
OFFLINE_COUNT("{offline}", (fac) -> String.valueOf(fac.getFPlayers().size() - fac.getOnlinePlayers().size())),
OFFLINE_COUNT("offline", (fac, fp) -> {
if (fp != null && fp.isOnline()) {
return String.valueOf(fac.getFPlayers().size() - fac.getFPlayersWhereOnline(true, fp).size());
} else {
// Only console should ever get here.
return String.valueOf(fac.getFPlayersWhereOnline(false).size());
}
}),
FACTION_SIZE("{members}", (fac) -> String.valueOf(fac.getFPlayers().size())),
FACTION_KILLS("{faction-kills}", (fac) -> String.valueOf(fac.getKills())),
FACTION_DEATHS("{faction-deaths}", (fac) -> String.valueOf(fac.getDeaths())),
@@ -118,18 +125,15 @@ public enum FactionTag implements Tag {
if (!this.foundInString(text)) {
return text;
}
if (this.biFunction == null) {
return this.replace(text, faction);
String result = null;
if (this.biFunction != null) {
result = this.function == null ? this.biFunction.apply(faction, player) : this.function.apply(faction);
}
String result = this.biFunction.apply(faction, player);
return result == null ? null : text.replace(this.tag, result);
}
public String replace(String text, Faction faction) {
if (this.function == null || !this.foundInString(text)) {
return text;
}
String result = this.function.apply(faction);
return result == null ? null : text.replace(this.tag, result);
return this.replace(text, faction, null);
}
}

View File

@@ -1,5 +1,6 @@
package com.massivecraft.factions.tag;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.zcore.util.TL;
@@ -12,7 +13,8 @@ public enum GeneralTag implements Tag {
MAX_ALLIES("{max-allies}", () -> getRelation("ally")),
MAX_ENEMIES("{max-enemies}", () -> getRelation("enemy")),
MAX_TRUCES("{max-truces}", () -> getRelation("truce")),
FACTIONLESS("{factionless}", () -> String.valueOf(Factions.getInstance().getNone().getFPlayersWhereOnline(true).size())),
FACTIONLESS("factionless", () -> String.valueOf(FPlayers.getInstance().getOnlinePlayers().stream().filter(p -> !p.hasFaction()).count())),
FACTIONLESS_TOTAL("factionless-total", () -> String.valueOf(FPlayers.getInstance().getAllFPlayers().stream().filter(p -> !p.hasFaction()).count())),
TOTAL_ONLINE("{total-online}", () -> String.valueOf(Bukkit.getOnlinePlayers().size())),
;

View File

@@ -4,7 +4,9 @@ import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.zcore.util.TL;
import org.apache.commons.lang.time.DurationFormatUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.function.Function;
@@ -19,6 +21,19 @@ public enum PlayerTag implements Tag {
PLAYER_KILLS("{player-kills}", (fp) -> String.valueOf(fp.getKills())),
PLAYER_DEATHS("{player-deaths}", (fp) -> String.valueOf(fp.getDeaths())),
PLAYER_NAME("{name}", FPlayer::getName),
TOTAL_ONLINE_VISIBLE("total-online-visible", (fp) -> {
if (fp == null) {
return String.valueOf(Bukkit.getOnlinePlayers().size());
}
int count = 0;
Player me = fp.getPlayer();
for (Player player : Bukkit.getOnlinePlayers()) {
if (me.canSee(player)) {
count++;
}
}
return String.valueOf(count);
}),
;
private final String tag;

View File

@@ -28,6 +28,9 @@ public class CornerTask extends BukkitRunnable {
FLocation fLocation = surrounding.remove(0);
if (fPlayer.attemptClaim(fPlayer.getFaction(), fLocation, true)) {
++amount;
} else {
fPlayer.sendMessage(TL.COMMAND_CORNER_FAIL_WITH_FEEDBACK.toString().replace("&", "§") + amount);
cancel();
}
}
}

View File

@@ -1,6 +1,8 @@
package com.massivecraft.factions.util;
import com.google.gson.*;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.inventory.Inventory;
import java.lang.reflect.Type;
@@ -20,8 +22,6 @@ public class InventoryTypeAdapter implements JsonSerializer<Inventory>, JsonDese
@Override
public Inventory deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
JsonObject object = jsonElement.getAsJsonObject();
return InventoryUtil.fromBase64(object.get("contents").getAsString());
return InventoryUtil.fromBase64(object.get("contents").getAsString(), FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title")));
}
}

View File

@@ -1,5 +1,6 @@
package com.massivecraft.factions.util;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
@@ -71,11 +72,11 @@ public class InventoryUtil {
return toBase64(inventory);
}
public static Inventory fromBase64(String data) {
public static Inventory fromBase64(String data, String invName) {
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream);
Inventory inventory = Bukkit.getServer().createInventory(null, dataInput.readInt());
Inventory inventory = Bukkit.getServer().createInventory(null, dataInput.readInt(), FactionsPlugin.getInstance().color(invName));
// Read the serialized inventory
for (int i = 0; i < inventory.getSize(); i++) {

View File

@@ -0,0 +1,29 @@
package com.massivecraft.factions.util;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
public class PermissionList {
public static void generateFile() {
File file = new File(FactionsPlugin.getInstance().getDataFolder().toString() + "/" + "permissions.yml");
if (!file.exists()) {
try {
FactionsPlugin.getInstance().log("Generating a file with all permissions...");
file.createNewFile();
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
for (Permission p : Permission.values()) {
config.set(p.node, p.name());
}
config.save(file);
FactionsPlugin.getInstance().log("Generation complete you can find this file at " + FactionsPlugin.getInstance().getDataFolder().toString() + "/" + "permissions.yml");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -329,6 +329,6 @@ public abstract class MPlugin extends JavaPlugin {
}
public void log(Level level, Object msg) {
getLogger().log(level, "[" + this.getDescription().getFullName() + "] " + msg);
getLogger().log(level, "[" + this.getDescription().getVersion() + "] " + msg); // Full name is really ugly
}
}

View File

@@ -34,7 +34,8 @@ public class PermissableActionFrame {
List<GuiItem> GUIItems = new ArrayList<>();
ItemStack dumby = buildDummyItem();
// Fill background of GUI with dumbyitem & replace GUI assets after
for (int x = 0; x <= (gui.getRows() * 9) - 1; x++) GUIItems.add(new GuiItem(dumby, e -> e.setCancelled(true)));
for (int x = 0; x <= (gui.getRows() * 9) - 1; x++)
GUIItems.add(new GuiItem(dumby, e -> e.setCancelled(true)));
for (PermissableAction action : PermissableAction.values()) {
if (action.getSlot() == -1) continue;
GUIItems.set(action.getSlot(), new GuiItem(action.buildAsset(fplayer, perm), e -> {

View File

@@ -33,7 +33,8 @@ public class PermissableRelationFrame {
List<GuiItem> GUIItems = new ArrayList<>();
ItemStack dumby = buildDummyItem();
// Fill background of GUI with dumbyitem & replace GUI assets after
for (int x = 0; x <= (gui.getRows() * 9) - 1; x++) GUIItems.add(new GuiItem(dumby, e -> e.setCancelled(true)));
for (int x = 0; x <= (gui.getRows() * 9) - 1; x++)
GUIItems.add(new GuiItem(dumby, e -> e.setCancelled(true)));
ConfigurationSection sec = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.relation");
for (String key : sec.getConfigurationSection("slots").getKeys(false)) {
GUIItems.set(sec.getInt("slots." + key), new GuiItem(buildAsset("fperm-gui.relation.materials." + key, key), e -> {

View File

@@ -1,79 +0,0 @@
package com.massivecraft.factions.zcore.fupgrades;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.CropState;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.material.Crops;
import java.util.concurrent.ThreadLocalRandom;
public class CropUpgrades implements Listener {
@EventHandler
public void onCropGrow(BlockGrowEvent e) {
FLocation floc = new FLocation(e.getBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.CROP);
if (level != 0) {
int chance = -1;
switch (level) {
case 1:
chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-1");
break;
case 2:
chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-2");
break;
case 3:
chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-3");
break;
}
if (chance >= 0) {
int randomNum = ThreadLocalRandom.current().nextInt(1, 100 + 1);
if (randomNum <= chance)
growCrop(e);
}
}
}
}
private void growCrop(BlockGrowEvent e) {
if (e.getBlock().getType().equals(XMaterial.WHEAT.parseMaterial())) {
e.setCancelled(true);
Crops c = new Crops(CropState.RIPE);
BlockState bs = e.getBlock().getState();
bs.setData(c);
bs.update();
}
Block below = e.getBlock().getLocation().subtract(0, 1, 0).getBlock();
if (below.getType() == XMaterial.SUGAR_CANE.parseMaterial()) {
Block above = e.getBlock().getLocation().add(0, 1, 0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0, -2, 0).getBlock().getType() != Material.AIR) {
above.setType(XMaterial.SUGAR_CANE.parseMaterial());
}
} else if (below.getType() == Material.CACTUS) {
Block above = e.getBlock().getLocation().add(0, 1, 0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0, -2, 0).getBlock().getType() != Material.AIR) {
above.setType(Material.CACTUS);
}
}
}
}

View File

@@ -1,52 +0,0 @@
package com.massivecraft.factions.zcore.fupgrades;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
public class EXPUpgrade implements Listener {
@EventHandler
public void onDeath(EntityDeathEvent e) {
Entity killer = e.getEntity().getKiller();
if (killer == null)
return;
FLocation floc = new FLocation(e.getEntity().getLocation());
Faction faction = Board.getInstance().getFactionAt(floc);
if (!faction.isWilderness()) {
int level = faction.getUpgrade(UpgradeType.EXP);
if (level != 0) {
double multiplier = -1;
switch (level) {
case 1:
multiplier = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.EXP.EXP-Boost.level-1");
break;
case 2:
multiplier = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.EXP.EXP-Boost.level-2");
break;
case 3:
multiplier = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.EXP.EXP-Boost.level-3");
break;
}
if (multiplier >= 0)
spawnMoreExp(e, multiplier);
}
}
}
private void spawnMoreExp(EntityDeathEvent e, double multiplier) {
double newExp = e.getDroppedExp() * multiplier;
e.setDroppedExp((int) newExp);
}
}

View File

@@ -8,6 +8,7 @@ import com.massivecraft.factions.util.XMaterial;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -41,6 +42,11 @@ public class FUpgradesGUI implements Listener {
List<Integer> powerSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.Power.PowerItem.slots");
List<Integer> redSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.Redstone.RedstoneItem.slots");
List<Integer> memberSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.Members.MembersItem.slots");
List<Integer> reductSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.DamageReduct.ReduceItem.slots");
List<Integer> increaseSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.DamageIncrease.IncreaseItem.slots");
List<Integer> tntSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.TNT.TntItem.slots");
List<Integer> warpSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.Warps.WarpItem.slots");
List<Integer> armorSlots = FactionsPlugin.getInstance().getConfig().getIntegerList("fupgrades.MainMenu.Armor.ArmorItem.slots");
for (Integer cropSlot : cropSlots) if (cropSlot != -1) inventory.setItem(cropSlot, items[2]);
@@ -56,6 +62,16 @@ public class FUpgradesGUI implements Listener {
for (Integer memberSlot : memberSlots) if (memberSlot != -1) inventory.setItem(memberSlot, items[6]);
for (Integer reduceSlot : reductSlots) if (reduceSlot != -1) inventory.setItem(reduceSlot, items[7]);
for (Integer increaseSlot : increaseSlots) if (increaseSlot != -1) inventory.setItem(increaseSlot, items[8]);
for(Integer tntSlot : tntSlots) if(tntSlot != -1) inventory.setItem(tntSlot, items[9]);
for(Integer warpSlot : warpSlots) if(warpSlot != -1) inventory.setItem(warpSlot, items[10]);
for(Integer armorSlot : armorSlots) if(armorSlot != -1) inventory.setItem(armorSlot, items[11]);
fme.getPlayer().openInventory(inventory);
}
@@ -75,6 +91,11 @@ public class FUpgradesGUI implements Listener {
ItemStack powerItem = items[4];
ItemStack redItem = items[5];
ItemStack memberItem = items[6];
ItemStack reduceItem = items[7];
ItemStack increaseItem = items[8];
ItemStack tntItem = items[9];
ItemStack warpItem = items[10];
ItemStack armorItem = items[11];
if (e.getCurrentItem().equals(cropItem)) {
int cropLevel = fme.getFaction().getUpgrade(UpgradeType.CROP);
@@ -170,6 +191,24 @@ public class FUpgradesGUI implements Listener {
break;
}
}
} else if (e.getCurrentItem().equals(armorItem)) {
int armorLevel = fme.getFaction().getUpgrade(UpgradeType.REINFORCEDARMOR);
switch (armorLevel) {
case 3:
return;
case 2: {
if (upgradeItem(fme, UpgradeType.REINFORCEDARMOR, 3, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.Cost.level-3")))
break;
}
case 1: {
if (upgradeItem(fme, UpgradeType.REINFORCEDARMOR, 2, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.Cost.level-2")))
break;
}
case 0: {
if (upgradeItem(fme, UpgradeType.REINFORCEDARMOR, 1, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.Cost.level-1")))
break;
}
}
} else if (e.getCurrentItem().equals(memberItem)) {
int memberLevel = fme.getFaction().getUpgrade(UpgradeType.MEMBERS) + 1;
if (!FactionsPlugin.getInstance().getConfig().isSet("fupgrades.MainMenu.Members.Cost.level-" + memberLevel)) {
@@ -181,6 +220,52 @@ public class FUpgradesGUI implements Listener {
fme.getPlayer().closeInventory();
takeMoney(fme, cost);
}
} else if (e.getCurrentItem().equals(reduceItem)) {
int reduceLevel = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE) + 1;
if (!FactionsPlugin.getInstance().getConfig().isSet("fupgrades.MainMenu.DamageReduct.Cost.level-" + reduceLevel)) {
return;
}
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageReduct.Cost.level-" + reduceLevel);
if (hasMoney(fme, cost)) {
fme.getFaction().setUpgrade(UpgradeType.DAMAGEDECREASE, reduceLevel);
fme.getPlayer().closeInventory();
takeMoney(fme, cost);
}
} else if (e.getCurrentItem().equals(increaseItem)) {
int increaseLevel = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE) + 1;
if (!FactionsPlugin.getInstance().getConfig().isSet("fupgrades.MainMenu.DamageIncrease.Cost.level-" + increaseLevel)) {
return;
}
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageIncrease.Cost.level-" + increaseLevel);
if (hasMoney(fme, cost)) {
fme.getFaction().setUpgrade(UpgradeType.DAMAGEINCREASE, increaseLevel);
fme.getPlayer().closeInventory();
takeMoney(fme, cost);
}
} else if(e.getCurrentItem().equals(tntItem)){
int tntLevel = fme.getFaction().getUpgrade(UpgradeType.TNT) + 1;
if (!FactionsPlugin.getInstance().getConfig().isSet("fupgrades.MainMenu.TNT.Cost.level-" + tntLevel)) {
return;
}
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.TNT.Cost.level-" + tntLevel);
if (hasMoney(fme, cost)) {
fme.getFaction().setUpgrade(UpgradeType.TNT, tntLevel);
fme.getPlayer().closeInventory();
takeMoney(fme, cost);
updateTntBanks(fme.getFaction());
}
} else if(e.getCurrentItem().equals(warpItem)){
int warpLevel = fme.getFaction().getUpgrade(UpgradeType.WARP) + 1;
if (!FactionsPlugin.getInstance().getConfig().isSet("fupgrades.MainMenu.Warps.Cost.level-" + warpLevel)) {
return;
}
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Warps.Cost.level-" + warpLevel);
if (hasMoney(fme, cost)) {
fme.getFaction().setUpgrade(UpgradeType.WARP, warpLevel);
fme.getPlayer().closeInventory();
takeMoney(fme, cost);
setWarpLimit(fme.getFaction());
}
}
}
}
@@ -188,7 +273,7 @@ public class FUpgradesGUI implements Listener {
private void updateChests(Faction faction) {
String invName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title"));
for (Player player : faction.getOnlinePlayers()) {
for (HumanEntity player : faction.getChestInventory().getViewers()) {
if (player.getInventory().getTitle() != null && player.getInventory().getTitle().equalsIgnoreCase(invName))
player.closeInventory();
}
@@ -230,9 +315,9 @@ public class FUpgradesGUI implements Listener {
@SuppressWarnings("Duplicates")
private ItemStack[] buildItems(FPlayer fme) {
Material expMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.EXP.EXPItem.Type"));
byte expData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.EXP.EXPItem.Damage"));
Material expMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.EXP.EXPItem.Type"), expData);
int expAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.EXP.EXPItem.Amount");
short expData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.EXP.EXPItem.Damage") + "");
String expName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.EXP.EXPItem.Name"));
List<String> expLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.EXP.EXPItem.Lore"));
int expLevel = fme.getFaction().getUpgrade(UpgradeType.EXP);
@@ -253,9 +338,9 @@ public class FUpgradesGUI implements Listener {
expItem.setAmount(expLevel);
}
Material spawnerMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Spawners.SpawnerItem.Type"));
byte spawnerData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.SpawnerItem.Damage"));
Material spawnerMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Spawners.SpawnerItem.Type"), spawnerData);
int spawnerAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.SpawnerItem.Amount");
short spawnerData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.SpawnerItem.Damage") + "");
String spawnerName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Spawners.SpawnerItem.Name"));
List<String> spawnerLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Spawners.SpawnerItem.Lore"));
int spawnerLevel = fme.getFaction().getUpgrade(UpgradeType.SPAWNER);
@@ -265,9 +350,9 @@ public class FUpgradesGUI implements Listener {
}
Material cropMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Crops.CropItem.Type"));
byte cropData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.CropItem.Damage"));
Material cropMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Crops.CropItem.Type"), cropData);
int cropAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.CropItem.Amount");
short cropData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.CropItem.Damage") + "");
String cropName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Crops.CropItem.Name"));
List<String> cropLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Crops.CropItem.Lore"));
int cropLevel = fme.getFaction().getUpgrade(UpgradeType.CROP);
@@ -304,10 +389,9 @@ public class FUpgradesGUI implements Listener {
spawnerItem.setItemMeta(itemMeta);
spawnerItem.setAmount(spawnerLevel);
}
Material chestMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Chest.ChestItem.Type"));
int chesttAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Amount");
short chestData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Damage") + "");
byte chestData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Damage"));
Material chestMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Chest.ChestItem.Type"), chestData);
int chestAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Amount");
String chestName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Chest.ChestItem.Name", "&e&lUpgrade Chest Size"));
List<String> chestLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Chest.ChestItem.Lore"));
int chestlevel = fme.getFaction().getUpgrade(UpgradeType.CHEST);
@@ -318,7 +402,7 @@ public class FUpgradesGUI implements Listener {
chestLore.set(i, line);
}
ItemStack chestItem = FactionsPlugin.getInstance().createItem(chestMaterial, chesttAmt, chestData, chestName, chestLore);
ItemStack chestItem = FactionsPlugin.getInstance().createItem(chestMaterial, chestAmt, chestData, chestName, chestLore);
if (chestlevel >= 1) {
ItemMeta itemMeta = chestItem.getItemMeta();
@@ -331,9 +415,9 @@ public class FUpgradesGUI implements Listener {
chestItem.setAmount(chestlevel);
}
Material memberMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Members.MembersItem.Type"));
byte memberData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.MembersItem.Damage"));
Material memberMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Members.MembersItem.Type"), memberData);
int memberAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.MembersItem.Amount");
short memberData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.MembersItem.Damage") + "");
String memberName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Members.MembersItem.Name", "&e&lUpgrade Member Size"));
List<String> memberLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Members.MembersItem.Lore"));
int memberlevel = fme.getFaction().getUpgrade(UpgradeType.MEMBERS);
@@ -357,9 +441,9 @@ public class FUpgradesGUI implements Listener {
memberItem.setAmount(memberlevel);
}
Material powerMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Power.PowerItem.Type"));
byte powerData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Power.PowerItem.Damage"));
Material powerMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Power.PowerItem.Type"), powerData);
int powerAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Power.PowerItem.Amount");
short powerData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Power.PowerItem.Damage") + "");
String powerName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Power.PowerItem.Name"));
List<String> powerLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Power.PowerItem.Lore"));
int powerLevel = fme.getFaction().getUpgrade(UpgradeType.POWER);
@@ -384,9 +468,9 @@ public class FUpgradesGUI implements Listener {
powerItem.setAmount(powerLevel);
}
Material redMaterial = Material.getMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Redstone.RedstoneItem.Type"));
byte redData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.RedstoneItem.Damage"));
Material redMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Redstone.RedstoneItem.Type"), redData);
int redAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.RedstoneItem.Amount");
short redData = Short.parseShort(FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.RedstoneItem.Damage") + "");
String redName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Redstone.RedstoneItem.Name"));
List<String> redLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Redstone.RedstoneItem.Lore"));
int redLevel = fme.getFaction().getUpgrade(UpgradeType.REDSTONE);
@@ -407,11 +491,155 @@ public class FUpgradesGUI implements Listener {
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
redItem.setItemMeta(itemMeta);
redItem.setAmount(redLevel);
}
return new ItemStack[]{expItem, spawnerItem, cropItem, chestItem, powerItem, redItem, memberItem};
byte reduceData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageReduct.ReduceItem.Damage"));
Material reduceMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.DamageReduct.ReduceItem.Type"), reduceData);
int reduceAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageReduct.ReduceItem.Amount");
String reduceName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.DamageReduct.ReduceItem.Name"));
List<String> reduceLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.DamageReduct.ReduceItem.Lore"));
int reduceLevel = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE);
for (int i = 0; i <= reduceLore.size() - 1; i++) {
String line = reduceLore.get(i);
line = line.replace("{level}", reduceLevel + "");
reduceLore.set(i, line);
}
ItemStack reduceItem = FactionsPlugin.getInstance().createItem(reduceMaterial, reduceAmt, reduceData, reduceName, reduceLore);
reduceItem.getItemMeta().setLore(reduceLore);
if (reduceLevel >= 1) {
ItemMeta itemMeta = reduceItem.getItemMeta();
if (!FactionsPlugin.getInstance().mc17) {
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
reduceItem.setItemMeta(itemMeta);
reduceItem.setAmount(reduceLevel);
}
byte increaseData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageIncrease.IncreaseItem.Damage"));
Material increaseMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.DamageIncrease.IncreaseItem.Type"), increaseData);
int increaseAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageIncrease.IncreaseItem.Amount");
String increaseName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.DamageIncrease.IncreaseItem.Name"));
List<String> increaseLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.DamageIncrease.IncreaseItem.Lore"));
int increaseLevel = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE);
for (int i = 0; i <= increaseLore.size() - 1; i++) {
String line = increaseLore.get(i);
line = line.replace("{level}", increaseLevel + "");
increaseLore.set(i, line);
}
ItemStack increaseItem = FactionsPlugin.getInstance().createItem(increaseMaterial, increaseAmt, increaseData, increaseName, increaseLore);
increaseItem.getItemMeta().setLore(increaseLore);
if (increaseLevel >= 1) {
ItemMeta itemMeta = increaseItem.getItemMeta();
if (!FactionsPlugin.getInstance().mc17) {
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
increaseItem.setItemMeta(itemMeta);
increaseItem.setAmount(increaseLevel);
}
byte tntData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.TNT.TntItem.Damage"));
Material tntMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.TNT.TntItem.Type"), tntData);
int tntAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.TNT.TntItem.Amount");
String tntName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.TNT.TntItem.Name"));
List<String> tntLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.TNT.TntItem.Lore"));
int tntLevel = fme.getFaction().getUpgrade(UpgradeType.TNT);
for (int i = 0; i <= tntLore.size() - 1; i++) {
String line = tntLore.get(i);
line = line.replace("{level}", tntLevel + "");
tntLore.set(i, line);
}
ItemStack tntItem = FactionsPlugin.getInstance().createItem(tntMaterial, tntAmt, tntData, tntName, tntLore);
tntItem.getItemMeta().setLore(tntLore);
if (tntLevel >= 1) {
ItemMeta itemMeta = tntItem.getItemMeta();
if (!FactionsPlugin.getInstance().mc17) {
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
tntItem.setItemMeta(itemMeta);
tntItem.setAmount(tntLevel);
}
byte warpData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Warps.WarpItem.Damage"));
Material warpMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Warps.WarpItem.Type"), warpData);
int warpAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Warps.WarpItem.Amount");
String warpName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Warps.WarpItem.Name"));
List<String> warpLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Warps.WarpItem.Lore"));
int warpLevel = fme.getFaction().getUpgrade(UpgradeType.WARP);
for (int i = 0; i <= warpLore.size() - 1; i++) {
String line = warpLore.get(i);
line = line.replace("{level}", warpLevel + "");
warpLore.set(i, line);
}
ItemStack warpItem = FactionsPlugin.getInstance().createItem(warpMaterial, warpAmt, warpData, warpName, warpLore);
warpItem.getItemMeta().setLore(warpLore);
if (warpLevel >= 1) {
ItemMeta itemMeta = warpItem.getItemMeta();
if (!FactionsPlugin.getInstance().mc17) {
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
warpItem.setItemMeta(itemMeta);
warpItem.setAmount(warpLevel);
}
byte armorData = (byte) (FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.ArmorItem.Damage"));
Material armorMaterial = XMaterial.parseMaterial(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Armor.ArmorItem.Type"), warpData);
int armorAmt = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.ArmorItem.Amount");
String armorName = FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Armor.ArmorItem.Name"));
List<String> armorLore = FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fupgrades.MainMenu.Armor.ArmorItem.Lore"));
int armorLevel = fme.getFaction().getUpgrade(UpgradeType.REINFORCEDARMOR);
for (int i = 0; i <= armorLore.size() - 1; i++) {
String line = armorLore.get(i);
line = line.replace("{level}", armorLevel + "");
armorLore.set(i, line);
}
ItemStack armorItem = FactionsPlugin.getInstance().createItem(armorMaterial, armorAmt, armorData, armorName, armorLore);
armorItem.getItemMeta().setLore(armorLore);
if (armorLevel >= 1) {
ItemMeta itemMeta = armorItem.getItemMeta();
if (!FactionsPlugin.getInstance().mc17) {
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
armorItem.setItemMeta(itemMeta);
armorItem.setAmount(armorLevel);
}
return new ItemStack[]{expItem, spawnerItem, cropItem, chestItem, powerItem, redItem, memberItem, reduceItem, increaseItem, tntItem, warpItem, armorItem};
}
private void updateTntBanks(Faction faction) {
int level = faction.getUpgrade(UpgradeType.TNT);
int size = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.TNT.tnt-limit.level-" + (level));
faction.setTntBankLimit(size);
}
private void setWarpLimit(Faction faction) {
int level = faction.getUpgrade(UpgradeType.WARP);
int size = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Warps.warp-limit.level-" + (level));
faction.setWarpsLimit(size);
}
private boolean hasMoney(FPlayer fme, int amt) {

View File

@@ -1,34 +0,0 @@
package com.massivecraft.factions.zcore.fupgrades;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFromToEvent;
import java.util.List;
public class RedstoneUpgrade implements Listener {
@EventHandler
public void onWaterRedstone(BlockFromToEvent e) {
List<String> unbreakable = FactionsPlugin.getInstance().getConfig().getStringList("no-water-destroy.Item-List");
String block = e.getToBlock().getType().toString();
FLocation floc = new FLocation(e.getToBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.REDSTONE);
if (level != 0) {
if (level == 1) {
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.Cost");
}
if (unbreakable.contains(block)) {
e.setCancelled(true);
}
}
}
}
}

View File

@@ -1,41 +0,0 @@
package com.massivecraft.factions.zcore.fupgrades;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.SpawnerSpawnEvent;
public class SpawnerUpgrades implements Listener {
@EventHandler
public void onSpawn(SpawnerSpawnEvent e) {
FLocation floc = new FLocation(e.getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.SPAWNER);
if (level != 0) {
switch (level) {
case 1:
lowerSpawnerDelay(e, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.Spawner-Boost.level-1"));
break;
case 2:
lowerSpawnerDelay(e, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.Spawner-Boost.level-2"));
break;
case 3:
lowerSpawnerDelay(e, FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.Spawner-Boost.level-3"));
break;
}
}
}
}
private void lowerSpawnerDelay(SpawnerSpawnEvent e, double multiplier) {
int lowerby = (int) Math.round(e.getSpawner().getDelay() * multiplier);
e.getSpawner().setDelay(e.getSpawner().getDelay() - lowerby);
}
}

View File

@@ -2,7 +2,18 @@ package com.massivecraft.factions.zcore.fupgrades;
public enum UpgradeType {
CHEST("Chest"), SPAWNER("Spawner"), EXP("Exp"), CROP("Crop"), POWER("Power"), REDSTONE("Redstone"), MEMBERS("Members");
CHEST("Chest"),
SPAWNER("Spawner"),
EXP("Exp"),
CROP("Crop"),
POWER("Power"),
REDSTONE("Redstone"),
MEMBERS("Members"),
TNT("TNT"),
WARP("Warps"),
DAMAGEINCREASE("DamageIncrease"),
DAMAGEDECREASE("DamageDecrease"),
REINFORCEDARMOR("ReinforcedArmor");
private String id;

View File

@@ -0,0 +1,194 @@
package com.massivecraft.factions.zcore.fupgrades;
import com.massivecraft.factions.*;
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.CropState;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.SpawnerSpawnEvent;
import org.bukkit.event.player.PlayerItemDamageEvent;
import org.bukkit.material.Crops;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class UpgradesListener implements Listener {
@EventHandler
public void onDeath(EntityDeathEvent e) {
Entity killer = e.getEntity().getKiller();
if (killer == null || !(killer instanceof Player)) {
return;
}
FLocation floc = new FLocation(e.getEntity().getLocation());
Faction faction = Board.getInstance().getFactionAt(floc);
if (!faction.isWilderness()) {
int level = faction.getUpgrade(UpgradeType.EXP);
double multiplier = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.EXP.EXP-Boost.level-" + level);
if (level != 0 && multiplier > 0.0) {
this.spawnMoreExp(e, multiplier);
}
}
}
private void spawnMoreExp(EntityDeathEvent e, double multiplier) {
double newExp = e.getDroppedExp() * multiplier;
e.setDroppedExp((int) newExp);
}
@EventHandler
public void onSpawn(SpawnerSpawnEvent e) {
FLocation floc = new FLocation(e.getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.SPAWNER);
if (level == 0) {
return;
}
this.lowerSpawnerDelay(e, FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.Spawners.Spawner-Boost.level-" + level));
}
}
private void lowerSpawnerDelay(SpawnerSpawnEvent e, double multiplier) {
int lowerby = (int) Math.round(e.getSpawner().getDelay() * multiplier);
e.getSpawner().setDelay(e.getSpawner().getDelay() - lowerby);
}
@EventHandler
public void onCropGrow( BlockGrowEvent e) {
FLocation floc = new FLocation(e.getBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.CROP);
int chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-" + level);
if (level == 0 || chance == 0) {
return;
}
int randomNum = ThreadLocalRandom.current().nextInt(1, 101);
if (randomNum <= chance) {
this.growCrop(e);
}
}
}
private void growCrop( BlockGrowEvent e) {
if (e.getBlock().getType().equals(XMaterial.WHEAT.parseMaterial())) {
e.setCancelled(true);
Crops c = new Crops(CropState.RIPE);
BlockState bs = e.getBlock().getState();
bs.setData(c);
bs.update();
}
Block below = e.getBlock().getLocation().subtract(0.0, 1.0, 0.0).getBlock();
if (below.getType() == XMaterial.SUGAR_CANE.parseMaterial()) {
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) {
above.setType(XMaterial.SUGAR_CANE.parseMaterial());
}
}
else if (below.getType() == Material.CACTUS) {
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) {
above.setType(Material.CACTUS);
}
}
}
@EventHandler
public static void onDamageReduction(EntityDamageByEntityEvent e) {
if (e.isCancelled()) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageReduction.DamageReductionPercent.level-" + level);
e.setDamage(damage - damage / 100.0 * increase);
}
}
@EventHandler
public void onWaterRedstone(BlockFromToEvent e) {
List<String> unbreakable = FactionsPlugin.getInstance().getConfig().getStringList("no-water-destroy.Item-List");
String block = e.getToBlock().getType().toString();
FLocation floc = new FLocation(e.getToBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.REDSTONE);
if (level != 0) {
if (level == 1) {
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.Cost");
}
if (unbreakable.contains(block)) {
e.setCancelled(true);
}
}
}
}
@EventHandler
public static void onDamageIncrease(EntityDamageByEntityEvent e) {
if (e == null) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
if(e.getDamager().hasMetadata("NPC") || e.getEntity().hasMetadata("NPC")) return;
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if(floc == null) return;
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageIncrease.DamageIncreasePercent.level-" + level);
e.setDamage(damage + damage / 100.0 * increase);
}
}
@EventHandler
public void onArmorDamage(PlayerItemDamageEvent e) {
if (FPlayers.getInstance().getByPlayer(e.getPlayer()) == null) {
return;
}
if (e.getItem().getType().toString().contains("LEGGINGS") || e.getItem().getType().toString().contains("CHESTPLATE") || e.getItem().getType().toString().contains("HELMET") || e.getItem().getType().toString().contains("BOOTS")) {
int lvl = FPlayers.getInstance().getByPlayer(e.getPlayer()).getFaction().getUpgrade(UpgradeType.REINFORCEDARMOR);
double drop = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.Armor.Armor-HP-Drop.level-" + lvl);
int newDamage = (int) Math.round(e.getDamage() - e.getDamage() * drop);
e.setDamage(newDamage);
}
}
}

View File

@@ -805,7 +805,7 @@ public abstract class MemoryFPlayer implements FPlayer {
int factionBuffer = FactionsPlugin.getInstance().getConfig().getInt("hcf.buffer-zone", 0);
int worldBuffer = FactionsPlugin.getInstance().getConfig().getInt("world-border.buffer", 0);
if (Conf.worldGuardChecking && Worldguard.checkForRegionsInChunk(flocation)) {
if (Conf.worldGuardChecking && Worldguard.checkForRegionsInChunk(flocation) && !this.isAdminBypassing()) {
// Checks for WorldGuard regions in the chunk attempting to be claimed
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_PROTECTED.toString());
} else if (flocation.isOutsideWorldBorder(FactionsPlugin.getInstance().getConfig().getInt("world-border.buffer", 0))) {
@@ -1226,7 +1226,7 @@ public abstract class MemoryFPlayer implements FPlayer {
}
LandClaimEvent claimEvent = new LandClaimEvent(flocation, forFaction, this);
Bukkit.getScheduler().runTask(FactionsPlugin.getInstance(), () -> Bukkit.getPluginManager().callEvent(claimEvent));
Bukkit.getPluginManager().callEvent(claimEvent);
if (claimEvent.isCancelled()) {
return false;
}

View File

@@ -80,6 +80,19 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
private Map<UUID, Integer> playerWallCheckCount;
private Map<UUID, Integer> playerBufferCheckCount;
private boolean weeWoo;
private int tntBankSize;
private int warpLimit;
private double reinforcedArmor;
private List<String> completedMissions;
protected String discord;
private String factionChatChannelId;
private String wallNotifyChannelId;
private String bufferNotifyChannelId;
private String weeWooChannelId;
private String notifyFormat;
private String weeWooFormat;
private String guildId;
private String memberRoleId;
// -------------------------------------------- //
@@ -109,6 +122,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
this.checks = new ConcurrentHashMap<>();
this.playerWallCheckCount = new ConcurrentHashMap<>();
this.playerBufferCheckCount = new ConcurrentHashMap<>();
this.completedMissions = new ArrayList<>();
this.wallNotifyChannelId = null;
this.bufferNotifyChannelId = null;
this.notifyFormat = "@everyone, check %type%";
this.weeWooFormat = "@everyone, we're being raided! Get online!";
this.memberRoleId = null;
resetPerms(); // Reset on new Faction so it has default values.
}
@@ -127,6 +146,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
money = old.money;
powerBoost = old.powerBoost;
missions = new ConcurrentHashMap<>();
this.completedMissions = new ArrayList<>();
relationWish = old.relationWish;
claimOwnership = old.claimOwnership;
fplayers = new HashSet<>();
@@ -211,6 +231,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return hasWarpPassword(warp) && warpPasswords.get(warp.toLowerCase()).equals(password);
}
public String getDiscord() {
return this.discord;
}
public void setDiscord(String link) {
this.discord = link;
}
public String getPaypal() {
return this.paypal;
}
@@ -420,8 +448,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
@Override
public Inventory getChestInventory() {
if (chest != null) return chest;
if (chest == null) {
this.chest = Bukkit.createInventory(null, getChestSize(), FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title")));
return chest;
}
return chest;
}
private int getChestSize() {
int size = 9;
switch (getUpgrade(UpgradeType.CHEST)) {
case 1:
@@ -434,8 +468,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
size = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.Chest-Size.level-3") * 9;
break;
}
chest = Bukkit.createInventory(null, size, FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fchest.Inventory-Title")));
return chest;
return size;
}
@@ -452,6 +485,39 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
bannerSerialized = banner.serialize();
}
@Override
public int getWarpsLimit() {
if (warpLimit == 0) {
return FactionsPlugin.getInstance().getConfig().getInt("max-warps");
}
return warpLimit;
}
@Override
public void setWarpsLimit(int warpLimit) {
this.warpLimit = warpLimit;
}
@Override
public int getTntBankLimit() {
if (tntBankSize == 0) {
return FactionsPlugin.getInstance().getConfig().getInt("ftnt.Bank-Limit");
}
return tntBankSize;
}
@Override
public void setTntBankLimit(int newLimit) {
tntBankSize = newLimit;
}
@Override
public double getReinforcedArmor() { return this.reinforcedArmor; }
@Override
public void setReinforcedArmor(double newPercent) { reinforcedArmor = newPercent; }
@Override
public ItemStack getBanner() {
if (bannerSerialized == null) {
@@ -468,7 +534,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.wallCheckMinutes;
}
public void setWallCheckMinutes(final int wallCheckMinutes) {
public void setWallCheckMinutes(int wallCheckMinutes) {
this.wallCheckMinutes = wallCheckMinutes;
}
@@ -476,7 +542,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.bufferCheckMinutes;
}
public void setBufferCheckMinutes(final int bufferCheckMinutes) {
public void setBufferCheckMinutes(int bufferCheckMinutes) {
this.bufferCheckMinutes = bufferCheckMinutes;
}
@@ -492,11 +558,91 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.playerWallCheckCount;
}
@Override
public String getGuildId() {
return this.guildId;
}
@Override
public void setGuildId(final String guildId) {
this.guildId = guildId;
}
@Override
public String getMemberRoleId() {
return this.memberRoleId;
}
@Override
public String getFactionChatChannelId() {
return this.factionChatChannelId;
}
@Override
public String getWallNotifyChannelId() {
return this.wallNotifyChannelId;
}
@Override
public void setWallNotifyChannelId(final String wallNotifyChannelId) {
this.wallNotifyChannelId = wallNotifyChannelId;
}
@Override
public String getBufferNotifyChannelId() {
return this.bufferNotifyChannelId;
}
@Override
public void setBufferNotifyChannelId(final String bufferNotifyChannelId) {
this.bufferNotifyChannelId = bufferNotifyChannelId;
}
@Override
public String getWeeWooChannelId() {
return this.weeWooChannelId;
}
@Override
public void setWeeWooChannelId(final String weeWooChannelId) {
this.weeWooChannelId = weeWooChannelId;
}
@Override
public String getNotifyFormat() {
return this.notifyFormat;
}
@Override
public void setNotifyFormat(final String notifyFormat) {
this.notifyFormat = notifyFormat;
}
@Override
public String getWeeWooFormat() {
return this.weeWooFormat;
}
@Override
public void setWeeWooFormat(final String weeWooFormat) {
this.weeWooFormat = weeWooFormat;
}
@Override
public void setFactionChatChannelId(final String factionChatChannelId) {
this.factionChatChannelId = factionChatChannelId;
}
@Override
public void setMemberRoleId(final String memberRoleId) {
this.memberRoleId = memberRoleId;
}
public boolean isWeeWoo() {
return this.weeWoo;
}
public void setWeeWoo(final boolean weeWoo) {
public void setWeeWoo(boolean weeWoo) {
this.weeWoo = weeWoo;
}
@@ -556,6 +702,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.tag;
}
public void checkPerms() {
if (this.permissions == null || this.permissions.isEmpty()) {
this.resetPerms();
}
}
public void setTag(String str) {
if (Conf.factionTagForceUpperCase) {
str = str.toUpperCase();
@@ -1219,6 +1371,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.missions;
}
@Override
public List<String> getCompletedMissions() {return this.completedMissions;}
public void clearAllClaimOwnership() {
claimOwnership.clear();
}

View File

@@ -33,7 +33,7 @@ public class JSONBoard extends MemoryBoard {
coords = entry.getKey().getCoordString();
id = entry.getValue();
if (!worldCoordIds.containsKey(worldName)) {
worldCoordIds.put(worldName, new TreeMap<String, String>());
worldCoordIds.put(worldName, new TreeMap<>());
}
worldCoordIds.get(worldName).put(coords, id);

View File

@@ -1,6 +1,5 @@
package com.massivecraft.factions.zcore.persist.json;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -39,12 +38,7 @@ public class JSONFPlayers extends MemoryFPlayers {
}
public void convertFrom(MemoryFPlayers old) {
this.fPlayers.putAll(Maps.transformValues(old.fPlayers, new Function<FPlayer, JSONFPlayer>() {
@Override
public JSONFPlayer apply(FPlayer arg0) {
return new JSONFPlayer((MemoryFPlayer) arg0);
}
}));
this.fPlayers.putAll(Maps.transformValues(old.fPlayers, arg0 -> new JSONFPlayer((MemoryFPlayer) arg0)));
forceSave();
FPlayers.instance = this;
}

View File

@@ -91,6 +91,7 @@ public class JSONFactions extends MemoryFactions {
for (Entry<String, JSONFaction> entry : data.entrySet()) {
String id = entry.getKey();
Faction f = entry.getValue();
f.checkPerms();
f.setId(id);
this.updateNextIdForId(id);
needsUpdate += whichKeysNeedMigration(f.getInvites()).size();
@@ -240,12 +241,7 @@ public class JSONFactions extends MemoryFactions {
@Override
public void convertFrom(MemoryFactions old) {
this.factions.putAll(Maps.transformValues(old.factions, new Function<Faction, JSONFaction>() {
@Override
public JSONFaction apply(Faction arg0) {
return new JSONFaction((MemoryFaction) arg0);
}
}));
this.factions.putAll(Maps.transformValues(old.factions, arg0 -> new JSONFaction((MemoryFaction) arg0)));
this.nextId = old.nextId;
forceSave();
Factions.instance = this;

View File

@@ -123,6 +123,7 @@ public enum TL {
COMMAND_CORNER_CANT_CLAIM("&c&l[!] &cYou may not claim this corner!"),
COMMAND_CORNER_CLAIMED("\n&2&l[!] &aYou have claimed the corner successfully, totalling in &b%1$d &achunks!\n"),
COMMAND_CORNER_ATTEMPTING_CLAIM("&c&l[!] &7Attempting to claim corner..."),
COMMAND_CORNER_FAIL_WITH_FEEDBACK("&c&l[!] &cOne or more claims in this corner could not be claimed! Total chunks claimed:&b "),
COMMAND_CORNER_NOT_CORNER("&c&l[!] &7You must be in a corner to use this command!"),
COMMAND_CORNER_DESCRIPTION("claim a corner at world border"),
COMMAND_CORNERLIST_DESCRIPTION("list of all corners"),
@@ -200,6 +201,8 @@ public enum TL {
COMMAND_BYPASS_DESCRIPTION("Enable admin bypass mode"),
COMMAND_BANNER_DESCRIPTION("Turn a held banner into a war banner"),
BANNER_CANNOT_BREAK("&c&l[!] &7You may not break a faction banner!"),
COMMAND_BANNER_NOBANNER("&c&l[!] &cPlease set a banner using /f setbanner"),
COMMAND_BANNER_NOTENOUGHMONEY("&c&l[!] &7You do&c not&7 have enough money"),
COMMAND_BANNER_MONEYTAKE("&c&l[!] $&c{amount} &7has been taken from your account."),
COMMAND_BANNER_SUCCESS("&c&l[!] &7You have created a &c&lWarBanner!"),
@@ -237,6 +240,8 @@ public enum TL {
COMMAND_CLAIMLINE_ABOVEMAX("&c&l[!]&7 The &cmaximum&7 limit for claim line is &c%s&7."),
COMMAND_CLAIMLINE_NOTVALID("&c&l[!]&7 &c%s&7 is not a &ccardinal &7direction. You may use &cnorth&7, &ceast&7, &csouth &7or &cwest&7."),
CHEST_ITEM_DENIED_TRANSFER("&c&l[!] &7You may not transfer &b%1$s &7into your factions chest!"),
COMMAND_CONFIG_NOEXIST("&c&l[!]&7 No configuration setting \"&c%1$s&7\" exists."),
COMMAND_CONFIG_SET_TRUE("\" option set to true (enabled)."),
COMMAND_CONFIG_SET_FALSE("\" option set to false (disabled)."),
@@ -315,6 +320,25 @@ public enum TL {
CHECK_LEADERBOARD_LINE("&f%1$s. &d%2$s: &f%3$s (%4$s Buffer, %5$s Walls)"),
CHECK_LEADERBOARD_NO_DATA("&8No data"),
//DISCORD
WEEWOO_ALREADY_STARTED_DISCORD("Weewoo already started"),
WEEWOO_ALREADY_STARTED_INGAME("&cWeewoo already started"),
WEEWOO_STARTED_DISCORD("Weewoo started by %1$s"),
WEEWOO_ALREADY_STOPPED_DISCORD("Weewoo already stopped"),
WEEWOO_STOPPED_DISCORD("Weewoo stopped by %1$s"),
INVITE_BOT_USAGE("Gets the invite for the Discord bot"),
SET_GUILD_ID_USAGE("Sets the guild id for the faction"),
SET_GUILD_ID_SUCCESS("&aSuccesfully set guild id"),
SET_GUILD_ID_INVALID_ID("&cInvalid guild id (is the bot in the guild?)"),
SET_GUILD_ID_UNABLE_TO_MESSAGE_GUILD_OWNER("&cUnable to message guild owner"),
SET_GUILD_ID_TIMED_OUT_MINECRAFT("&cTimed out"),
SET_GUILD_ID_TIMED_OUT_DISCORD("Timed out"),
SET_GUILD_ID_GUILD_ALREADY_LINKED("&cThat guild is already linked to a faction"),
SET_GUILD_ID_RESET_ID("&cGuild id removed"),
SET_GUILD_ID_PMING_OWNER("&aNow Direct messaging the Discord server owner to approve the link, times out in 15 seconds."),
CANT_FORCE_SET_GUILD_ID("&cYou cannot forcefully set guild ids for other guilds."),
COMMAND_DEINVITE_CANDEINVITE("&c&l[!]&7 Players you can &cdeinvite: "),
COMMAND_DEINVITE_CLICKTODEINVITE("&c&l[!]&7 Click to &crevoke&7 invite for &c%1$s"),
COMMAND_DEINVITE_ALREADYMEMBER("&c&l[!]&7 &c%1$s&7 is already a member of &c%2$s"),
@@ -564,6 +588,18 @@ public enum TL {
COMMAND_OWNERLIST_OWNERS("&c&l[!]&7 Current owner(s) of this land: %1$s"),
COMMAND_OWNERLIST_DESCRIPTION("List owner(s) of this claimed land"),
COMMAND_DISCORDSET_ADMIN_SUCCESSFUL("&c&l[!] &7You have set &b%1$s's &7discord to &b%2$s&7."),
COMMAND_DISCORDSET_ADMIN_FAILED("&c&l[!] &b%1$s &7is not an discord link!"),
COMMAND_DISCORDSET_NOTEMAIL("&c&l[!] &b%1$s &7is not an discord link!"),
COMMAND_DISCORDSET_DESCRIPTION("&c&l[!] &7Set the link of your factions discord."),
COMMAND_DISCORDSET_SUCCESSFUL("&c&l[!] &7Successfully set your factions discord link - &b%1$s&7."),
DISCORD_PLAYER_DISCORD("&c&l[!] &7You're factions discord link is: &b%1$s&7."),
COMMAND_DISCORD_NOTSET("&c&l[!] &7Your faction does not have their discord set!"),
COMMAND_DISCORDSEE_FACTION_NOTSET("&c&l[!] &b%1$s's &7discord has not yet been set!"),
COMMAND_DISCORDSEE_FACTION_DISCORD("&c&l[!] &b%1$s's &7faction has their discord link set to &b%2$s&7."),
COMMAND_DISCORDSEE_DESCRIPTION("&c&l[!] &7View a specific factions discord link with &b/f discord <faction>&b."),
PAYPALSEE_PLAYER_PAYPAL("&c&l[!] &7You're factions paypal is: &b%1$s&7."),
COMMAND_PAYPAL_NOTSET("&c&l[!] &7Your faction does not have their paypal set!"),
COMMAND_PAYPALSET_ADMIN_SUCCESSFUL("&c&l[!] &7You have set &b%1$s's &7paypal to &b%2$s&7."),
@@ -704,6 +740,10 @@ public enum TL {
COMMAND_SETMAXVAULTS_SUCCESS("&aSet max vaults for &e%s &ato &b%d"),
COMMAND_ONCOOOLDOWN("&c&l[!] &7You cannot use this command for another &b%1$s &7seconds."),
COMMAND_SPAWNER_LOCK_TOGGLED("&c&l[!] &7You have set placement of spawners to %1$s"),
COMMAND_SPAWNER_LOCK_DESCRIPTION("enable/disable placement of spawners"),
COMMAND_SPAWNER_LOCK_CANNOT_PLACE("&c&l[!] &7Placement of spawners has been temporarily disabled!"),
COMMAND_STRIKES_CHANGED("&c&l[!] &7You have set &c%1$s's &7strikes to &c%2$s"),
COMMAND_STRIKES_INFO("&c&l[!] &7%1$s has %2$s strikes"),
COMMAND_STRIKES_TARGET_INVALID("&c&l[!] &7The faction %1$s is invalid."),
@@ -715,7 +755,7 @@ public enum TL {
COMMAND_STRIKESINFO_DESCRIPTION("Get a faction's strikes"),
SHOP_NOT_ENOUGH_POINTS("&c&l[!] &7Your faction does not have enough points to purchase this!"),
SHOP_BOUGHT_BROADCAST_FACTION("\n&c&l[!] &e&lFactionShop » &b{player} &7bought &b{item}&7!\n"),
SHOP_BOUGHT_BROADCAST_FACTION("\n&c&l[!] &e&lFactionShop » &b{player} &7bought &b{item}&7 for &b{cost} &7points!\n"),
COMMAND_VIEWCHEST_DESCRIPTION("view a factions chest/pv"),
@@ -842,7 +882,7 @@ public enum TL {
COMMAND_TNT_WIDTHDRAW_SUCCESS("&cSuccessfully withdrew tnt."),
COMMAND_TNT_WIDTHDRAW_NOTENOUGH("&cNot enough tnt in bank."),
COMMAND_TNT_DEPOSIT_NOTENOUGH("&cNot enough tnt in tnt inventory."),
COMMAND_TNT_AMOUNT("&cYour faction has {amount} tnt in the tnt bank."),
COMMAND_TNT_AMOUNT("&cYour faction has %1$s tnt out of %2$s in the tnt bank."),
COMMAND_TNT_POSITIVE("&cPlease use positive numbers!"),
COMMAND_TNT_DESCRIPTION("add/widthraw from faction's tnt bank"),
COMMAND_TNT_WIDTHDRAW_NOTENOUGH_SPACE("&cNot enough space in your inventory."),
@@ -928,7 +968,7 @@ public enum TL {
CLAIM_MEMBERS("Factions must have at least %s members to claim land."),
CLAIM_SAFEZONE("You can not claim a Safe Zone."),
CLAIM_WARZONE("You can not claim a War Zone."),
CLAIM_POWER("You can't claim more land!You need more power!"),
CLAIM_POWER("You can't claim more land! You need more power!"),
CLAIM_LIMIT("Limit reached. You can't claim more land!"),
CLAIM_ALLY("You can't claim the land of your allies."),
CLAIM_CONTIGIOUS("You can only claim additional land which is connected to your first claim or controlled by another faction!"),
@@ -993,6 +1033,7 @@ public enum TL {
MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"),
MISSION_ALREAD_COMPLETED("&c&l[!] &7You may not restart a mission you have already completed"),
MISSION_MISSION_ACTIVE("&c&l[!] &7This mission is currently active!"),
MISSION_MISSION_MAX_ALLOWED("&c&l[!] &7You may not have more then &b%1$s &7missions active at once."),
MISSION_MISSION_FINISHED("&c&l[!] &7Your faction has successfully completed %1$s mission!"),

View File

@@ -274,19 +274,19 @@ hcf:
show:
# First line can be {header} for default header, or any string (we recommend &m for smooth lines ;plugin)
- '&8&m--------------&7 &8<&e{faction}&8> &8&m--------------'
- '&6 * &cOwner: &7{leader}'
- '&6 * &cDescription: &7{description}'
- '&6 * &cLand / Power / Max Power: &7{chunks} &8/ &7{power} &8/ &7{maxPower}'
- '&6 * &cFaction Strikes: &7{strikes}'
- '&6 * &cFaction Points: &7{faction-points}'
- '&6 * &cFounded: &7{create-date}'
- '&6 * &cBalance: &f{faction-balance}'
- '&6 * &cAllies: &5{allies-list}'
- '&6 * &cEnemies: &c{enemies-list}'
- '&6 * &cOnline Members: &8(&7{online}/{members}&8) &7{online-list}'
- '&6 * &cOffline Members: &8(&7{offline}/{members}&8) &7{offline-list}'
- '&6 * &cAlts: &8{alts}'
- '&6 * &cBans: &7{faction-bancount}'
- '&4&l* &cOwner: &f{leader}'
- '&4&l* &cDescription: &f{description}'
- '&4&l* &cLand / Power / Max Power: &f{chunks} &8/ &f{power} &8/ &f{maxPower}'
- '&4&l* &cFaction Strikes: &f{strikes}'
- '&4&l* &cFaction Points: &f{faction-points}'
- '&4&l* &cFounded: &f{create-date}'
- '&4&l* &cBalance: &f{faction-balance}'
- '&4&l* &cAllies: &a{allies-list}'
- '&4&l* &cEnemies: &4{enemies-list}'
- '&4&l* &cOnline Members: &8[&f{online}/{members}&8] &a{online-list}'
- '&4&l* &cOffline Members: &8[&f{offline}/{members}&8] &a{offline-list}'
- '&4&l* &cAlts: &f{alts}'
- '&4&l* &cBans: &f{faction-bancount}'
- '&8&m----------------------------------------'
# For a /f show that does not display fancy messages that are essentially empty, use minimal-show
minimal-show: false
@@ -303,13 +303,15 @@ show-exempt:
# Lines that arent defined wont be sent (home not set, faction not peaceful / permanent, dtr freeze)
map:
# First line can be {header} for default header, or any string (we recommend &m for smooth lines ;plugin)
- '&6* &cFaction: &7{faction}'
- '&6* &cOwner: &7{leader}'
- '&6* &cLand / Power / Max Power: &7{chunks} &8/ &7{power} &8/ &7{maxPower}'
- '&6* &cAllies: &5{allies-list}'
- '&6* &cEnemies: &c{enemies-list}'
- '&6* &cOnline Members: &8(&7{online}/{members}&8) {online-list}'
- '&6* &cOffline Members: &7{offline-list}'
- ''
- '&4&l* &cFaction &f{faction}'
- '&4&l* &cOwner &f{leader}'
- '&4&l* &cLand / Power / Max Power: &f{chunks} &8/ &f{power} &8/ &f{maxPower}'
- '&4&l* &cAllies &a{allies-list}'
- '&4&l* &cEnemies &4{enemies-list}'
- '&4&l* &cOnline Members &8[&f{online}/{members}&8] &a{online-list}'
- '&4&l* &cOffline Members &4{offline-list}'
- ''
############################################################
# +------------------------------------------------------+ #
@@ -426,7 +428,7 @@ help:
fperm-gui:
relation:
# GUI Name
name: 'Faction Permissions'
name: '&8&lFaction Permissions'
# Amount of inventory rows, No larger than 5
rows: 4
# These are the slots where the relations are going to be placed on the first GUI
@@ -452,7 +454,7 @@ fperm-gui:
enemy: DIAMOND_AXE
neutral: WOOD_AXE
Placeholder-Item:
Name: '&cClick to edit {relation} permissions!'
Name: '&c{relation}&f permissions!'
action:
name: 'Faction Permissions'
rows: 6
@@ -527,14 +529,14 @@ fperm-gui:
# {action-access} Access name eg: Allow, Deny
# {action-access-color} Access color eg: Allow;GREEN
placeholder-item:
name: '&c&l(!) &ePermission: &6&n{action}'
name: '&c&lPermission to {action}'
lore:
- ''
- '&6&l * &cStatus: &8[{action-access-color}{action-access}&8]'
- '&4&l* &cStatus: &f{action-access-color}{action-access}'
- ''
- '&7Left click to &a&nAllow&7.'
- '&7Right click to &c&nDeny&7.'
- '&7Middle click to &7&nUndefined&7.'
- '&2&l* &aLeft click to &alAllow&a.'
- '&4&l* &cRight click to &c&lDeny&c.'
- '&8&l* &7Middle click to &7&lUndefine&7.'
# Back item will be take you to the previous GUI
back-item:
Type: ARROW
@@ -566,16 +568,16 @@ fwarp-gui:
- 15
warp-item:
Type: EYE_OF_ENDER
Name: '&c&l(!) &eFaction Warp: &6&n{warp}'
Name: '&c&lFaction Warp {warp}'
# {warp-protected} Warp protection by password, Enabled & Disabled
# {warp-cost} Warp cost
Lore:
- ''
- '&6&l * &cPassword: &7{warp-protected}'
- '&6&l * &cCost: &7{warp-cost}'
- '&4&l* &cPassword: &f{warp-protected}'
- '&4&l* &cCost: &f{warp-cost}'
- ''
- '&c&lNote: &7You need pay to teleport to'
- '&7a faction warp. Unless it''s &nDisabled&7.'
- '&7&o(( Tip: You need &c&opay&7&o to &f&oteleport to'
- '&7&oa &a&ofaction warp&7&o. Unless it''s &c&oDisabled&7&o. ))'
# Dummy Items
dummy-item:
Type: BLACK_STAINED_GLASS_PANE
@@ -638,8 +640,13 @@ f-alts:
frules:
Enabled: true
default-rules:
- '&cDefault Faction Rules :('
- '&cUse /f rules add <rule> to add a rule'
- '&f'
- '&r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &r &f&l«&c&l*&4&l*&c&l*&f&l»&r &c&lFaction Rules &r &f&l«&c&l*&4&l*&c&l*&f&l»'
- '&r &r &r &fWith this feature you can set &cstandars&f for your &afaction'
- '&r &r &r &r &r &r &fPut as many &crules&f as you desire for your &amembers'
- '&f'
- '&r &r &r &r &r &r &r &r &r &r &r &7&o(( Tip: Use &f&o/f rules add <rule>&7&o add a &c&orule&7&o ))'
- ''
############################################################
# +------------------------------------------------------+ #
# | Faction TNT Bank | #
@@ -649,6 +656,14 @@ ftnt:
Enabled: true
Bank-Limit: 250000
############################################################
# +------------------------------------------------------+ #
# | Faction Discord | #
# +------------------------------------------------------+ #
############################################################
fdiscord:
Enabled: true
############################################################
# +------------------------------------------------------+ #
# | Faction PayPal | #
@@ -683,15 +698,12 @@ F-Shop:
Enabled: true
GUI:
Name: '&b&lFaction Shop'
Size: 36
Information:
name: '&b&lInformation'
lore:
- '&bPoints &7are gained by capturing koths/conquests.'
- ''
- '&b&l[!] &bFaction Points: &f%points%'
slot: 22
Rows: 4
dummy-item:
Type: BLACK_STAINED_GLASS_PANE
Name: '&cFaction Points: &b{points}'
Lore:
- ' '
############################################################
# +------------------------------------------------------+ #
# | Faction Command Cooldowns | #
@@ -737,12 +749,16 @@ f-points:
############################################################
MissionGUISize: 3
Missions-Enabled: true
Missions-GUI-Title: '&bFaction Missions'
Missions-GUI-Title: '&8&lFaction Missions'
MaximumMissionsAllowedAtOnce: 1
Mission-Progress-Format: '&b&lProgression: &f{progress}&7/&e{total}'
DenyMissionsMoreThenOnce: true #this setting to true, means that if they complete a mission they cannot redo the same mission
#Mission Types: KILL, MINE, FISH
#Mission Types: KILL, MINE, PLACE, FISH, TAME, ENCHANT, CONSUME
Missions:
FillItem:
Material: BLACK_STAINED_GLASS_PANE
Rows: 3
sugarcane:
Slot: 11
Material: "SUGAR_CANE"
@@ -778,6 +794,42 @@ Missions:
Amount: 100
Reward:
Commands: ["f points add %faction% 100"]
animaltaming:
Slot: 20
Material: "BONE"
Name: "&f100 &cTamed Animals"
Lore:
- "&b&lTame an animal &n100&r &d&ltimes"
Mission:
Type: "TAME"
EntityType: "ALL"
Amount: 100
Reward:
Commands: ["f points add %faction% 100"]
enchant:
Slot: 22
Material: "BOOK"
Name: "&f100 &dEnchants"
Lore:
- "&b&lEnchant &n100&r &d&litems"
Mission:
Type: "ENCHANT"
Amount: 100
Reward:
Commands: ["f points add %faction% 100"]
consume:
Slot: 24
Material: "COOKED_BEEF"
Name: "&f100 &dSteak"
Lore:
- "&b&lConsume &n100&r &d&lsteak"
Mission:
Type: "CONSUME"
# "ALL" can also be used for item
Item: "COOKED_BEEF"
Amount: 100
Reward:
Commands: ["f points add %faction% 100"]
############################################################
# +------------------------------------------------------+ #
@@ -815,6 +867,9 @@ fvault:
fchest:
Enabled: true
Inventory-Title: '&2&lFaction Chest'
Items-Not-Allowed:
- 'MOB_SPAWNER'
- 'COOKIE'
# Chest size upgrades can be configured in the upgrades section of config
############################################################
@@ -825,7 +880,7 @@ fchest:
fupgrades:
Enabled: true
MainMenu:
Title: '{faction}''s Upgrade Menu'
Title: '&8&l{faction}''s Upgrade Menu'
DummyItem:
rows: 5
Name: '&f'
@@ -842,28 +897,28 @@ fupgrades:
level-2: 500000
level-3: 750000
CropItem:
Name: '&c&lUpgrade Growth Speed'
Name: '&c&lGrowth Speed'
Type: WHEAT
Amount: 1
Damage: 0
Lore:
- '&7Increase growth speed of crops in claims.'
- '&7&o(Chance to Grow Two Levels)'
- '&7&oIncrease growth &c&ospeed&7&o of crops in &c&oclaims.'
- '&7&oChance to Grow Two Levels.'
- 'Current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lChances'
- '&4&l* &cLevel 1: &f10% Chance'
- '&4&l* &cLevel 2: &f20% Chance'
- '&4&l* &cLevel 3: &f30% Chance'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$250,000'
- '&4&l* &cLevel 2: &f$500,000'
- '&4&l* &cLevel 3: &f$750,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f10% Chance'
- '&7 - Cost: $250,000'
- '&f&l* &7Level 2 - &f20% Chance'
- '&7 - Cost: $500,000'
- '&f&l* &7Level 3 - &f30% Chance'
- '&7 - Cost: $750,000'
- ''
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 18
- 31
EXP:
EXP-Boost:
level-1: 1.5
@@ -874,27 +929,27 @@ fupgrades:
level-2: 4000000
level-3: 6000000
EXPItem:
Name: '&c&lUpgrade EXP Drop Rate'
Name: '&c&lEXP Drop Rate'
Type: EXP_BOTTLE
Amount: 1
Damage: 0
Lore:
- '&7Increased Vanilla XP gained from monsters.'
- '&7&oIncreased Vanilla &e&oEXP&7&o gained from &c&omonsters&7&o.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lMultipliers'
- '&4&l* &cLevel 1: &f1.5'
- '&4&l* &cLevel 2: &f2.0'
- '&4&l* &cLevel 3: &f2.5'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$2,000,000'
- '&4&l* &cLevel 2: &f$4,000,000'
- '&4&l* &cLevel 3: &f$6,000,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f1.5x Multiplier'
- '&7 - Cost: $2,000,000'
- '&f&l* &7Level 2 - &f2.0x Multiplier'
- '&7 - Cost: $4,000,000'
- '&f&l* &7Level 3 - &f2.5x Multiplier'
- '&7 - Cost: $6,000,000'
- ''
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 20
- 32
Power:
Power-Boost:
level-1: 100.0
@@ -906,44 +961,43 @@ fupgrades:
level-3: 3000000
PowerItem:
Name: '&c&lFaction Power'
Type: DIAMOND_SWORD
Type: NETHER_STAR
Amount: 1
Damage: 0
Lore:
- '&7&o(Increase the amount of power'
- '&7&oyour faction has)'
- '&a&oIncrease&7&o the amount of &c&opower'
- '&7&oyour &a&ofaction has&7&o.'
- 'Current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lIncreased Faction Power'
- '&4&l* &cLevel 1: &f100'
- '&4&l* &cLevel 2: &f200'
- '&4&l* &cLevel 3: &f300'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f100 Increased Faction Power'
- '&7 - Cost: $1,000,000'
- '&f&l* &7Level 2 - &f200 Increased Faction Power'
- '&7 - Cost: $2,000,000'
- '&f&l* &7Level 3 - &f300 Increased Faction Power'
- '&7 - Cost: $3,000,000'
- ''
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 4
- 22
Redstone:
Cost: 1000000
RedstoneItem:
Name: '&c&lUnbreakable Redstone'
Name: '&c&lUnbreakable Redstone'
Type: REDSTONE
Amount: 1
Damage: 0
Lore:
- '&7&o(Prevents water from being'
- '&7&oable to break redstone)'
- '&7&oPrevents &e&owater&7&o from being'
- '&7&oable to break &c&oredstone'
- ''
- '&f&l* &7Current Level: &3{level}/1'
- '&4&l* &cCost: &f$1,000,000'
- ''
- '&7 - Cost: $1,000,000'
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oLeft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 26
- 23
Spawners:
Spawner-Boost:
# This is a Percentage so .10 means 10% lowered spawner delay!
@@ -955,25 +1009,149 @@ fupgrades:
level-2: 2000000
level-3: 3000000
SpawnerItem:
Name: '&c&lUpgrade Spawn Rate'
Name: '&c&lSpawn Rate'
Type: MOB_SPAWNER
Amount: 1
Damage: 0
Lore:
- '&7Decreased mob spawner delay in claims.'
- '&c&oDecreased&7&o mob spawner delay in &a&oclaims&7&o.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lDecreased Spawner Delay'
- '&4&l* &cLevel 1: &f0.10%'
- '&4&l* &cLevel 2: &f0.20%'
- '&4&l* &cLevel 3: &f0.30'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f10% Lower Delay'
- '&7 - Cost: $1,000,000'
- '&f&l* &7Level 2 - &f20% Lower Delay'
- '&7 - Cost: $2,000,000'
- '&f&l* &7Level 3 - &f30% Lower Delay'
- '&7 - Cost: $3,000,000'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 30
DamageReduct:
DamageReductPercent:
level-1: 3
level-2: 5
level-3: 7
Cost:
level-1: 2000000
level-2: 4000000
level-3: 6000000
ReduceItem:
Name: '&c&lDamage Reduction'
Type: GOLD_CHESTPLATE
Amount: 1
Damage: 0
Lore:
- '&a&oReduce&7&o the amount of &a&odamage taken&7&o in faction claims.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&e&lClick to &nUnlock'
- '&c&lDamage Increase'
- '&4&l* &cLevel 1: &f3%'
- '&4&l* &cLevel 2: &f5%'
- '&4&l* &cLevel 3: &f7%'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$2,000,000'
- '&4&l* &cLevel 2: &f$4,000,000'
- '&4&l* &cLevel 3: &f$6,000,000'
- ''
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 7
DamageIncrease:
DamageIncreasePercent:
level-1: 3
level-2: 5
level-3: 7
Cost:
level-1: 2000000
level-2: 4000000
level-3: 6000000
IncreaseItem:
Name: '&c&lDamage Increase'
Type: DIAMOND_SWORD
Amount: 1
Damage: 0
Lore:
- '&a&oIncrease&7&o the amount of &a&odamage given&7&o.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lDamage Increase'
- '&4&l* &cLevel 1: &f3%'
- '&4&l* &cLevel 2: &f5%'
- '&4&l* &cLevel 3: &f7%'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$2,000,000'
- '&4&l* &cLevel 2: &f$4,000,000'
- '&4&l* &cLevel 3: &f$6,000,000'
- ''
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 1
TNT:
tnt-limit:
level-1: 500000
level-2: 1000000
level-3: 2000000
Cost:
level-1: 2000000
level-2: 4000000
level-3: 6000000
TntItem:
Name: '&c&lTNT Bank'
Type: TNT
Amount: 1
Damage: 0
Lore:
- '&a&oUpgrade&7&o your &a&ofactions tnt&7&o limit.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lFaction Tnt Limit'
- '&4&l* &cLevel 1: &f500,000'
- '&4&l* &cLevel 2: &f1,000,000'
- '&4&l* &cLevel 3: &f2,000,000'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 21
Warps:
warp-limit:
level-1: 3
level-2: 4
level-3: 5
Cost:
level-1: 1000000
level-2: 2000000
level-3: 3000000
WarpItem:
Name: '&c&lWarps'
Type: EYE_OF_ENDER
Amount: 1
Damage: 0
Lore:
- '&a&oIncrease&7&o the &a&ofaction warp&7&o limit.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lFaction Warp Limit'
- '&4&l* &cLevel 1: &f3'
- '&4&l* &cLevel 2: &f4'
- '&4&l* &cLevel 3: &f5'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 24
Chest:
@@ -987,27 +1165,27 @@ fupgrades:
level-2: 2000000
level-3: 3000000
ChestItem:
Name: '&c&lUpgrade Faction Chest Size'
Name: '&c&lFaction Chest'
Type: CHEST
Amount: 1
Damage: 0
Lore:
- '&7Increased Faction Chest Size.'
- '&a&oIncreased&7&o Faction Chest Size.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lFaction Chest Size'
- '&4&l* &cLevel 1: &f2 Rows'
- '&4&l* &cLevel 2: &f3 Rows'
- '&4&l* &cLevel 3: &f4 Rows'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f2 Rows'
- '&7 - Cost: $1,000,000'
- '&f&l* &7Level 2 - &f3 Rows'
- '&7 - Cost: $2,000,000'
- '&f&l* &7Level 3 - &f4 Rows'
- '&7 - Cost: $3,000,000'
- ''
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 40
- 20
Members:
Members-Limit:
level-1: 30
@@ -1018,27 +1196,59 @@ fupgrades:
level-2: 2000000
level-3: 3000000
MembersItem:
Name: '&c&lUpgrade Faction Members'
Name: '&c&lFaction Members'
Type: PAPER
Amount: 1
Damage: 0
Lore:
- '&7Increase faction member limit.'
- '&a&oIncrease&7&o the &a&ofaction member&7&o limit.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lTier'
- '&f&l* &7Current Level: &3{level}/3'
- '&c&lFaction Member Limit'
- '&4&l* &cLevel 1: &f30'
- '&4&l* &cLevel 2: &f35'
- '&4&l* &cLevel 3: &f40'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&c&lPerks'
- '&f&l* &7Level 1 - &f30 Members'
- '&7 - Cost: $1,000,000'
- '&f&l* &7Level 2 - &f35 Members'
- '&7 - Cost: $2,000,000'
- '&f&l* &7Level 3 - &f40 Members'
- '&7 - Cost: $3,000,000'
- ''
- '&e&lClick to &nUnlock'
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 22
- 40
Armor:
Armor-HP-Drop:
# HP Drop is in percent so .10 would mean it would drop 10% of the damage to the armor
level-1: .10
level-2: .15
level-3: .20
Cost:
level-1: 1000000
level-2: 2000000
level-3: 3000000
ArmorItem:
Name: '&c&lReinforced Armor'
Type: DIAMOND_CHESTPLATE
Amount: 1
Damage: 0
Lore:
- '&a&oDecreases&7&o damage done &a&oto armor&7&o.'
- '&7&oYour current level is &e&l&o{level}'
- ''
- '&c&lReinforced Armor'
- '&4&l* &cLevel 1: &f0.10%'
- '&4&l* &cLevel 2: &f0.15%'
- '&4&l* &cLevel 3: &f0.20%'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
- '&4&l* &cLevel 2: &f$2,000,000'
- '&4&l* &cLevel 3: &f$3,000,000'
- ''
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
slots:
- 4
############################################################
# +------------------------------------------------------+ #
@@ -1117,6 +1327,7 @@ Tntfill:
# - {offline-list} : Lists all offline members with tooltips
# - {alts} : List all alts online or offline
# - {truces-list} : Lists each faction truce with tooltips
# - {factionless-total} : Count of all factionless players online
# Player variables. Can be used in tooltips.show, scoreboards, or /f show
# - {group} : Players group
@@ -1127,6 +1338,7 @@ Tntfill:
# - {player-maxpower} : Player max power
# - {player-kills} : # of kills the player has
# - {player-deaths}: # of deaths the player has
# - {total-online-visible}: # of players online from the perspective of the current player
# Faction variables. Can be used in tooltips.list, scoreboards, or /f show
# - {header} : Default factions header (ex. /f show)
# - {faction} : Factions tag (if none, uses lang.yml for factionless name)

View File

@@ -22,6 +22,7 @@ permissions:
factions.modifypower: true
factions.ahome: true
factions.setmaxvaults: true
factions.convertconfig: true
factions.*:
description: This is just an alias for factions.kit.admin
children:
@@ -64,6 +65,13 @@ permissions:
factions.kit.halfplayer:
description: Can do all but create factions.
children:
factions.missions: true
factions.shop: true
factions.permissions: true
factions.setdiscord: true
factions.discord: true
factions.paypal: true
factions.paypalset: true
factions.admin: true
factions.autoclaim: true
factions.promote: true
@@ -112,6 +120,7 @@ permissions:
factions.checkpoint: true
factions.rules: true
factions.setwarp: true
factions.warp: true
factions.banner: true
factions.vault: true
factions.getvault: true
@@ -157,6 +166,10 @@ permissions:
description: create a new faction
factions.deinvite:
description: remove a pending invitation
factions.setdiscord:
description: set discord link
factions.discord:
description: view factions discord
factions.description:
description: change the faction description
factions.disband:
@@ -187,6 +200,8 @@ permissions:
description: see a list of the factions
factions.lock:
description: lock all write stuff
factions.lockspawners:
description: toggle placement of spawners
factions.managesafezone:
description: claim land as a safe zone and build/destroy within safe zones
factions.managewarzone: