Compare commits
52 Commits
2.3.2
...
2.3.5-STAB
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f343a5344 | ||
|
|
8665d92476 | ||
|
|
b89db7b082 | ||
|
|
00cb78fd9b | ||
|
|
aca075b5c7 | ||
|
|
03886aa84e | ||
|
|
22472f63f1 | ||
|
|
6d72e5d167 | ||
|
|
69765e472c | ||
|
|
4f55b10c7d | ||
|
|
0395280a9e | ||
|
|
d1252df3ba | ||
|
|
9707226762 | ||
|
|
cf075c270e | ||
|
|
f088b42bbe | ||
|
|
baee5d2158 | ||
|
|
f871787b0c | ||
|
|
749fca0690 | ||
|
|
319940d9b3 | ||
|
|
7ea81a6c10 | ||
|
|
6205bbca9f | ||
|
|
241a16bc2a | ||
|
|
3aa98121e5 | ||
|
|
144798b2dd | ||
|
|
dac07178e5 | ||
|
|
f8421c09cf | ||
|
|
932a5768b0 | ||
|
|
861f88a916 | ||
|
|
5b7f3b0f0e | ||
|
|
304662fa9b | ||
|
|
5a6c660f7f | ||
|
|
0fc736cdf5 | ||
|
|
ef7db546a3 | ||
|
|
4496d4251b | ||
|
|
d86d8fc73a | ||
|
|
380caf1ca3 | ||
|
|
103c69fecf | ||
|
|
d4ac0ab310 | ||
|
|
8fb697888f | ||
|
|
b15ff69682 | ||
|
|
919a3ada25 | ||
|
|
62e4114466 | ||
|
|
cb2afb5a4f | ||
|
|
8efe68111b | ||
|
|
388f83694d | ||
|
|
23320db201 | ||
|
|
0c5cc3a978 | ||
|
|
8d1b26e561 | ||
|
|
ef90cd5be8 | ||
|
|
5809387df2 | ||
|
|
5cf21d479e | ||
|
|
44cac68a15 |
@@ -1,6 +1,7 @@
|
|||||||
# SaberFactions
|
# SaberFactions
|
||||||
|
|
||||||
 [](https://www.codefactor.io/repository/github/driftay/saber-factions) [](https://github.com/SaberLLC/Saber-Factions/blob/1.6.x/LICENSE) 
|
 [](https://www.codefactor.io/repository/github/driftay/saber-factions) [](https://github.com/SaberLLC/Saber-Factions/blob/1.6.x/LICENSE)  [](https://jitpack.io/#SaberLLC/Saber-Factions)
|
||||||
|
|
||||||
|
|
||||||
SaberFactions is an exotic, performance optimized, and feature rich factions plugin that focuses on not only making the player experience as great as possibly but maintaining this aspect with the cost of NOTHING! We strive to continue development for SaberFactions as the factions community is strongly growing and seeking new players every day.
|
SaberFactions is an exotic, performance optimized, and feature rich factions plugin that focuses on not only making the player experience as great as possibly but maintaining this aspect with the cost of NOTHING! We strive to continue development for SaberFactions as the factions community is strongly growing and seeking new players every day.
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ Some of our features include the following
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.SaberLLC</groupId>
|
<groupId>com.github.SaberLLC</groupId>
|
||||||
<artifactId>Saber-Factions</artifactId>
|
<artifactId>Saber-Factions</artifactId>
|
||||||
<version>2.2.7-STABLE</version>
|
<version>2.3.3-STABLE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
## Moving Forward
|
## Moving Forward
|
||||||
|
|||||||
20
pom.xml
20
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<groupId>com.massivecraft</groupId>
|
<groupId>com.massivecraft</groupId>
|
||||||
<artifactId>Factions</artifactId>
|
<artifactId>Factions</artifactId>
|
||||||
<version>1.6.9.5-2.3.2-RC</version>
|
<version>1.6.9.5-2.3.5-RC</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>SaberFactions</name>
|
<name>SaberFactions</name>
|
||||||
@@ -41,6 +41,14 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
<relocations>
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.github.stefvanschie.inventoryframework</pattern>
|
||||||
|
<shadedPattern>com.massivecraft.factions.shade.stefvanschie.inventoryframework</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.bstats</pattern>
|
||||||
|
<shadedPattern>com.massivecraft.factions.shade.org.bstats</shadedPattern>
|
||||||
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>net.dv8tion</pattern>
|
<pattern>net.dv8tion</pattern>
|
||||||
<shadedPattern>com.massivecraft.factions.shade.net.dv8tion</shadedPattern>
|
<shadedPattern>com.massivecraft.factions.shade.net.dv8tion</shadedPattern>
|
||||||
@@ -403,9 +411,19 @@
|
|||||||
<version>2.1</version>
|
<version>2.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bstats</groupId>
|
||||||
|
<artifactId>bstats-bukkit</artifactId>
|
||||||
|
<version>1.7</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>CodeMC</id>
|
||||||
|
<url>https://repo.codemc.org/repository/maven-public</url>
|
||||||
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>central</id>
|
<id>central</id>
|
||||||
<name>bintray</name>
|
<name>bintray</name>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class Conf {
|
|||||||
public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag";
|
public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag";
|
||||||
public static final transient boolean DYNMAP_STYLE_BOOST = false;
|
public static final transient boolean DYNMAP_STYLE_BOOST = false;
|
||||||
public static List<String> baseCommandAliases = new ArrayList<>();
|
public static List<String> baseCommandAliases = new ArrayList<>();
|
||||||
|
public static String serverTimeZone = "EST";
|
||||||
public static boolean allowNoSlashCommand = true;
|
public static boolean allowNoSlashCommand = true;
|
||||||
|
|
||||||
// Colors
|
// Colors
|
||||||
@@ -54,8 +55,8 @@ public class Conf {
|
|||||||
public static boolean factionTagForceUpperCase = false;
|
public static boolean factionTagForceUpperCase = false;
|
||||||
public static boolean newFactionsDefaultOpen = false;
|
public static boolean newFactionsDefaultOpen = false;
|
||||||
// when faction membership hits this limit, players will no longer be able to join using /f join; default is 0, no limit
|
// when faction membership hits this limit, players will no longer be able to join using /f join; default is 0, no limit
|
||||||
public static int factionMemberLimit = 0;
|
public static int factionMemberLimit = 30;
|
||||||
public static int factionAltMemberLimit = 0;
|
public static int factionAltMemberLimit = 10;
|
||||||
// what faction ID to start new players in when they first join the server; default is 0, "no faction"
|
// what faction ID to start new players in when they first join the server; default is 0, "no faction"
|
||||||
public static String newPlayerStartingFactionID = "0";
|
public static String newPlayerStartingFactionID = "0";
|
||||||
public static boolean showMapFactionKey = true;
|
public static boolean showMapFactionKey = true;
|
||||||
@@ -86,7 +87,9 @@ public class Conf {
|
|||||||
public static int factionBufferSize = 20;
|
public static int factionBufferSize = 20;
|
||||||
public static boolean useCheckSystem = true;
|
public static boolean useCheckSystem = true;
|
||||||
public static boolean spawnerLock = false;
|
public static boolean spawnerLock = false;
|
||||||
public static boolean gracePeriod = false;
|
public static boolean useGraceSystem = true;
|
||||||
|
public static boolean broadcastGraceToggles = true;
|
||||||
|
public static int gracePeriodTimeDays = 7;
|
||||||
public static boolean noEnderpearlsInFly = false;
|
public static boolean noEnderpearlsInFly = false;
|
||||||
public static boolean broadcastDescriptionChanges = false;
|
public static boolean broadcastDescriptionChanges = false;
|
||||||
public static boolean broadcastTagChanges = false;
|
public static boolean broadcastTagChanges = false;
|
||||||
@@ -95,10 +98,13 @@ public class Conf {
|
|||||||
public static double autoLeaveRoutineRunsEveryXMinutes = 5.0;
|
public static double autoLeaveRoutineRunsEveryXMinutes = 5.0;
|
||||||
public static int autoLeaveRoutineMaxMillisecondsPerTick = 5; // 1 server tick is roughly 50ms, so default max 10% of a tick
|
public static int autoLeaveRoutineMaxMillisecondsPerTick = 5; // 1 server tick is roughly 50ms, so default max 10% of a tick
|
||||||
public static boolean removePlayerDataWhenBanned = true;
|
public static boolean removePlayerDataWhenBanned = true;
|
||||||
|
public static String removePlayerDataWhenBannedReason = "Banned by admin.";
|
||||||
public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction.
|
public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction.
|
||||||
public static boolean worldGuardChecking = false;
|
public static boolean worldGuardChecking = false;
|
||||||
public static boolean worldGuardBuildPriority = false;
|
public static boolean worldGuardBuildPriority = false;
|
||||||
|
|
||||||
|
//FRIENDLY FIRE
|
||||||
|
public static boolean friendlyFireFPlayersCommand = false;
|
||||||
|
|
||||||
//Claim Fill
|
//Claim Fill
|
||||||
public static int maxFillClaimCount = 25;
|
public static int maxFillClaimCount = 25;
|
||||||
@@ -117,7 +123,7 @@ public class Conf {
|
|||||||
public static boolean useDisbandGUI = true;
|
public static boolean useDisbandGUI = true;
|
||||||
|
|
||||||
//SEALTH
|
//SEALTH
|
||||||
public static boolean useSealthSystem = true;
|
public static boolean useStealthSystem = true;
|
||||||
|
|
||||||
//STRIKES
|
//STRIKES
|
||||||
public static boolean useStrikeSystem = true;
|
public static boolean useStrikeSystem = true;
|
||||||
@@ -282,7 +288,7 @@ public class Conf {
|
|||||||
public static boolean econEnabled = false;
|
public static boolean econEnabled = false;
|
||||||
public static String econUniverseAccount = "";
|
public static String econUniverseAccount = "";
|
||||||
public static double econCostClaimWilderness = 30.0;
|
public static double econCostClaimWilderness = 30.0;
|
||||||
public static double econCostClaimFromFactionBonus = 30.0;
|
public static double econCostClaimFromFactionBonus = 0.0;
|
||||||
public static double econOverclaimRewardMultiplier = 0.0;
|
public static double econOverclaimRewardMultiplier = 0.0;
|
||||||
public static double econClaimAdditionalMultiplier = 0.5;
|
public static double econClaimAdditionalMultiplier = 0.5;
|
||||||
public static double econClaimRefundMultiplier = 0.7;
|
public static double econClaimRefundMultiplier = 0.7;
|
||||||
@@ -418,6 +424,8 @@ public class Conf {
|
|||||||
public static HashMap<String, DefaultPermissions> defaultFactionPermissions = new HashMap<>();
|
public static HashMap<String, DefaultPermissions> defaultFactionPermissions = new HashMap<>();
|
||||||
public static HashSet<PermissableAction> lockedPermissions = new HashSet<>();
|
public static HashSet<PermissableAction> lockedPermissions = new HashSet<>();
|
||||||
|
|
||||||
|
public static boolean wildLoadChunkBeforeTeleport = true;
|
||||||
|
|
||||||
private static transient Conf i = new Conf();
|
private static transient Conf i = new Conf();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|||||||
@@ -288,6 +288,11 @@ public interface FPlayer extends EconomyParticipator {
|
|||||||
|
|
||||||
boolean hasMoney(int amt);
|
boolean hasMoney(int amt);
|
||||||
|
|
||||||
|
//Fplayer specific friendly fire.
|
||||||
|
boolean hasFriendlyFire();
|
||||||
|
|
||||||
|
void setFriendlyFire(boolean status);
|
||||||
|
|
||||||
//inspect Stuff
|
//inspect Stuff
|
||||||
|
|
||||||
boolean isInspectMode();
|
boolean isInspectMode();
|
||||||
@@ -387,6 +392,7 @@ public interface FPlayer extends EconomyParticipator {
|
|||||||
// Actions
|
// Actions
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
|
|
||||||
void leave(boolean makePay);
|
void leave(boolean makePay);
|
||||||
|
|
||||||
boolean canClaimForFaction(Faction forFaction);
|
boolean canClaimForFaction(Faction forFaction);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.massivecraft.factions.struct.Relation;
|
|||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
import com.massivecraft.factions.util.*;
|
import com.massivecraft.factions.util.*;
|
||||||
import com.massivecraft.factions.util.adapters.*;
|
import com.massivecraft.factions.util.adapters.*;
|
||||||
|
import com.massivecraft.factions.util.timer.TimerManager;
|
||||||
import com.massivecraft.factions.util.wait.WaitExecutor;
|
import com.massivecraft.factions.util.wait.WaitExecutor;
|
||||||
import com.massivecraft.factions.zcore.CommandVisibility;
|
import com.massivecraft.factions.zcore.CommandVisibility;
|
||||||
import com.massivecraft.factions.zcore.MPlugin;
|
import com.massivecraft.factions.zcore.MPlugin;
|
||||||
@@ -34,10 +35,10 @@ import com.massivecraft.factions.zcore.fperms.Access;
|
|||||||
import com.massivecraft.factions.zcore.fperms.Permissable;
|
import com.massivecraft.factions.zcore.fperms.Permissable;
|
||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
import com.massivecraft.factions.zcore.frame.fupgrades.UpgradesListener;
|
import com.massivecraft.factions.zcore.frame.fupgrades.UpgradesListener;
|
||||||
import com.massivecraft.factions.zcore.util.TextUtil;
|
|
||||||
import me.lucko.commodore.CommodoreProvider;
|
import me.lucko.commodore.CommodoreProvider;
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -81,7 +82,7 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
public boolean mc114 = false;
|
public boolean mc114 = false;
|
||||||
public boolean mc115 = false;
|
public boolean mc115 = false;
|
||||||
public boolean useNonPacketParticles = false;
|
public boolean useNonPacketParticles = false;
|
||||||
public boolean factionsFlight = false;
|
public static boolean factionsFlight = false;
|
||||||
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
|
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
|
||||||
SkriptAddon skriptAddon;
|
SkriptAddon skriptAddon;
|
||||||
private FactionsPlayerListener factionsPlayerListener;
|
private FactionsPlayerListener factionsPlayerListener;
|
||||||
@@ -96,10 +97,7 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
private FLogManager fLogManager;
|
private FLogManager fLogManager;
|
||||||
private List<ReserveObject> reserveObjects;
|
private List<ReserveObject> reserveObjects;
|
||||||
private FileManager fileManager;
|
private FileManager fileManager;
|
||||||
|
private TimerManager timerManager;
|
||||||
public FileManager getFileManager() {
|
|
||||||
return fileManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public FactionsPlugin() {
|
public FactionsPlugin() {
|
||||||
instance = this;
|
instance = this;
|
||||||
@@ -109,6 +107,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FileManager getFileManager() {
|
||||||
|
return fileManager;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getLocked() {
|
public boolean getLocked() {
|
||||||
return this.locked;
|
return this.locked;
|
||||||
}
|
}
|
||||||
@@ -178,8 +180,14 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
migrateFPlayerLeaders();
|
migrateFPlayerLeaders();
|
||||||
log("==== End Setup ====");
|
log("==== End Setup ====");
|
||||||
|
|
||||||
if (!preEnable()) return;
|
int pluginId = 7013;
|
||||||
this.loadSuccessful = false;
|
Metrics metrics = new Metrics(this, pluginId);
|
||||||
|
|
||||||
|
|
||||||
|
if (!preEnable()) {
|
||||||
|
this.loadSuccessful = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!new File(this.getDataFolder() + "/config.yml").exists()) {
|
if (!new File(this.getDataFolder() + "/config.yml").exists()) {
|
||||||
this.saveResource("config.yml", false);
|
this.saveResource("config.yml", false);
|
||||||
@@ -273,6 +281,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
|
|
||||||
fLogManager.loadLogs(this);
|
fLogManager.loadLogs(this);
|
||||||
|
|
||||||
|
this.timerManager = new TimerManager(this);
|
||||||
|
this.timerManager.reloadTimerData();
|
||||||
|
System.out.println("[SABER-FACTIONS] - Loaded " + timerManager.getTimers().size() + " timers into list!");
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(factionsPlayerListener = new FactionsPlayerListener(), this);
|
getServer().getPluginManager().registerEvents(factionsPlayerListener = new FactionsPlayerListener(), this);
|
||||||
|
|
||||||
// Register Event Handlers
|
// Register Event Handlers
|
||||||
@@ -291,6 +303,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
for (Listener eventListener : eventsListener)
|
for (Listener eventListener : eventsListener)
|
||||||
getServer().getPluginManager().registerEvents(eventListener, this);
|
getServer().getPluginManager().registerEvents(eventListener, this);
|
||||||
|
|
||||||
|
if(Conf.useGraceSystem){
|
||||||
|
getServer().getPluginManager().registerEvents(timerManager.graceTimer, this);
|
||||||
|
}
|
||||||
|
|
||||||
this.getCommand(refCommand).setExecutor(cmdBase);
|
this.getCommand(refCommand).setExecutor(cmdBase);
|
||||||
|
|
||||||
if (!CommodoreProvider.isSupported()) this.getCommand(refCommand).setTabCompleter(this);
|
if (!CommodoreProvider.isSupported()) this.getCommand(refCommand).setTabCompleter(this);
|
||||||
@@ -313,6 +329,7 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getDescription().getFullName().contains("BETA")) {
|
if (getDescription().getFullName().contains("BETA")) {
|
||||||
divider();
|
divider();
|
||||||
System.out.println("You are using a BETA version of the plugin!");
|
System.out.println("You are using a BETA version of the plugin!");
|
||||||
@@ -438,36 +455,32 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
try {
|
|
||||||
String path = Paths.get(getDataFolder().getAbsolutePath()).toAbsolutePath().toString() + File.separator + "reserves.json";
|
|
||||||
File file = new File(path);
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.getParentFile().mkdirs();
|
|
||||||
file.createNewFile();
|
|
||||||
}
|
|
||||||
Files.write(Paths.get(file.getPath()), getGsonBuilder().create().toJson(reserveObjects).getBytes());
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// only save data if plugin actually completely loaded successfully
|
// only save data if plugin actually completely loaded successfully
|
||||||
if (this.loadSuccessful) Conf.saveSync();
|
if (this.loadSuccessful) {
|
||||||
|
Conf.load();
|
||||||
|
Conf.saveSync();
|
||||||
if (AutoLeaveTask != null) {
|
timerManager.saveTimerData();
|
||||||
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
|
DiscordListener.saveGuilds();
|
||||||
AutoLeaveTask = null;
|
if (Discord.jda != null) Discord.jda.shutdownNow();
|
||||||
}
|
try {
|
||||||
DiscordListener.saveGuilds();
|
fLogManager.saveLogs();
|
||||||
if (Discord.jda != null) {
|
} catch (Exception e) {
|
||||||
Discord.jda.shutdownNow();
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
String path = Paths.get(getDataFolder().getAbsolutePath()).toAbsolutePath().toString() + File.separator + "reserves.json";
|
||||||
|
File file = new File(path);
|
||||||
|
if (!file.exists()) {
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
file.createNewFile();
|
||||||
|
}
|
||||||
|
Files.write(Paths.get(file.getPath()), getGsonBuilder().create().toJson(reserveObjects).getBytes());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
this.getServer().getScheduler().cancelTasks(this);
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
try {
|
|
||||||
fLogManager.saveLogs();
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoLeaveTask(boolean restartIfRunning) {
|
public void startAutoLeaveTask(boolean restartIfRunning) {
|
||||||
@@ -522,14 +535,6 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
return sender instanceof Player && FactionsPlayerListener.preventCommand(commandString, (Player) sender) || super.handleCommand(sender, commandString, testOnly);
|
return sender instanceof Player && FactionsPlayerListener.preventCommand(commandString, (Player) sender) || super.handleCommand(sender, commandString, testOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] split) {
|
|
||||||
if (split.length == 0) return handleCommand(sender, "/f help", false);
|
|
||||||
|
|
||||||
// otherwise, needs to be handled; presumably another plugin directly ran the command
|
|
||||||
String cmd = Conf.baseCommandAliases.isEmpty() ? "/f" : "/" + Conf.baseCommandAliases.get(0);
|
|
||||||
return handleCommand(sender, cmd + " " + TextUtil.implode(Arrays.asList(split), " "), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This method must stay for < 1.12 versions
|
// This method must stay for < 1.12 versions
|
||||||
@Override
|
@Override
|
||||||
@@ -716,6 +721,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
return perms == null || !perms.hasGroupSupport() ? " " : perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player);
|
return perms == null || !perms.hasGroupSupport() ? " " : perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TimerManager getTimerManager() {
|
||||||
|
return timerManager;
|
||||||
|
}
|
||||||
|
|
||||||
public void debug(Level level, String s) {
|
public void debug(Level level, String s) {
|
||||||
if (getConfig().getBoolean("debug", false)) getLogger().log(level, s);
|
if (getConfig().getBoolean("debug", false)) getLogger().log(level, s);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ public class Aliases {
|
|||||||
/**
|
/**
|
||||||
* @author DroppingAnvil
|
* @author DroppingAnvil
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
public static ArrayList<String> friendlyFire = new ArrayList<>(Arrays.asList("friendlyfire", "ff"));
|
||||||
public static ArrayList<String> notifications = new ArrayList<>(Arrays.asList("notifications", "notis"));
|
public static ArrayList<String> notifications = new ArrayList<>(Arrays.asList("notifications", "notis"));
|
||||||
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
|
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
|
||||||
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
|
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
|
||||||
|
|||||||
@@ -86,24 +86,20 @@ public class CmdAdmin extends FCommand {
|
|||||||
FactionsPlugin.instance.getFlogManager().log(targetFaction, FLogType.RANK_EDIT, context.fPlayer.getName(), fyou.getName(), ChatColor.RED + "Admin");
|
FactionsPlugin.instance.getFlogManager().log(targetFaction, FLogType.RANK_EDIT, context.fPlayer.getName(), fyou.getName(), ChatColor.RED + "Admin");
|
||||||
|
|
||||||
// Inform all players
|
// Inform all players
|
||||||
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
if(FactionsPlugin.instance.getConfig().getBoolean("faction-leader-broadcast")) {
|
||||||
fplayer.msg(TL.COMMAND_ADMIN_PROMOTED,
|
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
||||||
context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fplayer, true),
|
fplayer.msg(TL.COMMAND_ADMIN_PROMOTED, context.player == null ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(fplayer, true), fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
|
||||||
fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setRole(FPlayer fp, Role r) {
|
private void setRole(FPlayer fp, Role r) {
|
||||||
FactionsPlugin.getInstance().getServer().getScheduler().runTask(FactionsPlugin.instance, () -> {
|
FactionsPlugin.getInstance().getServer().getScheduler().runTask(FactionsPlugin.instance, () -> fp.setRole(r));
|
||||||
fp.setRole(r);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void promoteNewLeader(Faction f) {
|
private void promoteNewLeader(Faction f) {
|
||||||
FactionsPlugin.getInstance().getServer().getScheduler().runTask(FactionsPlugin.instance, () -> {
|
FactionsPlugin.getInstance().getServer().getScheduler().runTask(FactionsPlugin.instance, (Runnable) f::promoteNewLeader);
|
||||||
f.promoteNewLeader();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TL getUsageTranslation() {
|
public TL getUsageTranslation() {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.massivecraft.factions.event.FactionCreateEvent;
|
|||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
|
import com.massivecraft.factions.util.Cooldown;
|
||||||
import com.massivecraft.factions.util.MiscUtil;
|
import com.massivecraft.factions.util.MiscUtil;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import net.dv8tion.jda.core.entities.Member;
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
@@ -53,6 +54,11 @@ public class CmdCreate extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Cooldown.isOnCooldown(context.fPlayer.getPlayer(), "createCooldown") && !context.fPlayer.isAdminBypassing()){
|
||||||
|
context.msg(TL.COMMAND_COOLDOWN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ReserveObject factionReserve = FactionsPlugin.getInstance().getFactionReserves().stream().filter(factionReserve1 -> factionReserve1.getFactionName().equalsIgnoreCase(tag)).findFirst().orElse(null);
|
ReserveObject factionReserve = FactionsPlugin.getInstance().getFactionReserves().stream().filter(factionReserve1 -> factionReserve1.getFactionName().equalsIgnoreCase(tag)).findFirst().orElse(null);
|
||||||
if (factionReserve != null && !factionReserve.getName().equalsIgnoreCase(context.player.getName())) {
|
if (factionReserve != null && !factionReserve.getName().equalsIgnoreCase(context.player.getName())) {
|
||||||
context.msg(TL.COMMAND_CREATE_ALREADY_RESERVED);
|
context.msg(TL.COMMAND_CREATE_ALREADY_RESERVED);
|
||||||
@@ -105,6 +111,7 @@ public class CmdCreate extends FCommand {
|
|||||||
// That way we don't have to mess up deleting more stuff.
|
// That way we don't have to mess up deleting more stuff.
|
||||||
// And prevent the user from being returned to NORMAL after deleting his old faction.
|
// And prevent the user from being returned to NORMAL after deleting his old faction.
|
||||||
context.fPlayer.setRole(Role.LEADER);
|
context.fPlayer.setRole(Role.LEADER);
|
||||||
|
Cooldown.setCooldown(context.fPlayer.getPlayer(), "createCooldown", FactionsPlugin.getInstance().getConfig().getInt("fcooldowns.f-create"));
|
||||||
if (FactionsPlugin.getInstance().getConfig().getBoolean("faction-creation-broadcast", true)) {
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("faction-creation-broadcast", true)) {
|
||||||
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers()) {
|
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers()) {
|
||||||
follower.msg(TL.COMMAND_CREATE_CREATED, context.fPlayer.getName(), faction.getTag(follower));
|
follower.msg(TL.COMMAND_CREATE_CREATED, context.fPlayer.getName(), faction.getTag(follower));
|
||||||
|
|||||||
@@ -25,36 +25,17 @@ public class CmdDeinvite extends FCommand {
|
|||||||
this.optionalArgs.put("player name", "name");
|
this.optionalArgs.put("player name", "name");
|
||||||
|
|
||||||
this.requirements = new CommandRequirements.Builder(Permission.DEINVITE)
|
this.requirements = new CommandRequirements.Builder(Permission.DEINVITE)
|
||||||
|
.withAction(PermissableAction.INVITE)
|
||||||
.memberOnly()
|
.memberOnly()
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
if (context.args.size() == 0) {
|
|
||||||
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
|
|
||||||
for (String id : context.faction.getInvites()) {
|
|
||||||
FPlayer fp = FPlayers.getInstance().getById(id);
|
|
||||||
String name = fp != null ? fp.getName() : id;
|
|
||||||
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
|
|
||||||
}
|
|
||||||
context.sendFancyMessage(msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FPlayer you = context.argAsBestFPlayerMatch(0);
|
FPlayer you = context.argAsBestFPlayerMatch(0);
|
||||||
if (!context.fPlayer.isAdminBypassing()) {
|
|
||||||
Access access = context.faction.getAccess(context.fPlayer, PermissableAction.INVITE);
|
|
||||||
if (access != Access.ALLOW && context.fPlayer.getRole() != Role.LEADER) {
|
|
||||||
context.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (you == null) {
|
if (you == null) {
|
||||||
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
|
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);
|
||||||
for (String id : context.faction.getInvites()) {
|
for (String id : context.faction.getInvites()) {
|
||||||
if (context.faction.getInvites().isEmpty()) return;
|
|
||||||
FPlayer fp = FPlayers.getInstance().getById(id);
|
FPlayer fp = FPlayers.getInstance().getById(id);
|
||||||
String name = fp != null ? fp.getName() : id;
|
String name = fp != null ? fp.getName() : id;
|
||||||
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
|
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
|
||||||
@@ -65,15 +46,16 @@ public class CmdDeinvite extends FCommand {
|
|||||||
|
|
||||||
if (you.getFaction() == context.faction) {
|
if (you.getFaction() == context.faction) {
|
||||||
context.msg(TL.COMMAND_DEINVITE_ALREADYMEMBER, you.getName(), context.faction.getTag());
|
context.msg(TL.COMMAND_DEINVITE_ALREADYMEMBER, you.getName(), context.faction.getTag());
|
||||||
context.msg(TL.COMMAND_DEINVITE_MIGHTWANT, FactionsPlugin.getInstance().cmdBase.cmdKick.getUsageTemplate(context));
|
context.msg(TL.COMMAND_DEINVITE_MIGHTWANT, FCmdRoot.instance.cmdKick.getUsageTemplate(context));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
context.faction.deinvite(you);
|
context.faction.deinvite(you);
|
||||||
|
|
||||||
you.msg(TL.COMMAND_DEINVITE_REVOKED, context.fPlayer.describeTo(you), context.faction.describeTo(you));
|
you.msg(TL.COMMAND_DEINVITE_REVOKED, context.fPlayer.describeTo(you), context.faction.describeTo(you));
|
||||||
|
|
||||||
context.faction.msg(TL.COMMAND_DEINVITE_REVOKES, context.fPlayer.describeTo(context.faction), you.describeTo(context.faction));
|
context.faction.msg(TL.COMMAND_DEINVITE_REVOKES, context.fPlayer.describeTo(context.faction), you.describeTo(context.faction));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TL getUsageTranslation() {
|
public TL getUsageTranslation() {
|
||||||
return TL.COMMAND_DEINVITE_DESCRIPTION;
|
return TL.COMMAND_DEINVITE_DESCRIPTION;
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import com.massivecraft.factions.*;
|
|||||||
import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason;
|
import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
import com.massivecraft.factions.zcore.frame.fdisband.FDisbandFrame;
|
import com.massivecraft.factions.util.Cooldown;
|
||||||
import com.massivecraft.factions.zcore.fperms.Access;
|
import com.massivecraft.factions.zcore.fperms.Access;
|
||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
|
import com.massivecraft.factions.zcore.frame.fdisband.FDisbandFrame;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
@@ -69,6 +70,11 @@ public class CmdDisband extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Cooldown.isOnCooldown(context.fPlayer.getPlayer(), "disbandCooldown") && !context.fPlayer.isAdminBypassing()){
|
||||||
|
context.msg(TL.COMMAND_COOLDOWN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean access = false;
|
boolean access = false;
|
||||||
if (context.fPlayer.getPlayer().hasMetadata("disband_confirm") && (time = context.fPlayer.getPlayer().getMetadata("disband_confirm").get(0).asLong()) != 0L && System.currentTimeMillis() - time <= TimeUnit.SECONDS.toMillis(3L)) {
|
if (context.fPlayer.getPlayer().hasMetadata("disband_confirm") && (time = context.fPlayer.getPlayer().getMetadata("disband_confirm").get(0).asLong()) != 0L && System.currentTimeMillis() - time <= TimeUnit.SECONDS.toMillis(3L)) {
|
||||||
@@ -84,7 +90,6 @@ public class CmdDisband extends FCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// check for tnt before disbanding.
|
// check for tnt before disbanding.
|
||||||
if (!disbandMap.containsKey(context.player.getUniqueId().toString()) && faction.getTnt() > 0) {
|
if (!disbandMap.containsKey(context.player.getUniqueId().toString()) && faction.getTnt() > 0) {
|
||||||
context.msg(TL.COMMAND_DISBAND_CONFIRM.toString().replace("{tnt}", faction.getTnt() + ""));
|
context.msg(TL.COMMAND_DISBAND_CONFIRM.toString().replace("{tnt}", faction.getTnt() + ""));
|
||||||
@@ -96,23 +101,25 @@ public class CmdDisband extends FCommand {
|
|||||||
String amountString = context.sender instanceof ConsoleCommandSender ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(follower);
|
String amountString = context.sender instanceof ConsoleCommandSender ? TL.GENERIC_SERVERADMIN.toString() : context.fPlayer.describeTo(follower);
|
||||||
if (follower.getFaction() == faction) {
|
if (follower.getFaction() == faction) {
|
||||||
follower.msg(TL.COMMAND_DISBAND_BROADCAST_YOURS, amountString);
|
follower.msg(TL.COMMAND_DISBAND_BROADCAST_YOURS, amountString);
|
||||||
if (!follower.canFlyAtLocation() && FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
|
if (!follower.canFlyAtLocation() && FactionsPlugin.factionsFlight) {
|
||||||
follower.setFFlying(false, false);
|
follower.setFFlying(false, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
follower.msg(TL.COMMAND_DISBAND_BROADCAST_NOTYOURS, amountString, faction.getTag(follower));
|
follower.msg(TL.COMMAND_DISBAND_BROADCAST_NOTYOURS, amountString, faction.getTag(follower));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")){
|
if (FactionsPlugin.factionsFlight) {
|
||||||
faction.disband(context.player, PlayerDisbandReason.COMMAND);
|
faction.disband(context.player, PlayerDisbandReason.COMMAND);
|
||||||
context.fPlayer.setFFlying(false, false);
|
context.fPlayer.setFFlying(false, false);
|
||||||
|
Cooldown.setCooldown(context.fPlayer.getPlayer(), "disbandCooldown", FactionsPlugin.getInstance().getConfig().getInt("fcooldowns.f-disband"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
context.player.sendMessage(String.valueOf(TL.COMMAND_DISBAND_PLAYER));
|
context.player.sendMessage(String.valueOf(TL.COMMAND_DISBAND_PLAYER));
|
||||||
}
|
}
|
||||||
faction.disband(context.player, PlayerDisbandReason.COMMAND);
|
faction.disband(context.player, PlayerDisbandReason.COMMAND);
|
||||||
if (!context.fPlayer.canFlyAtLocation() && FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
|
Cooldown.setCooldown(context.fPlayer.getPlayer(), "disbandCooldown", FactionsPlugin.getInstance().getConfig().getInt("fcooldowns.f-disband"));
|
||||||
|
if (!context.fPlayer.canFlyAtLocation() && FactionsPlugin.factionsFlight) {
|
||||||
context.fPlayer.setFFlying(false, false);
|
context.fPlayer.setFFlying(false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class CmdFly extends FCommand {
|
|||||||
public static ConcurrentHashMap<String, Boolean> flyMap = new ConcurrentHashMap<>();
|
public static ConcurrentHashMap<String, Boolean> flyMap = new ConcurrentHashMap<>();
|
||||||
public static BukkitTask particleTask = null;
|
public static BukkitTask particleTask = null;
|
||||||
public static BukkitTask flyTask = null;
|
public static BukkitTask flyTask = null;
|
||||||
|
public static boolean autoenable = FactionsPlugin.instance.getConfig().getBoolean("ffly.AutoEnable");
|
||||||
|
|
||||||
|
|
||||||
public CmdFly() {
|
public CmdFly() {
|
||||||
@@ -77,27 +78,27 @@ public class CmdFly extends FCommand {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
Faction myFaction = fPlayer.getFaction();
|
if (fPlayer.isAdminBypassing()) continue;
|
||||||
if (!player.hasPermission("factions.fly.bypassnearbyenemycheck") && !fPlayer.isAdminBypassing()) {
|
if (!player.hasPermission("factions.fly.bypassnearbyenemycheck")) {
|
||||||
if (fPlayer.hasEnemiesNearby()) disableFlightSync(fPlayer);
|
if (fPlayer.hasEnemiesNearby()) {
|
||||||
|
disableFlightSync(fPlayer);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
checkEnemiesSync(fPlayer);
|
checkEnemiesSync(fPlayer);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
FLocation myFloc = new FLocation(player.getLocation());
|
FLocation myFloc = new FLocation(player.getLocation());
|
||||||
if (Board.getInstance().getFactionAt(myFloc) != myFaction) {
|
if (!checkFly(fPlayer, player, Board.getInstance().getFactionAt(myFloc))) {
|
||||||
if (!checkFly(fPlayer, player, Board.getInstance().getFactionAt(myFloc))) {
|
disableFlightSync(fPlayer);
|
||||||
disableFlightSync(fPlayer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 20L, 20L);
|
}, 20L, 15L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean checkFly(FPlayer fme, Player me, Faction toFac) {
|
public static boolean checkFly(FPlayer fme, Player me, Faction toFac) {
|
||||||
if (Conf.denyFlightIfInNoClaimingWorld && !Conf.worldsNoClaiming.isEmpty() && Conf.worldsNoClaiming.stream().anyMatch(me.getWorld().getName()::equalsIgnoreCase))
|
if ((Conf.denyFlightIfInNoClaimingWorld && !Conf.worldsNoClaiming.isEmpty() && Conf.worldsNoClaiming.stream().anyMatch(me.getWorld().getName()::equalsIgnoreCase)) || !me.hasPermission(Permission.FLY_FLY.node))
|
||||||
return false;
|
return false;
|
||||||
if (toFac.getAccess(fme, PermissableAction.FLY) == Access.ALLOW) return true;
|
if (toFac.getAccess(fme, PermissableAction.FLY) == Access.ALLOW) return true;
|
||||||
if (fme.getFaction().isWilderness()) return false;
|
if (fme.getFaction().isWilderness()) return false;
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/6/2020
|
||||||
|
*/
|
||||||
|
public class CmdFriendlyFire extends FCommand {
|
||||||
|
|
||||||
|
public CmdFriendlyFire(){
|
||||||
|
super();
|
||||||
|
this.aliases.addAll(Aliases.friendlyFire);
|
||||||
|
|
||||||
|
this.requirements = new CommandRequirements.Builder(Permission.FRIENDLYFIRE)
|
||||||
|
.playerOnly()
|
||||||
|
.memberOnly()
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void perform(CommandContext context) {
|
||||||
|
if(!Conf.friendlyFireFPlayersCommand){
|
||||||
|
context.msg(TL.GENERIC_DISABLED, "friendly fire");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(context.fPlayer.hasFriendlyFire()){
|
||||||
|
context.fPlayer.setFriendlyFire(false);
|
||||||
|
context.msg(TL.COMMAND_FRIENDLY_FIRE_TOGGLE_OFF);
|
||||||
|
} else {
|
||||||
|
context.fPlayer.setFriendlyFire(true);
|
||||||
|
context.msg(TL.COMMAND_FRIENDLY_FIRE_TOGGLE_ON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TL getUsageTranslation() {
|
||||||
|
return TL.COMMAND_FRIENDLY_FIRE_DESCRIPTION;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,10 +2,10 @@ package com.massivecraft.factions.cmd;
|
|||||||
|
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.util.ItemBuilder;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class CmdGetVault extends FCommand {
|
public class CmdGetVault extends FCommand {
|
||||||
@@ -30,9 +30,13 @@ public class CmdGetVault extends FCommand {
|
|||||||
context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Vaults");
|
context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Vaults");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location vaultLocation = context.faction.getVault();
|
|
||||||
ItemStack vault = FactionsPlugin.getInstance().createItem(Material.CHEST, 1, (short) 0, FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fvault.Item.Name")), FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().getConfig().getStringList("fvault.Item.Lore")));
|
|
||||||
|
|
||||||
|
Location vaultLocation = context.faction.getVault();
|
||||||
|
ItemStack vault = new ItemBuilder(Material.CHEST)
|
||||||
|
.amount(1)
|
||||||
|
.name(FactionsPlugin.getInstance().getConfig().getString("fvault.Item.Name"))
|
||||||
|
.lore(FactionsPlugin.getInstance().getConfig().getStringList("fvault.Item.Lore"))
|
||||||
|
.build();
|
||||||
|
|
||||||
//check if vault is set
|
//check if vault is set
|
||||||
if (vaultLocation != null) {
|
if (vaultLocation != null) {
|
||||||
@@ -40,36 +44,19 @@ public class CmdGetVault extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//has enough money?
|
//has enough money?
|
||||||
int amount = FactionsPlugin.getInstance().getConfig().getInt("fvault.Price");
|
int amount = FactionsPlugin.getInstance().getConfig().getInt("fvault.Price");
|
||||||
if (!context.fPlayer.hasMoney(amount)) {
|
if (!context.fPlayer.hasMoney(amount)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!context.fPlayer.takeMoney(amount)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//success :)
|
//success :)
|
||||||
|
context.fPlayer.takeMoney(amount);
|
||||||
context.player.getInventory().addItem(vault);
|
context.player.getInventory().addItem(vault);
|
||||||
context.fPlayer.msg(TL.COMMAND_GETVAULT_RECEIVE);
|
context.fPlayer.msg(TL.COMMAND_GETVAULT_RECEIVE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
if (count >= item.getAmount()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TL getUsageTranslation() {
|
public TL getUsageTranslation() {
|
||||||
|
|||||||
@@ -60,14 +60,11 @@ public class CmdInvite extends FCommand {
|
|||||||
// Send the invitation to the target player when online, otherwise just ignore
|
// Send the invitation to the target player when online, otherwise just ignore
|
||||||
if (target.isOnline()) {
|
if (target.isOnline()) {
|
||||||
// Tooltips, colors, and commands only apply to the string immediately before it.
|
// Tooltips, colors, and commands only apply to the string immediately before it.
|
||||||
FancyMessage message = new FancyMessage(context.fPlayer.describeTo(target, true))
|
FancyMessage message = new FancyMessage(TL.COMMAND_INVITE_INVITEDYOU.toString()
|
||||||
|
.replace("%1$s", context.fPlayer.describeTo(target, true))
|
||||||
|
.replace("%2$s", context.faction.getTag())
|
||||||
|
.replaceAll("&", "§"))
|
||||||
.tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString())
|
.tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString())
|
||||||
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag())
|
|
||||||
.then(TL.COMMAND_INVITE_INVITEDYOU.toString())
|
|
||||||
.color(ChatColor.YELLOW)
|
|
||||||
.tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString())
|
|
||||||
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag())
|
|
||||||
.then(context.faction.describeTo(target)).tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString())
|
|
||||||
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag());
|
.command("/" + Conf.baseCommandAliases.get(0) + " join " + context.faction.getTag());
|
||||||
message.send(target.getPlayer());
|
message.send(target.getPlayer());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class CmdJoin extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= getFactionMemberLimit(faction)) {
|
if (!faction.altInvited(fplayer) && Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= getFactionMemberLimit(faction)) {
|
||||||
context.msg(TL.COMMAND_JOIN_ATLIMIT, faction.getTag(context.fPlayer), getFactionMemberLimit(faction), fplayer.describeTo(context.fPlayer, false));
|
context.msg(TL.COMMAND_JOIN_ATLIMIT, faction.getTag(context.fPlayer), getFactionMemberLimit(faction), fplayer.describeTo(context.fPlayer, false));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.massivecraft.factions.FPlayers;
|
|||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
|
import com.massivecraft.factions.util.Cooldown;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
|
||||||
public class CmdOpen extends FCommand {
|
public class CmdOpen extends FCommand {
|
||||||
@@ -38,12 +39,19 @@ public class CmdOpen extends FCommand {
|
|||||||
|
|
||||||
String open = context.faction.getOpen() ? TL.COMMAND_OPEN_OPEN.toString() : TL.COMMAND_OPEN_CLOSED.toString();
|
String open = context.faction.getOpen() ? TL.COMMAND_OPEN_OPEN.toString() : TL.COMMAND_OPEN_CLOSED.toString();
|
||||||
|
|
||||||
|
if(Cooldown.isOnCooldown(context.fPlayer.getPlayer(), "openCooldown") && !context.fPlayer.isAdminBypassing()){
|
||||||
|
context.msg(TL.COMMAND_COOLDOWN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Inform
|
// Inform
|
||||||
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
||||||
if (fplayer.getFactionId().equals(context.faction.getId())) {
|
if (fplayer.getFactionId().equals(context.faction.getId())) {
|
||||||
fplayer.msg(TL.COMMAND_OPEN_CHANGES, context.fPlayer.getName(), open);
|
fplayer.msg(TL.COMMAND_OPEN_CHANGES, context.fPlayer.getName(), open);
|
||||||
|
Cooldown.setCooldown(fplayer.getPlayer(), "openCooldown", FactionsPlugin.getInstance().getConfig().getInt("fcooldowns.f-open"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if(FactionsPlugin.getInstance().getConfig().getBoolean("faction-open-broadcast")) return;
|
||||||
fplayer.msg(TL.COMMAND_OPEN_CHANGED, context.faction.getTag(fplayer.getFaction()), open);
|
fplayer.msg(TL.COMMAND_OPEN_CHANGED, context.faction.getTag(fplayer.getFaction()), open);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class CmdReload extends FCommand {
|
|||||||
|
|
||||||
|
|
||||||
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight", false)) {
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight", false)) {
|
||||||
FactionsPlugin.getInstance().factionsFlight = true;
|
FactionsPlugin.factionsFlight = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!FactionsPlugin.getInstance().mc17) {
|
if (!FactionsPlugin.getInstance().mc17) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class CmdSaveAll extends FCommand {
|
|||||||
Factions.getInstance().forceSave(false);
|
Factions.getInstance().forceSave(false);
|
||||||
Board.getInstance().forceSave(false);
|
Board.getInstance().forceSave(false);
|
||||||
Conf.save();
|
Conf.save();
|
||||||
|
FactionsPlugin.getInstance().getTimerManager().saveTimerData();
|
||||||
try {
|
try {
|
||||||
FactionsPlugin.instance.getFlogManager().saveLogs();
|
FactionsPlugin.instance.getFlogManager().saveLogs();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.google.common.collect.ArrayListMultimap;
|
|||||||
import com.google.common.collect.ListMultimap;
|
import com.google.common.collect.ListMultimap;
|
||||||
import com.massivecraft.factions.FLocation;
|
import com.massivecraft.factions.FLocation;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
|
||||||
public class CmdShowClaims extends FCommand {
|
public class CmdShowClaims extends FCommand {
|
||||||
@@ -16,6 +17,7 @@ public class CmdShowClaims extends FCommand {
|
|||||||
this.aliases.addAll(Aliases.show_claims);
|
this.aliases.addAll(Aliases.show_claims);
|
||||||
|
|
||||||
this.requirements = new CommandRequirements.Builder(Permission.SHOWCLAIMS)
|
this.requirements = new CommandRequirements.Builder(Permission.SHOWCLAIMS)
|
||||||
|
.withAction(PermissableAction.TERRITORY)
|
||||||
.playerOnly()
|
.playerOnly()
|
||||||
.memberOnly()
|
.memberOnly()
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ public class CmdShowInvites extends FCommand {
|
|||||||
String name = fp != null ? fp.getName() : id;
|
String name = fp != null ? fp.getName() : id;
|
||||||
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_SHOWINVITES_CLICKTOREVOKE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
|
msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_SHOWINVITES_CLICKTOREVOKE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name);
|
||||||
}
|
}
|
||||||
|
context.sendFancyMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class CmdStealth extends FCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
if (!Conf.useSealthSystem) {
|
if (!Conf.useStealthSystem) {
|
||||||
context.msg(TL.GENERIC_DISABLED, "Factions Stealth");
|
context.msg(TL.GENERIC_DISABLED, "Factions Stealth");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.massivecraft.factions.event.FactionRenameEvent;
|
|||||||
import com.massivecraft.factions.scoreboards.FTeamWrapper;
|
import com.massivecraft.factions.scoreboards.FTeamWrapper;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
|
import com.massivecraft.factions.util.Cooldown;
|
||||||
import com.massivecraft.factions.util.MiscUtil;
|
import com.massivecraft.factions.util.MiscUtil;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -53,6 +54,11 @@ public class CmdTag extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Cooldown.isOnCooldown(context.player, "tagCooldown") && !context.fPlayer.isAdminBypassing()){
|
||||||
|
context.msg(TL.COMMAND_COOLDOWN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// trigger the faction rename event (cancellable)
|
// trigger the faction rename event (cancellable)
|
||||||
FactionRenameEvent renameEvent = new FactionRenameEvent(context.fPlayer, tag);
|
FactionRenameEvent renameEvent = new FactionRenameEvent(context.fPlayer, tag);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
|
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
|
||||||
@@ -65,8 +71,11 @@ public class CmdTag extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String oldtag = context.faction.getTag();
|
String oldtag = context.faction.getTag();
|
||||||
context.faction.setTag(tag);
|
context.faction.setTag(tag);
|
||||||
|
|
||||||
Discord.changeFactionTag(context.faction, oldtag);
|
Discord.changeFactionTag(context.faction, oldtag);
|
||||||
FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.FTAG_EDIT, context.fPlayer.getName(), tag);
|
FactionsPlugin.instance.logFactionEvent(context.faction, FLogType.FTAG_EDIT, context.fPlayer.getName(), tag);
|
||||||
|
|
||||||
@@ -75,6 +84,7 @@ public class CmdTag extends FCommand {
|
|||||||
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) {
|
||||||
if (fplayer.getFactionId().equals(context.faction.getId())) {
|
if (fplayer.getFactionId().equals(context.faction.getId())) {
|
||||||
fplayer.msg(TL.COMMAND_TAG_FACTION, context.fPlayer.describeTo(context.faction, true), context.faction.getTag(context.faction));
|
fplayer.msg(TL.COMMAND_TAG_FACTION, context.fPlayer.describeTo(context.faction, true), context.faction.getTag(context.faction));
|
||||||
|
Cooldown.setCooldown(fplayer.getPlayer(), "tagCooldown", FactionsPlugin.getInstance().getConfig().getInt("fcooldowns.f-tag"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Broadcast the tag change (if applicable)
|
// Broadcast the tag change (if applicable)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.massivecraft.factions.struct.Permission;
|
|||||||
import com.massivecraft.factions.zcore.fperms.Access;
|
import com.massivecraft.factions.zcore.fperms.Access;
|
||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class CmdUnban extends FCommand {
|
public class CmdUnban extends FCommand {
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ public class CmdUnban extends FCommand {
|
|||||||
context.faction.unban(target);
|
context.faction.unban(target);
|
||||||
|
|
||||||
context.msg(TL.COMMAND_UNBAN_UNBANNED, context.fPlayer.getName(), target.getName());
|
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_TARGETUNBANNED, context.faction.getTag(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.massivecraft.factions.cmd.check.CmdCheck;
|
|||||||
import com.massivecraft.factions.cmd.check.CmdWeeWoo;
|
import com.massivecraft.factions.cmd.check.CmdWeeWoo;
|
||||||
import com.massivecraft.factions.cmd.chest.CmdChest;
|
import com.massivecraft.factions.cmd.chest.CmdChest;
|
||||||
import com.massivecraft.factions.cmd.claim.*;
|
import com.massivecraft.factions.cmd.claim.*;
|
||||||
import com.massivecraft.factions.cmd.configsf.CmdConvertConfig;
|
|
||||||
import com.massivecraft.factions.cmd.econ.CmdMoney;
|
import com.massivecraft.factions.cmd.econ.CmdMoney;
|
||||||
import com.massivecraft.factions.cmd.grace.CmdGrace;
|
import com.massivecraft.factions.cmd.grace.CmdGrace;
|
||||||
import com.massivecraft.factions.cmd.logout.CmdLogout;
|
import com.massivecraft.factions.cmd.logout.CmdLogout;
|
||||||
@@ -156,7 +155,6 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
|
|||||||
public CmdCheck cmdCheck = new CmdCheck();
|
public CmdCheck cmdCheck = new CmdCheck();
|
||||||
public CmdWeeWoo cmdWeeWoo = new CmdWeeWoo();
|
public CmdWeeWoo cmdWeeWoo = new CmdWeeWoo();
|
||||||
public CmdWild cmdWild = new CmdWild();
|
public CmdWild cmdWild = new CmdWild();
|
||||||
public CmdConvertConfig cmdConvertConfig = new CmdConvertConfig();
|
|
||||||
public CmdSpawnerLock cmdSpawnerLock = new CmdSpawnerLock();
|
public CmdSpawnerLock cmdSpawnerLock = new CmdSpawnerLock();
|
||||||
public CmdSetDiscord cmdSetDiscord = new CmdSetDiscord();
|
public CmdSetDiscord cmdSetDiscord = new CmdSetDiscord();
|
||||||
public CmdSeeDiscord cmdSeeDiscord = new CmdSeeDiscord();
|
public CmdSeeDiscord cmdSeeDiscord = new CmdSeeDiscord();
|
||||||
@@ -171,6 +169,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
|
|||||||
public CmdDelHome cmdDelHome = new CmdDelHome();
|
public CmdDelHome cmdDelHome = new CmdDelHome();
|
||||||
public CmdClaimFill cmdClaimFill = new CmdClaimFill();
|
public CmdClaimFill cmdClaimFill = new CmdClaimFill();
|
||||||
public CmdNotifications cmdNotifications = new CmdNotifications();
|
public CmdNotifications cmdNotifications = new CmdNotifications();
|
||||||
|
public CmdFriendlyFire cmdFriendlyFire = new CmdFriendlyFire();
|
||||||
|
|
||||||
//Variables to know if we already setup certain sub commands
|
//Variables to know if we already setup certain sub commands
|
||||||
public Boolean discordEnabled = false;
|
public Boolean discordEnabled = false;
|
||||||
@@ -301,11 +300,11 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
|
|||||||
this.addSubCommand(this.cmdCorner);
|
this.addSubCommand(this.cmdCorner);
|
||||||
this.addSubCommand(this.cmdFGlobal);
|
this.addSubCommand(this.cmdFGlobal);
|
||||||
this.addSubCommand(this.cmdViewChest);
|
this.addSubCommand(this.cmdViewChest);
|
||||||
this.addSubCommand(this.cmdConvertConfig);
|
|
||||||
this.addSubCommand(this.cmdSpawnerLock);
|
this.addSubCommand(this.cmdSpawnerLock);
|
||||||
this.addSubCommand(this.cmdDrain);
|
this.addSubCommand(this.cmdDrain);
|
||||||
this.addSubCommand(this.cmdLookup);
|
this.addSubCommand(this.cmdLookup);
|
||||||
this.addSubCommand(this.cmdNotifications);
|
this.addSubCommand(this.cmdNotifications);
|
||||||
|
this.addSubCommand(this.cmdFriendlyFire);
|
||||||
addVariableCommands();
|
addVariableCommands();
|
||||||
if (CommodoreProvider.isSupported()) brigadierManager.build();
|
if (CommodoreProvider.isSupported()) brigadierManager.build();
|
||||||
}
|
}
|
||||||
@@ -403,6 +402,8 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
|
|||||||
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight", false) && !fFlyEnabled) {
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight", false) && !fFlyEnabled) {
|
||||||
this.addSubCommand(this.cmdFly);
|
this.addSubCommand(this.cmdFly);
|
||||||
fFlyEnabled = true;
|
fFlyEnabled = true;
|
||||||
|
CmdFly.startFlyCheck();
|
||||||
|
CmdFly.startParticles();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.google.common.collect.Lists;
|
|||||||
import com.massivecraft.factions.Conf;
|
import com.massivecraft.factions.Conf;
|
||||||
import com.massivecraft.factions.Faction;
|
import com.massivecraft.factions.Faction;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package com.massivecraft.factions.cmd.check;
|
|||||||
import com.massivecraft.factions.FPlayer;
|
import com.massivecraft.factions.FPlayer;
|
||||||
import com.massivecraft.factions.Faction;
|
import com.massivecraft.factions.Faction;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ public class CmdClaim extends FCommand {
|
|||||||
this.stop();
|
this.stop();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
package com.massivecraft.factions.cmd.configsf;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
public class CmdConvertConfig extends FCommand {
|
|
||||||
|
|
||||||
public CmdConvertConfig() {
|
|
||||||
super();
|
|
||||||
this.aliases.add("convertconfig");
|
|
||||||
|
|
||||||
this.requirements = new CommandRequirements.Builder(Permission.CONVERTCONFIG)
|
|
||||||
.playerOnly()
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void perform(CommandContext context) {
|
|
||||||
ConvertConfigHandler.convertconfig(context.player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TL getUsageTranslation() {
|
|
||||||
return TL.COMMAND_CONVERTCONFIG_DESCRIPTION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
package com.massivecraft.factions.cmd.configsf;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.bukkit.scheduler.BukkitScheduler;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
public class ConvertConfigHandler {
|
|
||||||
|
|
||||||
static File savageConfigFile = new File("plugins/Factions/SavageFactions/config.yml");
|
|
||||||
static FileConfiguration sv = YamlConfiguration.loadConfiguration(savageConfigFile);
|
|
||||||
static File configFile = new File("plugins/Factions/config.yml");
|
|
||||||
static FileConfiguration sb = YamlConfiguration.loadConfiguration(configFile);
|
|
||||||
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) {
|
|
||||||
sb.set(s, sv.getInt(s));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setConfigSec(String s) {
|
|
||||||
ConfigurationSection cs = sv.getConfigurationSection(s);
|
|
||||||
sb.set(s, cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
|
||||||
scheduler.scheduleAsyncDelayedTask(plugin, () -> {
|
|
||||||
File savageConfigFile = new File("plugins/Factions/SavageFactions/config.yml");
|
|
||||||
FileConfiguration sv = YamlConfiguration.loadConfiguration(savageConfigFile);
|
|
||||||
File configFile = new File("plugins/Factions/config.yml");
|
|
||||||
FileConfiguration sb = YamlConfiguration.loadConfiguration(configFile);
|
|
||||||
sb.set("ConfigConvertedFromSavageFactions", true);
|
|
||||||
sb.set("debug", sv.getBoolean("debug"));
|
|
||||||
ConfigurationSection ffe = sv.getConfigurationSection("findfactionsexploit");
|
|
||||||
sb.set("findfactionsexploit", ffe);
|
|
||||||
setString("default-relation");
|
|
||||||
ConfigurationSection pC = sv.getConfigurationSection("portals");
|
|
||||||
sb.set("portals", pC);
|
|
||||||
sb.set("maxwarps", sv.getInt("maxwarps"));
|
|
||||||
setConfigSec("warp-cost");
|
|
||||||
setBoolean("enable-faction-flight");
|
|
||||||
setBoolean("ffly.AutoEnable");
|
|
||||||
setInt("fly-falldamage-cooldown");
|
|
||||||
setBoolean("disable-pistons-in-territory");
|
|
||||||
setConfigSec("tooltips");
|
|
||||||
setConfigSec("scoreboard");
|
|
||||||
sb.set("scoreboard.also-send-chat", true);
|
|
||||||
setConfigSec("warmups");
|
|
||||||
setConfigSec("max-relations");
|
|
||||||
setInt("world-border.buffer");
|
|
||||||
setConfigSec("hcf");
|
|
||||||
sb.set("show", sv.getStringList("show"));
|
|
||||||
setBoolean("show-exempt");
|
|
||||||
sb.set("map", sv.getStringList("map"));
|
|
||||||
setConfigSec("list");
|
|
||||||
setBoolean("use-old-help");
|
|
||||||
setConfigSec("help");
|
|
||||||
setConfigSec("fperm-gui");
|
|
||||||
sb.set("fperm-gui.action.slots.check", 50);
|
|
||||||
setConfigSec("fwarp-gui");
|
|
||||||
setBoolean("faction-creation-broadcast");
|
|
||||||
setBoolean("faction-disband-broadcast");
|
|
||||||
setBoolean("See-Invisible-Faction-Members");
|
|
||||||
setConfigSec("frules");
|
|
||||||
setConfigSec("ftnt");
|
|
||||||
setBoolean("fpaypal.Enabled");
|
|
||||||
setBoolean("checkpoints.Enabled");
|
|
||||||
setConfigSec("fnear");
|
|
||||||
setConfigSec("ffocus");
|
|
||||||
setConfigSec("fvualt");
|
|
||||||
setString("fupgrades.MainMenu.Title");
|
|
||||||
setString("fupgrades.MainMenu.DummyItem.Name");
|
|
||||||
setString("fupgrades.MainMenu.DummyItem.Type");
|
|
||||||
List<String> l = sv.getStringList("fupgrades.MainMenu.DummyItem.Lore");
|
|
||||||
sb.set("fupgrades.MainMenu.DummyItem.Lore", l);
|
|
||||||
setConfigSec("fupgrades.MainMenu.Crops.Crop-Boost");
|
|
||||||
setConfigSec("fupgrades.MainMenu.Crops.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.Crops.CropItem", sv.getConfigurationSection("fupgrades.MainMenu.Crops.DisplayItem"));
|
|
||||||
setConfigSec("fupgrades.MainMenu.EXP.EXP-Boost");
|
|
||||||
setConfigSec("fupgrades.MainMenu.EXP.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.EXP.EXPItem", sv.getConfigurationSection("fupgrades.MainMenu.EXP.DisplayItem"));
|
|
||||||
setConfigSec("fupgrades.MainMenu.Power.Power-Boost");
|
|
||||||
setConfigSec("fupgrades.MainMenu.Power.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.Power.PowerItem", sv.getConfigurationSection("fupgrades.MainMenu.Power.DisplayItem"));
|
|
||||||
List<Integer> p = new ArrayList();
|
|
||||||
p.add(sv.getInt("fupgrades.MainMenu.Power.DisplayItem.Slot"));
|
|
||||||
sb.set("fupgrades.MainMenu.Power.PowerItem.slots", p);
|
|
||||||
sb.set("fupgrades.MainMenu.Power.PowerItem.Amount", 1);
|
|
||||||
sb.set("fupgrades.MainMenu.Power.PowerItem.Damage", 0);
|
|
||||||
sb.set("fupgrades.MainMenu.Power.PowerItem.Slot", null);
|
|
||||||
sb.set("fupgrades.MainMenu.Members.Members-Limit", sv.getConfigurationSection("fupgrades.MainMenu.Members.Members-Boost"));
|
|
||||||
setConfigSec("fupgrades.MainMenu.Spawners.Spawner-Boost");
|
|
||||||
setConfigSec("fupgrades.MainMenu.Spawners.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.Spawners.SpawnerItem", sv.getConfigurationSection("fupgrades.MainMenu.Spawners.DisplayItem"));
|
|
||||||
setConfigSec("fupgrades.MainMenu.Chest.Chest-Size");
|
|
||||||
setConfigSec("fupgrades.MainMenu.Chest.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.Chest.ChestItem", sv.getConfigurationSection("fupgrades.MainMenu.Chest.DisplayItem"));
|
|
||||||
setConfigSec("fupgrades.MainMenu.Members.Cost");
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem", sv.getConfigurationSection("fupgrades.MainMenu.Members.DisplayItem"));
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem.Amount", 1);
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem.Damage", 0);
|
|
||||||
if (sv.getString("fupgrades.MainMenu.Members.DisplayItem.Type").equalsIgnoreCase("PLAYER_HEAD"))
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem.Type", "PAPER");
|
|
||||||
List<Integer> x = new ArrayList();
|
|
||||||
x.add(sv.getInt("fupgrades.MainMenu.Members.DisplayItem.Slot"));
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem.slots", x);
|
|
||||||
sb.set("fupgrades.MainMenu.Members.MembersItem.Slot", null);
|
|
||||||
sb.set("fupgrades.MainMenu.Members.Members-Limit", sv.getConfigurationSection("fupgrades.MainMenu.Members.Members-Boost"));
|
|
||||||
setConfigSec("fbanners");
|
|
||||||
setConfigSec("see-chunk");
|
|
||||||
setConfigSec("Tntfill");
|
|
||||||
try {
|
|
||||||
sb.save(configFile);
|
|
||||||
plugin.reloadConfig();
|
|
||||||
} catch (IOException e) {
|
|
||||||
player.sendMessage(TL.COMMAND_CONVERTCONFIG_FAIL.toString());
|
|
||||||
Bukkit.getLogger().log(Level.SEVERE, Arrays.toString(e.getStackTrace()));
|
|
||||||
}
|
|
||||||
player.sendMessage(TL.COMMAND_CONVERTCONFIG_SUCCESS.toString());
|
|
||||||
}, 0L);
|
|
||||||
} else {
|
|
||||||
player.sendMessage(TL.COMMAND_CONVERTCONFIG_FAILCONFIGMISSING.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -37,7 +37,7 @@ public class CmdMoneyDeposit extends FCommand {
|
|||||||
double amount = context.argAsDouble(0, 0d);
|
double amount = context.argAsDouble(0, 0d);
|
||||||
EconomyParticipator faction = context.argAsFaction(1, context.faction);
|
EconomyParticipator faction = context.argAsFaction(1, context.faction);
|
||||||
|
|
||||||
if(amount <= 0){
|
if (amount <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class CmdMoneyTransferFf extends FCommand {
|
|||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
double amount = context.argAsDouble(0, 0d);
|
double amount = context.argAsDouble(0, 0d);
|
||||||
|
|
||||||
if(amount <= 0){
|
if (amount <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class CmdMoneyTransferFp extends FCommand {
|
|||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
double amount = context.argAsDouble(0, 0d);
|
double amount = context.argAsDouble(0, 0d);
|
||||||
|
|
||||||
if(amount <= 0){
|
if (amount <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class CmdMoneyTransferPf extends FCommand {
|
|||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
double amount = context.argAsDouble(0, 0d);
|
double amount = context.argAsDouble(0, 0d);
|
||||||
|
|
||||||
if(amount <= 0){
|
if (amount <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class CmdMoneyWithdraw extends FCommand {
|
|||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
double amount = context.argAsDouble(0, 0d);
|
double amount = context.argAsDouble(0, 0d);
|
||||||
|
|
||||||
if(amount <= 0){
|
if (amount <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,73 @@
|
|||||||
package com.massivecraft.factions.cmd.grace;
|
package com.massivecraft.factions.cmd.grace;
|
||||||
|
|
||||||
import com.massivecraft.factions.Conf;
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.FPlayers;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.cmd.Aliases;
|
import com.massivecraft.factions.cmd.Aliases;
|
||||||
import com.massivecraft.factions.cmd.CommandContext;
|
import com.massivecraft.factions.cmd.CommandContext;
|
||||||
import com.massivecraft.factions.cmd.CommandRequirements;
|
import com.massivecraft.factions.cmd.CommandRequirements;
|
||||||
import com.massivecraft.factions.cmd.FCommand;
|
import com.massivecraft.factions.cmd.FCommand;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.util.timer.TimerManager;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class CmdGrace extends FCommand {
|
public class CmdGrace extends FCommand {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Driftay
|
* @author Driftay
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//TODO: Make Timed Format For Grace Period
|
|
||||||
public CmdGrace() {
|
public CmdGrace() {
|
||||||
super();
|
super();
|
||||||
this.aliases.addAll(Aliases.grace);
|
this.aliases.addAll(Aliases.grace);
|
||||||
|
|
||||||
|
this.optionalArgs.put("on/off", "toggle");
|
||||||
|
|
||||||
this.requirements = new CommandRequirements.Builder(Permission.GRACE)
|
this.requirements = new CommandRequirements.Builder(Permission.GRACE)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
Conf.gracePeriod = !Conf.gracePeriod;
|
if (!Conf.useGraceSystem) {
|
||||||
context.msg(TL.COMMAND_GRACE_TOGGLE, Conf.gracePeriod ? FactionsPlugin.getInstance().color("&aEnabled") : FactionsPlugin.getInstance().color("&4Disabled"));
|
context.msg(TL.GENERIC_DISABLED, "factions grace");
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(context.args.size() == 1) {
|
||||||
|
if (context.sender.hasPermission(String.valueOf(Permission.GRACETOGGLE))) {
|
||||||
|
if (context.argAsString(0).equalsIgnoreCase("on") || context.argAsString(0).equalsIgnoreCase("start")) {
|
||||||
|
FactionsPlugin.getInstance().getTimerManager().graceTimer.setPaused(false);
|
||||||
|
FactionsPlugin.getInstance().getTimerManager().graceTimer.setRemaining(TimeUnit.DAYS.toMillis(Conf.gracePeriodTimeDays), true);
|
||||||
|
if (Conf.broadcastGraceToggles) {
|
||||||
|
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers())
|
||||||
|
follower.msg(TL.COMMAND_GRACE_ENABLED_FORMAT, String.valueOf(TimerManager.getRemaining(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining(), true)));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context.argAsString(0).equalsIgnoreCase("off") || context.argAsString(0).equalsIgnoreCase("stop")) {
|
||||||
|
FactionsPlugin.getInstance().getTimerManager().graceTimer.setRemaining(TimeUnit.SECONDS.toMillis(0L), true);
|
||||||
|
FactionsPlugin.getInstance().getTimerManager().graceTimer.setPaused(false);
|
||||||
|
if (Conf.broadcastGraceToggles) {
|
||||||
|
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers())
|
||||||
|
follower.msg(TL.COMMAND_GRACE_DISABLED_FORMAT);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining() <= 0L) {
|
||||||
|
context.fPlayer.msg(TL.COMMAND_GRACE_DISABLED_NO_FORMAT.toString());
|
||||||
|
} else {
|
||||||
|
context.fPlayer.msg(TL.COMMAND_GRACE_TIME_REMAINING, String.valueOf(TimerManager.getRemaining(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining(), true)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TL getUsageTranslation() {
|
public TL getUsageTranslation() {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class CmdPointsBalance extends FCommand {
|
|||||||
|
|
||||||
if (context.argIsSet(0)) {
|
if (context.argIsSet(0)) {
|
||||||
faction = context.argAsFaction(0);
|
faction = context.argAsFaction(0);
|
||||||
} else if(context.faction.isNormal()){
|
} else if (context.faction.isNormal()) {
|
||||||
context.msg(TL.COMMAND_POINTS_SHOW_OWN, context.faction.getPoints());
|
context.msg(TL.COMMAND_POINTS_SHOW_OWN, context.faction.getPoints());
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CmdTntFill extends FCommand {
|
public class CmdTntFill extends FCommand {
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
package com.massivecraft.factions.cmd.wild;
|
package com.massivecraft.factions.cmd.wild;
|
||||||
|
|
||||||
|
|
||||||
import com.massivecraft.factions.Board;
|
import com.massivecraft.factions.*;
|
||||||
import com.massivecraft.factions.FLocation;
|
|
||||||
import com.massivecraft.factions.FPlayers;
|
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
|
||||||
import com.massivecraft.factions.cmd.Aliases;
|
import com.massivecraft.factions.cmd.Aliases;
|
||||||
import com.massivecraft.factions.cmd.CommandContext;
|
import com.massivecraft.factions.cmd.CommandContext;
|
||||||
import com.massivecraft.factions.cmd.CommandRequirements;
|
import com.massivecraft.factions.cmd.CommandRequirements;
|
||||||
@@ -14,6 +11,7 @@ import com.massivecraft.factions.util.wait.WaitedTask;
|
|||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
@@ -24,10 +22,14 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DroppingAnvil
|
||||||
|
*/
|
||||||
public class CmdWild extends FCommand implements WaitedTask {
|
public class CmdWild extends FCommand implements WaitedTask {
|
||||||
public static HashMap<Player, String> teleportRange;
|
public static HashMap<Player, String> teleportRange;
|
||||||
public static HashSet<Player> teleporting;
|
public static HashSet<Player> teleporting;
|
||||||
public static CmdWild instance;
|
public static CmdWild instance;
|
||||||
|
public static final String tpWorld = FactionsPlugin.getInstance().getConfig().getString("Wild.World", "World");
|
||||||
|
|
||||||
public CmdWild() {
|
public CmdWild() {
|
||||||
super();
|
super();
|
||||||
@@ -59,12 +61,13 @@ public class CmdWild extends FCommand implements WaitedTask {
|
|||||||
int z = new Random().nextInt((c.getInt("Range.MaxZ") - c.getInt("Range.MinZ")) + 1) + c.getInt("Range.MinZ");
|
int z = new Random().nextInt((c.getInt("Range.MaxZ") - c.getInt("Range.MinZ")) + 1) + c.getInt("Range.MinZ");
|
||||||
if (Board.getInstance().getFactionAt(new FLocation(p.getWorld().getName(), x, z)).isWilderness()) {
|
if (Board.getInstance().getFactionAt(new FLocation(p.getWorld().getName(), x, z)).isWilderness()) {
|
||||||
success = true;
|
success = true;
|
||||||
FLocation loc = new FLocation(p.getWorld().getName(), x, z);
|
FLocation loc = new FLocation(tpWorld, x, z);
|
||||||
teleportRange.remove(p);
|
teleportRange.remove(p);
|
||||||
if (!FPlayers.getInstance().getByPlayer(p).takeMoney(c.getInt("Cost"))) {
|
if (!FPlayers.getInstance().getByPlayer(p).takeMoney(c.getInt("Cost"))) {
|
||||||
p.sendMessage(TL.GENERIC_NOTENOUGHMONEY.toString());
|
p.sendMessage(TL.GENERIC_NOTENOUGHMONEY.toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (Conf.wildLoadChunkBeforeTeleport && !loc.getChunk().isLoaded()) loc.getChunk().load();
|
||||||
teleportPlayer(p, loc);
|
teleportPlayer(p, loc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.massivecraft.factions.cmd.wild;
|
|||||||
|
|
||||||
import com.massivecraft.factions.FPlayer;
|
import com.massivecraft.factions.FPlayer;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
import com.massivecraft.factions.util.wait.WaitExecutor;
|
import com.massivecraft.factions.util.wait.WaitExecutor;
|
||||||
import com.massivecraft.factions.util.wait.WaitTask;
|
import com.massivecraft.factions.util.wait.WaitTask;
|
||||||
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -20,6 +20,9 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DroppingAnvil
|
||||||
|
*/
|
||||||
public class WildGUI implements FactionGUI {
|
public class WildGUI implements FactionGUI {
|
||||||
Player player;
|
Player player;
|
||||||
FPlayer fplayer;
|
FPlayer fplayer;
|
||||||
@@ -37,7 +40,7 @@ public class WildGUI implements FactionGUI {
|
|||||||
if (map.containsKey(slot)) {
|
if (map.containsKey(slot)) {
|
||||||
String zone = map.get(slot);
|
String zone = map.get(slot);
|
||||||
if (fplayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("Wild.Zones." + zone + ".Cost"))) {
|
if (fplayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("Wild.Zones." + zone + ".Cost"))) {
|
||||||
WaitExecutor.taskMap.put(player, new WaitTask(FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait"), TL.COMMAND_WILD_INPROGRESS, player, CmdWild.instance));
|
WaitExecutor.taskMap.put(player, new WaitTask(FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait"), TL.COMMAND_WILD_WAIT, player, CmdWild.instance));
|
||||||
CmdWild.teleportRange.put(player, zone);
|
CmdWild.teleportRange.put(player, zone);
|
||||||
fplayer.msg(TL.COMMAND_WILD_WAIT, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait") + " Seconds");
|
fplayer.msg(TL.COMMAND_WILD_WAIT, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait") + " Seconds");
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ public class Econ {
|
|||||||
|
|
||||||
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount, boolean notify) {
|
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount, boolean notify) {
|
||||||
if (!shouldBeUsed()) {
|
if (!shouldBeUsed()) {
|
||||||
invoker.msg(TL.ECON_OFF);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.sk89q.worldguard.domains.Association;
|
|||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||||
import com.sk89q.worldguard.protection.association.Associables;
|
import com.sk89q.worldguard.protection.association.Associables;
|
||||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||||
@@ -22,7 +21,9 @@ import org.bukkit.plugin.Plugin;
|
|||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WorldGuard Permission Checking.
|
* WorldGuard Permission Checking.
|
||||||
@@ -34,10 +35,6 @@ import java.util.*;
|
|||||||
public class Worldguard {
|
public class Worldguard {
|
||||||
|
|
||||||
private static Worldguard instance;
|
private static Worldguard instance;
|
||||||
/**
|
|
||||||
* @author FactionsUUID Team
|
|
||||||
*/
|
|
||||||
|
|
||||||
private Object worldGuard;
|
private Object worldGuard;
|
||||||
private WorldGuardPlugin worldGuardPlugin;
|
private WorldGuardPlugin worldGuardPlugin;
|
||||||
private Object regionContainer;
|
private Object regionContainer;
|
||||||
@@ -59,7 +56,7 @@ public class Worldguard {
|
|||||||
Plugin p = Bukkit.getPluginManager().getPlugin("WorldGuard");
|
Plugin p = Bukkit.getPluginManager().getPlugin("WorldGuard");
|
||||||
|
|
||||||
if (p == null) {
|
if (p == null) {
|
||||||
FactionsPlugin.instance.log("Could not find WorldGuard! Support will not be added.");
|
FactionsPlugin.getInstance().log("Could not find WorldGuard! Support will not be added.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (p instanceof WorldGuardPlugin) {
|
if (p instanceof WorldGuardPlugin) {
|
||||||
@@ -69,9 +66,9 @@ public class Worldguard {
|
|||||||
Class<?> worldGuardClass = Class.forName("com.sk89q.worldguard.WorldGuard");
|
Class<?> worldGuardClass = Class.forName("com.sk89q.worldguard.WorldGuard");
|
||||||
Method getInstanceMethod = worldGuardClass.getMethod("getInstance");
|
Method getInstanceMethod = worldGuardClass.getMethod("getInstance");
|
||||||
worldGuard = getInstanceMethod.invoke(null);
|
worldGuard = getInstanceMethod.invoke(null);
|
||||||
FactionsPlugin.instance.log("Found WorldGuard 7+");
|
FactionsPlugin.getInstance().log("Found WorldGuard 7+");
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("Found WorldGuard <7");
|
FactionsPlugin.getInstance().log("Found WorldGuard <7");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,42 +92,6 @@ public class Worldguard {
|
|||||||
return associable;
|
return associable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPvPDisabled(Location l) {
|
|
||||||
try {
|
|
||||||
ApplicableRegionSet regionSet = Objects.requireNonNull(instance.getRegionManager(l.getWorld())).getApplicableRegions(l);
|
|
||||||
if (regionSet.size() < 1) {
|
|
||||||
try {
|
|
||||||
return Objects.requireNonNull(Objects.requireNonNull(instance.getRegionManager(l.getWorld())).getRegion("__global__")).getFlags().get(DefaultFlag.PVP) == StateFlag.State.DENY;
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (!(e instanceof NullPointerException)) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
boolean return_flag = false;
|
|
||||||
int return_priority = -1;
|
|
||||||
for (ProtectedRegion region : regionSet) {
|
|
||||||
if (region.getFlags().containsKey(DefaultFlag.PVP)) {
|
|
||||||
StateFlag.State pvp_flag = (StateFlag.State) region.getFlags().get(DefaultFlag.PVP);
|
|
||||||
int region_priority = region.getPriority();
|
|
||||||
if (return_priority == -1) {
|
|
||||||
return_flag = pvp_flag == StateFlag.State.DENY;
|
|
||||||
return_priority = region_priority;
|
|
||||||
} else if (region_priority > return_priority) {
|
|
||||||
return_flag = pvp_flag == StateFlag.State.DENY;
|
|
||||||
return_priority = region_priority;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_flag;
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Credits to the people listed above for using reflections to load WorldGuard 6.0 & 7.0 in 1 class!
|
* Credits to the people listed above for using reflections to load WorldGuard 6.0 & 7.0 in 1 class!
|
||||||
*/
|
*/
|
||||||
@@ -159,8 +120,8 @@ public class Worldguard {
|
|||||||
breakFlag = (StateFlag) flagsClass.getField("BREAK").get(null);
|
breakFlag = (StateFlag) flagsClass.getField("BREAK").get(null);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("We failed to load some part of World Guard. Support will be removed!");
|
FactionsPlugin.getInstance().log("We failed to load some part of World Guard. Support will be removed!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
regionContainer = null;
|
regionContainer = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -178,8 +139,8 @@ public class Worldguard {
|
|||||||
breakFlag = (StateFlag) flagsClass.getField("BREAK").get(null);
|
breakFlag = (StateFlag) flagsClass.getField("BREAK").get(null);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("We failed to load some part of World Guard. Support will be removed!");
|
FactionsPlugin.getInstance().log("We failed to load some part of World Guard. Support will be removed!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
regionContainer = null;
|
regionContainer = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -195,8 +156,8 @@ public class Worldguard {
|
|||||||
vectorConstructorAsAMethodBecauseWhyNot = vectorClass.getMethod("at", Double.TYPE, Double.TYPE, Double.TYPE);
|
vectorConstructorAsAMethodBecauseWhyNot = vectorClass.getMethod("at", Double.TYPE, Double.TYPE, Double.TYPE);
|
||||||
regionManagerGetMethod = RegionManager.class.getMethod("getApplicableRegions", vectorClass);
|
regionManagerGetMethod = RegionManager.class.getMethod("getApplicableRegions", vectorClass);
|
||||||
} catch (Exception sodonewiththis) {
|
} catch (Exception sodonewiththis) {
|
||||||
FactionsPlugin.instance.log("We failed to load Vector Classes from WorldGuard! Support will be removed!");
|
FactionsPlugin.getInstance().log("We failed to load Vector Classes from WorldGuard! Support will be removed!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
regionContainer = null;
|
regionContainer = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -216,7 +177,7 @@ public class Worldguard {
|
|||||||
regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, world);
|
regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, world);
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("An error occurred looking up a WorldGuard RegionManager");
|
FactionsPlugin.getInstance().log("An error occurred looking up a WorldGuard RegionManager");
|
||||||
}
|
}
|
||||||
return regionManager;
|
return regionManager;
|
||||||
}
|
}
|
||||||
@@ -230,8 +191,8 @@ public class Worldguard {
|
|||||||
: vectorConstructorAsAMethodBecauseWhyNot.invoke(null, location.getX(), location.getY(), location.getZ());
|
: vectorConstructorAsAMethodBecauseWhyNot.invoke(null, location.getX(), location.getY(), location.getZ());
|
||||||
return (ApplicableRegionSet) regionManagerGetMethod.invoke(regionManager, vector);
|
return (ApplicableRegionSet) regionManagerGetMethod.invoke(regionManager, vector);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("An error occurred looking up a WorldGuard ApplicableRegionSet");
|
FactionsPlugin.getInstance().log("An error occurred looking up a WorldGuard ApplicableRegionSet");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -255,8 +216,8 @@ public class Worldguard {
|
|||||||
} else
|
} else
|
||||||
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag});
|
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag});
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
FactionsPlugin.getInstance().log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -281,8 +242,8 @@ public class Worldguard {
|
|||||||
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag});
|
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag});
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
FactionsPlugin.getInstance().log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -320,8 +281,8 @@ public class Worldguard {
|
|||||||
|
|
||||||
return overlaps != null && !overlaps.isEmpty();
|
return overlaps != null && !overlaps.isEmpty();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
FactionsPlugin.getInstance().log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
|
||||||
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
FactionsPlugin.getInstance().log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -94,26 +94,23 @@ public class FactionsBlockListener implements Listener {
|
|||||||
boolean landOwned = (myFaction.doesLocationHaveOwnersSet(loc) && !myFaction.getOwnerList(loc).isEmpty());
|
boolean landOwned = (myFaction.doesLocationHaveOwnersSet(loc) && !myFaction.getOwnerList(loc).isEmpty());
|
||||||
if ((landOwned && myFaction.getOwnerListString(loc).contains(player.getName())) || (me.getRole() == Role.LEADER && me.getFactionId().equals(myFaction.getId())))
|
if ((landOwned && myFaction.getOwnerListString(loc).contains(player.getName())) || (me.getRole() == Role.LEADER && me.getFactionId().equals(myFaction.getId())))
|
||||||
return true;
|
return true;
|
||||||
else {
|
else if (landOwned && !myFaction.getOwnerListString(loc).contains(player.getName())) {
|
||||||
String replace = TL.ACTIONS_NOPERMISSIONPAIN.toString().replace("{action}", action.toString());
|
me.msg(TL.ACTIONS_OWNEDTERRITORYDENY.toString().replace("{owners}", myFaction.getOwnerListString(loc)));
|
||||||
if (landOwned && !myFaction.getOwnerListString(loc).contains(player.getName())) {
|
if (shouldHurt) {
|
||||||
me.msg(TL.ACTIONS_OWNEDTERRITORYDENY.toString().replace("{owners}", myFaction.getOwnerListString(loc)));
|
player.damage(Conf.actionDeniedPainAmount);
|
||||||
if (shouldHurt) {
|
me.msg(TL.ACTIONS_NOPERMISSIONPAIN.toString().replace("{action}", action.toString()).replace("{faction}", Board.getInstance().getFactionAt(loc).getTag(myFaction)));
|
||||||
player.damage(Conf.actionDeniedPainAmount);
|
}
|
||||||
me.msg(replace.replace("{faction}", Board.getInstance().getFactionAt(loc).getTag(myFaction)));
|
return false;
|
||||||
}
|
} else if (!landOwned && access == Access.DENY) { // If land is not owned but access is set to DENY anyway
|
||||||
return false;
|
if (shouldHurt) {
|
||||||
} else if (!landOwned && access == Access.DENY) { // If land is not owned but access is set to DENY anyway
|
player.damage(Conf.actionDeniedPainAmount);
|
||||||
if (shouldHurt) {
|
if ((Board.getInstance().getFactionAt(loc).getTag(myFaction)) != null)
|
||||||
player.damage(Conf.actionDeniedPainAmount);
|
me.msg(TL.ACTIONS_NOPERMISSIONPAIN.toString().replace("{action}", action.toString()).replace("{faction}", Board.getInstance().getFactionAt(loc).getTag(myFaction)));
|
||||||
if ((Board.getInstance().getFactionAt(loc).getTag(myFaction)) != null)
|
}
|
||||||
me.msg(replace.replace("{faction}", Board.getInstance().getFactionAt(loc).getTag(myFaction)));
|
if (myFaction.getTag(me.getFaction()) != null && action != null)
|
||||||
}
|
me.msg(TL.ACTIONS_NOPERMISSION.toString().replace("{faction}", myFaction.getTag(me.getFaction())).replace("{action}", action.toString()));
|
||||||
if (myFaction.getTag(me.getFaction()) != null && action != null)
|
return false;
|
||||||
me.msg(TL.ACTIONS_NOPERMISSION.toString().replace("{faction}", myFaction.getTag(me.getFaction())).replace("{action}", action.toString()));
|
} else if (access == Access.ALLOW) return true;
|
||||||
return false;
|
|
||||||
} else if (access == Access.ALLOW) return true;
|
|
||||||
}
|
|
||||||
me.msg(TL.ACTIONS_NOPERMISSION.toString().replace("{faction}", myFaction.getTag(me.getFaction())).replace("{action}", action.toString()));
|
me.msg(TL.ACTIONS_NOPERMISSION.toString().replace("{faction}", myFaction.getTag(me.getFaction())).replace("{action}", action.toString()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -183,12 +180,18 @@ public class FactionsBlockListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onBlockFromTo(BlockFromToEvent event) {
|
public void onBlockFromTo(BlockFromToEvent event) {
|
||||||
if (!Conf.handleExploitLiquidFlow) return;
|
if (!Conf.handleExploitLiquidFlow) return;
|
||||||
|
|
||||||
if (event.getBlock().isLiquid()) {
|
if (event.getBlock().isLiquid()) {
|
||||||
if (event.getToBlock().isEmpty()) {
|
if (event.getToBlock().isEmpty()) {
|
||||||
Faction from = Board.getInstance().getFactionAt(new FLocation(event.getBlock()));
|
Faction from = Board.getInstance().getFactionAt(new FLocation(event.getBlock()));
|
||||||
Faction to = Board.getInstance().getFactionAt(new FLocation(event.getToBlock()));
|
Faction to = Board.getInstance().getFactionAt(new FLocation(event.getToBlock()));
|
||||||
if (from == to) return;
|
if (from == to) return;
|
||||||
// from faction != to faction
|
// from faction != to faction
|
||||||
|
if(to.isSystemFaction()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (to.isNormal()) {
|
if (to.isNormal()) {
|
||||||
if (from.isNormal() && from.getRelationTo(to).isAlly()) {
|
if (from.isNormal() && from.getRelationTo(to).isAlly()) {
|
||||||
return;
|
return;
|
||||||
@@ -416,9 +419,8 @@ public class FactionsBlockListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onFrostWalker(EntityBlockFormEvent event) {
|
public void onFrostWalker(EntityBlockFormEvent event) {
|
||||||
if (event.getEntity() == null || event.getEntity().getType() != EntityType.PLAYER || event.getBlock() == null) {
|
if (event.getEntity() == null || event.getEntity().getType() != EntityType.PLAYER || event.getBlock() == null)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
Location location = event.getBlock().getLocation();
|
Location location = event.getBlock().getLocation();
|
||||||
@@ -426,14 +428,10 @@ public class FactionsBlockListener implements Listener {
|
|||||||
// only notify every 10 seconds
|
// only notify every 10 seconds
|
||||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
boolean justCheck = fPlayer.getLastFrostwalkerMessage() + 10000 > System.currentTimeMillis();
|
boolean justCheck = fPlayer.getLastFrostwalkerMessage() + 10000 > System.currentTimeMillis();
|
||||||
if (!justCheck) {
|
if (!justCheck) fPlayer.setLastFrostwalkerMessage();
|
||||||
fPlayer.setLastFrostwalkerMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if they have build permissions here. If not, block this from happening.
|
// Check if they have build permissions here. If not, block this from happening.
|
||||||
if (!playerCanBuildDestroyBlock(player, location, PermissableAction.FROST_WALK.toString(), justCheck)) {
|
if (!playerCanBuildDestroyBlock(player, location, PermissableAction.FROST_WALK.toString(), justCheck)) event.setCancelled(true);
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -448,29 +446,6 @@ public class FactionsBlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Grace
|
|
||||||
@EventHandler
|
|
||||||
public void onBreak(EntityExplodeEvent e) {
|
|
||||||
if (!Conf.gracePeriod) return;
|
|
||||||
|
|
||||||
e.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onTNTPlace(BlockPlaceEvent e1) {
|
|
||||||
FPlayer fp = FPlayers.getInstance().getByPlayer(e1.getPlayer());
|
|
||||||
if (!Conf.gracePeriod) return;
|
|
||||||
|
|
||||||
if (!fp.isAdminBypassing()) {
|
|
||||||
if (e1.getBlock().getType().equals(Material.TNT)) {
|
|
||||||
e1.setCancelled(true);
|
|
||||||
|
|
||||||
fp.msg(TL.COMMAND_GRACE_ENABLED, e1.getBlockPlaced().getType().toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean canPistonMoveBlock(Faction pistonFaction, Location target) {
|
private boolean canPistonMoveBlock(Faction pistonFaction, Location target) {
|
||||||
Faction otherFaction = Board.getInstance().getFactionAt(new FLocation(target));
|
Faction otherFaction = Board.getInstance().getFactionAt(new FLocation(target));
|
||||||
|
|
||||||
@@ -493,7 +468,6 @@ public class FactionsBlockListener implements Listener {
|
|||||||
|
|
||||||
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
|
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
|
||||||
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
|
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
|
||||||
|
|
||||||
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
|
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@@ -538,6 +512,7 @@ public class FactionsBlockListener implements Listener {
|
|||||||
Player p = (Player) event.getRemover();
|
Player p = (Player) event.getRemover();
|
||||||
if (!playerCanBuildDestroyBlock(p, event.getEntity().getLocation(), "destroy", true)) {
|
if (!playerCanBuildDestroyBlock(p, event.getEntity().getLocation(), "destroy", true)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.massivecraft.factions.util.MiscUtil;
|
|||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.minecart.ExplosiveMinecart;
|
import org.bukkit.entity.minecart.ExplosiveMinecart;
|
||||||
@@ -95,11 +94,9 @@ public class FactionsEntityListener implements Listener {
|
|||||||
public void onEntityDamage(EntityDamageEvent event) {
|
public void onEntityDamage(EntityDamageEvent event) {
|
||||||
if (event instanceof EntityDamageByEntityEvent) {
|
if (event instanceof EntityDamageByEntityEvent) {
|
||||||
EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent) event;
|
EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent) event;
|
||||||
if (!this.canDamagerHurtDamagee(sub, true)) {
|
if (!this.canDamagerHurtDamagee(sub, true)) event.setCancelled(true);
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
// event is not cancelled by factions
|
|
||||||
|
|
||||||
|
// event is not cancelled by factions
|
||||||
Entity damagee = sub.getEntity();
|
Entity damagee = sub.getEntity();
|
||||||
Entity damager = sub.getDamager();
|
Entity damager = sub.getDamager();
|
||||||
if (damagee instanceof Player) {
|
if (damagee instanceof Player) {
|
||||||
@@ -126,15 +123,12 @@ public class FactionsEntityListener implements Listener {
|
|||||||
// this should disable the fly so
|
// this should disable the fly so
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else return; // this should trigger if the attacker shootin the arrow is a mob
|
||||||
// this should trigger if the attacker shootin the arrow is a mob
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Protect armor stands/item frames from being damaged in protected territories
|
// Protect armor stands/item frames from being damaged in protected territories
|
||||||
if (damagee.getType() == EntityType.ITEM_FRAME || damagee.getType().name().equals("armor_stand")) {
|
if (damagee.getType() == EntityType.ITEM_FRAME || damagee.getType() == EntityType.ARMOR_STAND) {
|
||||||
// Manage projectiles launched by players
|
// Manage projectiles launched by players
|
||||||
if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Entity) {
|
if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Entity) {
|
||||||
damager = (Entity) ((Projectile) damager).getShooter();
|
damager = (Entity) ((Projectile) damager).getShooter();
|
||||||
@@ -142,37 +136,22 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
// Run the check for a player
|
// Run the check for a player
|
||||||
if (damager instanceof Player) {
|
if (damager instanceof Player) {
|
||||||
Player player = (Player) damager;
|
|
||||||
Material material = null;
|
if (!FactionsBlockListener.playerCanBuildDestroyBlock((Player) damager, damagee.getLocation(), "destroy", false))
|
||||||
switch (sub.getEntity().getType()) {
|
|
||||||
case ITEM_FRAME:
|
|
||||||
material = Material.ITEM_FRAME;
|
|
||||||
break;
|
|
||||||
case ARMOR_STAND:
|
|
||||||
material = Material.ARMOR_STAND;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (material != null && !FactionsBlockListener.playerCanBuildDestroyBlock(player, damagee.getLocation(), "destroy " + material.toString().toLowerCase(), false)) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// we don't want to let mobs/arrows destroy item frames/armor stands
|
// we don't want to let mobs/arrows destroy item frames/armor stands
|
||||||
// so we only have to run the check as if there had been an explosion at the damager location
|
// so we only have to run the check as if there had been an explosion at the damager location
|
||||||
if (!this.checkExplosionForBlock(damager, damagee.getLocation().getBlock())) {
|
if (!this.checkExplosionForBlock(damager, damagee.getLocation().getBlock()))
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// we don't need to go after
|
// we don't need to go after
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//this one should trigger if something other than a player takes damage
|
//this one should trigger if something other than a player takes damage
|
||||||
if (damager instanceof Player) {
|
if (damager instanceof Player) return;
|
||||||
// now itll only go here if the damage is dealt by a player
|
|
||||||
return;
|
|
||||||
// we cancel it so fly isnt removed when you hit a mob etc
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (damagee != null && damagee instanceof Player) {
|
if (damagee != null && damagee instanceof Player) {
|
||||||
cancelFStuckTeleport((Player) damagee);
|
cancelFStuckTeleport((Player) damagee);
|
||||||
@@ -216,6 +195,7 @@ public class FactionsEntityListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void cancelFFly(Player player) {
|
private void cancelFFly(Player player) {
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
@@ -361,26 +341,39 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
if (!(damagee instanceof Player)) return true;
|
if (!(damagee instanceof Player)) return true;
|
||||||
|
|
||||||
|
|
||||||
FPlayer defender = FPlayers.getInstance().getByPlayer((Player) damagee);
|
FPlayer defender = FPlayers.getInstance().getByPlayer((Player) damagee);
|
||||||
|
|
||||||
if (defender == null || defender.getPlayer() == null) return true;
|
|
||||||
|
if (damager instanceof Player) {
|
||||||
|
FPlayer attacker = FPlayers.getInstance().getByPlayer((Player) damager);
|
||||||
|
if (defender == null || defender.getPlayer() == null) return true;
|
||||||
|
if (attacker.getFaction() == defender.getFaction()) {
|
||||||
|
if (attacker.hasFriendlyFire() && defender.hasFriendlyFire()) return true;
|
||||||
|
if (attacker.hasFriendlyFire() && !defender.hasFriendlyFire()) {
|
||||||
|
attacker.msg(TL.FRIENDLY_FIRE_OFF_ATTACKER, defender.getName());
|
||||||
|
return false;
|
||||||
|
} else if (!attacker.hasFriendlyFire() && defender.hasFriendlyFire()) {
|
||||||
|
attacker.msg(TL.FRIENDLY_FIRE_YOU_MUST);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Location defenderLoc = defender.getPlayer().getLocation();
|
Location defenderLoc = defender.getPlayer().getLocation();
|
||||||
Faction defLocFaction = Board.getInstance().getFactionAt(new FLocation(defenderLoc));
|
Faction defLocFaction = Board.getInstance().getFactionAt(new FLocation(defenderLoc));
|
||||||
|
|
||||||
|
|
||||||
// for damage caused by projectiles, getDamager() returns the projectile... what we need to know is the source
|
// for damage caused by projectiles, getDamager() returns the projectile... what we need to know is the source
|
||||||
if (damager instanceof Projectile) {
|
if (damager instanceof Projectile) {
|
||||||
Projectile projectile = (Projectile) damager;
|
Projectile projectile = (Projectile) damager;
|
||||||
|
|
||||||
if (!(projectile.getShooter() instanceof Entity)) return true;
|
if (!(projectile.getShooter() instanceof Entity)) return true;
|
||||||
damager = (Entity) projectile.getShooter();
|
damager = (Entity) projectile.getShooter();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (damager == damagee) return true; // ender pearl usage and other self-inflicted damage
|
if (damager == damagee) return true; // ender pearl usage and other self-inflicted damage
|
||||||
|
|
||||||
// Players can not take attack damage in a SafeZone, or possibly peaceful territory
|
// Players can not take attack damage in a SafeZone or peaceful territory depending on Conf options.
|
||||||
if (defLocFaction.noPvPInTerritory()) {
|
if (defLocFaction.noPvPInTerritory()) {
|
||||||
if (damager instanceof Player) {
|
if (damager instanceof Player) {
|
||||||
if (notify) {
|
if (notify) {
|
||||||
@@ -394,19 +387,14 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
if (!(damager instanceof Player)) return true;
|
if (!(damager instanceof Player)) return true;
|
||||||
|
|
||||||
|
|
||||||
FPlayer attacker = FPlayers.getInstance().getByPlayer((Player) damager);
|
FPlayer attacker = FPlayers.getInstance().getByPlayer((Player) damager);
|
||||||
|
|
||||||
if (attacker == null || attacker.getPlayer() == null) return true;
|
if (attacker == null || attacker.getPlayer() == null) return true;
|
||||||
|
|
||||||
|
|
||||||
if (Conf.playersWhoBypassAllProtection.contains(attacker.getName())) return true;
|
if (Conf.playersWhoBypassAllProtection.contains(attacker.getName())) return true;
|
||||||
|
|
||||||
|
|
||||||
if (attacker.hasLoginPvpDisabled()) {
|
if (attacker.hasLoginPvpDisabled()) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_LOGIN, Conf.noPVPDamageToOthersForXSecondsAfterLogin);
|
||||||
attacker.msg(TL.PLAYER_PVP_LOGIN, Conf.noPVPDamageToOthersForXSecondsAfterLogin);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,47 +402,32 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
// so we know from above that the defender isn't in a safezone... what about the attacker, sneaky dog that he might be?
|
// so we know from above that the defender isn't in a safezone... what about the attacker, sneaky dog that he might be?
|
||||||
if (locFaction.noPvPInTerritory()) {
|
if (locFaction.noPvPInTerritory()) {
|
||||||
if (notify) {
|
if (notify)
|
||||||
attacker.msg(TL.PLAYER_CANTHURT, (locFaction.isSafeZone() ? TL.REGION_SAFEZONE.toString() : TL.REGION_PEACEFUL.toString()));
|
attacker.msg(TL.PLAYER_CANTHURT, (locFaction.isSafeZone() ? TL.REGION_SAFEZONE.toString() : TL.REGION_PEACEFUL.toString()));
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (locFaction.isWarZone() && Conf.warZoneFriendlyFire) return true;
|
if (locFaction.isWarZone() && Conf.warZoneFriendlyFire) return true;
|
||||||
|
|
||||||
|
|
||||||
if (Conf.worldsIgnorePvP.contains(defenderLoc.getWorld().getName())) return true;
|
if (Conf.worldsIgnorePvP.contains(defenderLoc.getWorld().getName())) return true;
|
||||||
|
|
||||||
|
|
||||||
Faction defendFaction = defender.getFaction();
|
Faction defendFaction = defender.getFaction();
|
||||||
Faction attackFaction = attacker.getFaction();
|
Faction attackFaction = attacker.getFaction();
|
||||||
|
|
||||||
if (attackFaction.isWilderness() && Conf.disablePVPForFactionlessPlayers) {
|
if (attackFaction.isWilderness() && Conf.disablePVPForFactionlessPlayers) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_REQUIREFACTION);
|
||||||
attacker.msg(TL.PLAYER_PVP_REQUIREFACTION);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
} else if (defendFaction.isWilderness()) {
|
} else if (defendFaction.isWilderness()) {
|
||||||
if (defLocFaction == attackFaction && Conf.enablePVPAgainstFactionlessInAttackersLand) {
|
if (defLocFaction == attackFaction && Conf.enablePVPAgainstFactionlessInAttackersLand) {
|
||||||
// Allow PVP vs. Factionless in attacker's faction territory
|
// Allow PVP vs. Factionless in attacker's faction territory
|
||||||
return true;
|
return true;
|
||||||
} else if (Conf.disablePVPForFactionlessPlayers) {
|
} else if (Conf.disablePVPForFactionlessPlayers) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_FACTIONLESS);
|
||||||
attacker.msg(TL.PLAYER_PVP_FACTIONLESS);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defendFaction.isPeaceful()) {
|
if (defendFaction.isPeaceful() || attackFaction.isPeaceful()) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_PEACEFUL);
|
||||||
attacker.msg(TL.PLAYER_PVP_PEACEFUL);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} else if (attackFaction.isPeaceful()) {
|
|
||||||
if (notify) {
|
|
||||||
attacker.msg(TL.PLAYER_PVP_PEACEFUL);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,21 +435,16 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
// You can not hurt neutral factions
|
// You can not hurt neutral factions
|
||||||
if (Conf.disablePVPBetweenNeutralFactions && relation.isNeutral()) {
|
if (Conf.disablePVPBetweenNeutralFactions && relation.isNeutral()) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_NEUTRAL);
|
||||||
attacker.msg(TL.PLAYER_PVP_NEUTRAL);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Players without faction may be hurt anywhere
|
// Players without faction may be hurt anywhere
|
||||||
if (!defender.hasFaction()) return true;
|
if (!defender.hasFaction()) return true;
|
||||||
|
|
||||||
|
|
||||||
// You can never hurt faction members or allies
|
// You can never hurt faction members or allies
|
||||||
if (relation.isMember() || relation.isAlly() || relation.isTruce()) {
|
if (relation.isMember() || relation.isAlly()) {
|
||||||
if (notify) {
|
if (notify) attacker.msg(TL.PLAYER_PVP_CANTHURT, defender.describeTo(attacker));
|
||||||
attacker.msg(TL.PLAYER_PVP_CANTHURT, defender.describeTo(attacker));
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,23 +458,10 @@ public class FactionsEntityListener implements Listener {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Damage will be dealt. However check if the damage should be reduced.
|
|
||||||
/*
|
|
||||||
if (damage > 0.0 && ownTerritory && Conf.territoryShieldFactor > 0) {
|
|
||||||
double newDamage = Math.ceil(damage * (1D - Conf.territoryShieldFactor));
|
|
||||||
sub.setDamage(newDamage);
|
|
||||||
|
|
||||||
// Send message
|
|
||||||
if (notify) {
|
|
||||||
String perc = MessageFormat.format("{0,number,#%}", (Conf.territoryShieldFactor)); // TODO does this display correctly??
|
|
||||||
defender.msg("<i>Enemy damage reduced by <rose>%s<i>.", perc);
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
public void onCreatureSpawn(CreatureSpawnEvent event) {
|
||||||
if (event.getLocation() == null) return;
|
if (event.getLocation() == null) return;
|
||||||
@@ -557,14 +512,10 @@ public class FactionsEntityListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onHangerBreak(HangingBreakByEntityEvent e) {
|
public void onHangerBreak(HangingBreakByEntityEvent e) {
|
||||||
if (e.getRemover() == null) return;
|
|
||||||
if (!(e.getRemover() instanceof Player)) return;
|
if (!(e.getRemover() instanceof Player)) return;
|
||||||
Player p = (Player) e.getRemover();
|
Player p = (Player) e.getRemover();
|
||||||
if (e.getEntity().getType().equals(EntityType.PAINTING)) {
|
|
||||||
if (!FactionsBlockListener.playerCanBuildDestroyBlock(p, e.getEntity().getLocation(), "destroy", false)) {
|
if (e.getEntity().getType() == EntityType.PAINTING || e.getEntity().getType() == EntityType.ITEM_FRAME) {
|
||||||
e.setCancelled(true);
|
|
||||||
}
|
|
||||||
} else if (e.getEntity().getType().equals(EntityType.ITEM_FRAME)) {
|
|
||||||
if (!FactionsBlockListener.playerCanBuildDestroyBlock(p, e.getEntity().getLocation(), "destroy", false)) {
|
if (!FactionsBlockListener.playerCanBuildDestroyBlock(p, e.getEntity().getLocation(), "destroy", false)) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
@@ -572,48 +523,38 @@ public class FactionsEntityListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onPaintingPlace(HangingPlaceEvent event) {
|
public void onPaintingPlace(HangingPlaceEvent e) {
|
||||||
if (event.getEntity().getType().equals(EntityType.PAINTING)) {
|
if (e.getPlayer() == null) return;
|
||||||
if (!FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false)) {
|
|
||||||
event.setCancelled(true);
|
if (e.getEntity().getType() == EntityType.PAINTING || e.getEntity().getType() == EntityType.ITEM_FRAME) {
|
||||||
// Fix: update player's inventory to avoid items glitches
|
if (!FactionsBlockListener.playerCanBuildDestroyBlock(e.getPlayer(), e.getBlock().getLocation(), "build", false)) {
|
||||||
event.getPlayer().updateInventory();
|
e.setCancelled(true);
|
||||||
}
|
e.getPlayer().updateInventory();
|
||||||
} else if (event.getEntity().getType().equals(EntityType.ITEM_FRAME)) {
|
|
||||||
if (!FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), event.getEntity().getLocation(), "build", false)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
// Fix: update player's inventory to avoid items glitches
|
|
||||||
event.getPlayer().updateInventory();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
|
public void onEntityChangeBlock(EntityChangeBlockEvent e) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = e.getEntity();
|
||||||
|
Location loc = e.getBlock().getLocation();
|
||||||
|
|
||||||
// for now, only interested in Enderman and Wither boss tomfoolery
|
// for now, only interested in Enderman and Wither boss tomfoolery
|
||||||
if (!(entity instanceof Enderman) && !(entity instanceof Wither)) return;
|
if (entity.getType() == EntityType.ENDERMAN) {
|
||||||
|
if (stopEndermanBlockManipulation(loc)) e.setCancelled(true);
|
||||||
|
} else if (entity.getType() == EntityType.WITHER) {
|
||||||
Location loc = event.getBlock().getLocation();
|
|
||||||
|
|
||||||
if (entity instanceof Enderman) {
|
|
||||||
if (stopEndermanBlockManipulation(loc)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
} else if (entity instanceof Wither) {
|
|
||||||
Faction faction = Board.getInstance().getFactionAt(new FLocation(loc));
|
Faction faction = Board.getInstance().getFactionAt(new FLocation(loc));
|
||||||
// it's a bit crude just using fireball protection, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
|
// it's a bit crude just using fireball protection, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
|
||||||
if ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) ||
|
if ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) ||
|
||||||
(faction.isNormal() && (faction.hasPlayersOnline() ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) ||
|
(faction.isNormal() && (faction.hasPlayersOnline() ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) ||
|
||||||
(faction.isWarZone() && Conf.warZoneBlockFireballs) ||
|
(faction.isWarZone() && Conf.warZoneBlockFireballs) ||
|
||||||
faction.isSafeZone()) {
|
faction.isSafeZone()) {
|
||||||
event.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTravel(PlayerPortalEvent event) {
|
public void onTravel(PlayerPortalEvent event) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.massivecraft.factions.*;
|
|||||||
import com.massivecraft.factions.cmd.CmdFGlobal;
|
import com.massivecraft.factions.cmd.CmdFGlobal;
|
||||||
import com.massivecraft.factions.cmd.CmdFly;
|
import com.massivecraft.factions.cmd.CmdFly;
|
||||||
import com.massivecraft.factions.cmd.CmdSeeChunk;
|
import com.massivecraft.factions.cmd.CmdSeeChunk;
|
||||||
|
import com.massivecraft.factions.cmd.FCmdRoot;
|
||||||
import com.massivecraft.factions.cmd.audit.FLogType;
|
import com.massivecraft.factions.cmd.audit.FLogType;
|
||||||
import com.massivecraft.factions.cmd.logout.LogoutHandler;
|
import com.massivecraft.factions.cmd.logout.LogoutHandler;
|
||||||
import com.massivecraft.factions.cmd.wild.CmdWild;
|
import com.massivecraft.factions.cmd.wild.CmdWild;
|
||||||
@@ -19,12 +20,12 @@ import com.massivecraft.factions.struct.Permission;
|
|||||||
import com.massivecraft.factions.struct.Relation;
|
import com.massivecraft.factions.struct.Relation;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
import com.massivecraft.factions.util.CC;
|
import com.massivecraft.factions.util.CC;
|
||||||
import com.massivecraft.factions.util.wait.WaitExecutor;
|
|
||||||
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
|
||||||
import com.massivecraft.factions.util.VisualizeUtil;
|
import com.massivecraft.factions.util.VisualizeUtil;
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import com.massivecraft.factions.util.wait.WaitExecutor;
|
||||||
import com.massivecraft.factions.zcore.fperms.Access;
|
import com.massivecraft.factions.zcore.fperms.Access;
|
||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
|
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
||||||
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
|
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import com.massivecraft.factions.zcore.util.TagUtil;
|
import com.massivecraft.factions.zcore.util.TagUtil;
|
||||||
@@ -35,6 +36,8 @@ import net.dv8tion.jda.core.entities.Member;
|
|||||||
import net.dv8tion.jda.core.entities.TextChannel;
|
import net.dv8tion.jda.core.entities.TextChannel;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Boat;
|
||||||
|
import org.bukkit.entity.Minecart;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@@ -384,6 +387,10 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
case CHEST_MINECART:
|
case CHEST_MINECART:
|
||||||
|
|
||||||
case BARREL:
|
case BARREL:
|
||||||
|
case COMPOSTER:
|
||||||
|
case LOOM:
|
||||||
|
case CARTOGRAPHY_TABLE:
|
||||||
|
case GRINDSTONE:
|
||||||
|
|
||||||
case SHULKER_BOX:
|
case SHULKER_BOX:
|
||||||
case BLACK_SHULKER_BOX:
|
case BLACK_SHULKER_BOX:
|
||||||
@@ -452,7 +459,6 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
case CHIPPED_ANVIL:
|
case CHIPPED_ANVIL:
|
||||||
case DAMAGED_ANVIL:
|
case DAMAGED_ANVIL:
|
||||||
case BREWING_STAND:
|
case BREWING_STAND:
|
||||||
|
|
||||||
return PermissableAction.CONTAINER;
|
return PermissableAction.CONTAINER;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
@@ -569,19 +575,17 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
.replace("{leader}", faction.getFPlayerAdmin() + "");
|
.replace("{leader}", faction.getFPlayerAdmin() + "");
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
@Deprecated
|
||||||
public void checkCanFly(FPlayer me) {
|
public void checkCanFly(FPlayer me) {
|
||||||
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) return;
|
if (!FactionsPlugin.factionsFlight || !FactionsPlugin.instance.getConfig().getBoolean("ffly.AutoEnable"))
|
||||||
if (me.isFlying() && !me.isVanished() && (!me.canFlyAtLocation() || me.checkIfNearbyEnemies())) {
|
|
||||||
me.setFFlying(false, false);
|
|
||||||
me.msg(TL.COMMAND_FLY_NO_ACCESS, Board.getInstance().getFactionAt(me.getLastStoodAt()).getTag());
|
|
||||||
return;
|
return;
|
||||||
|
if (me.isFlying()) return;
|
||||||
|
if (me.getPlayer().hasPermission(Permission.FLY_FLY.node)) {
|
||||||
|
me.setFFlying(true, false);
|
||||||
|
CmdFly.flyMap.put(me.getName(), true);
|
||||||
|
if (CmdFly.particleTask == null)
|
||||||
|
CmdFly.startParticles();
|
||||||
}
|
}
|
||||||
if (me.isFlying() || !FactionsPlugin.instance.getConfig().getBoolean("ffly.AutoEnable")) return;
|
|
||||||
me.setFFlying(true, false);
|
|
||||||
CmdFly.flyMap.put(me.getName(), true);
|
|
||||||
if (CmdFly.particleTask == null)
|
|
||||||
CmdFly.startParticles();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//inspect
|
//inspect
|
||||||
@@ -656,33 +660,6 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
refreshPosition(player, lastLocations.get(player.getUniqueId()), player.getLocation());
|
refreshPosition(player, lastLocations.get(player.getUniqueId()), player.getLocation());
|
||||||
lastLocations.put(player.getUniqueId(), player.getLocation());
|
lastLocations.put(player.getUniqueId(), player.getLocation());
|
||||||
if (CmdFly.flyMap.containsKey(player.getName())) {
|
|
||||||
String name = player.getName();
|
|
||||||
if (!player.isFlying()
|
|
||||||
|| player.getGameMode() == GameMode.CREATIVE
|
|
||||||
|| !FactionsPlugin.instance.mc17 && player.getGameMode() == GameMode.SPECTATOR) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
|
||||||
Faction myFaction = fPlayer.getFaction();
|
|
||||||
if (myFaction.isWilderness()) {
|
|
||||||
Bukkit.getScheduler().runTask(FactionsPlugin.instance, () -> fPlayer.setFlying(false));
|
|
||||||
CmdFly.flyMap.remove(player.getName());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Bukkit.getScheduler().runTask(FactionsPlugin.instance, () -> {
|
|
||||||
if (!fPlayer.checkIfNearbyEnemies()) {
|
|
||||||
FLocation myFloc = new FLocation(player.getLocation());
|
|
||||||
if (Board.getInstance().getFactionAt(myFloc) != myFaction) {
|
|
||||||
if (!CmdFly.checkFly(fPlayer, player, Board.getInstance().getFactionAt(myFloc))) {
|
|
||||||
fPlayer.setFFlying(false, false);
|
|
||||||
CmdFly.flyMap.remove(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 5L, 10L);
|
}, 5L, 10L);
|
||||||
@@ -747,7 +724,13 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
}, 5);
|
}, 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.checkCanFly(me);
|
if (FCmdRoot.instance.fFlyEnabled && CmdFly.autoenable && CmdFly.checkFly(me, me.getPlayer(), factionTo)) {
|
||||||
|
me.setFFlying(true, false);
|
||||||
|
CmdFly.flyMap.put(me.getName(), true);
|
||||||
|
if (CmdFly.particleTask == null)
|
||||||
|
CmdFly.startParticles();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (me.getAutoClaimFor() != null) {
|
if (me.getAutoClaimFor() != null) {
|
||||||
me.attemptClaim(me.getAutoClaimFor(), newLocation, true);
|
me.attemptClaim(me.getAutoClaimFor(), newLocation, true);
|
||||||
@@ -863,15 +846,12 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onInventorySee(InventoryClickEvent e) {
|
public void onInventorySee(InventoryClickEvent e) {
|
||||||
if (e.getCurrentItem() == null)
|
if (e.getCurrentItem() == null) return;
|
||||||
return;
|
if (!e.getView().getTitle().endsWith("'s Inventory")) return;
|
||||||
|
|
||||||
if (!e.getView().getTitle().endsWith("'s Inventory"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerBoneMeal(PlayerInteractEvent event) {
|
public void onPlayerBoneMeal(PlayerInteractEvent event) {
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
@@ -991,7 +971,7 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
if (badGuy == null) return;
|
if (badGuy == null) return;
|
||||||
|
|
||||||
// if player was banned (not just kicked), get rid of their stored info
|
// if player was banned (not just kicked), get rid of their stored info
|
||||||
if (Conf.removePlayerDataWhenBanned && event.getReason().equals("Banned by admin.")) {
|
if (Conf.removePlayerDataWhenBanned && event.getReason().equals(Conf.removePlayerDataWhenBannedReason)) {
|
||||||
if (badGuy.getRole() == Role.LEADER) badGuy.getFaction().promoteNewLeader();
|
if (badGuy.getRole() == Role.LEADER) badGuy.getFaction().promoteNewLeader();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package com.massivecraft.factions.missions;
|
|||||||
|
|
||||||
import com.massivecraft.factions.FPlayer;
|
import com.massivecraft.factions.FPlayer;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import com.massivecraft.factions.zcore.frame.FactionGUI;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|||||||
@@ -31,7 +31,17 @@ public class FInfoSidebar extends FSidebarProvider {
|
|||||||
|
|
||||||
ListIterator<String> it = lines.listIterator();
|
ListIterator<String> it = lines.listIterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
it.set(replaceTags(faction, fplayer, it.next()));
|
String next = it.next();
|
||||||
|
if (next == null) {
|
||||||
|
it.remove();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String replaced = replaceTags(faction, fplayer, next);
|
||||||
|
if (replaced == null) {
|
||||||
|
it.remove();
|
||||||
|
} else {
|
||||||
|
it.set(replaced);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,8 @@ import com.massivecraft.factions.util.XMaterial;
|
|||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Item;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemFlag;
|
import org.bukkit.inventory.ItemFlag;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@@ -22,7 +20,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ShopGUIFrame {
|
public class ShopGUIFrame {
|
||||||
|
|||||||
@@ -54,8 +54,10 @@ public enum Permission {
|
|||||||
FLY_TRUCE("fly.truce"),
|
FLY_TRUCE("fly.truce"),
|
||||||
FLY_NEUTRAL("fly.neutral"),
|
FLY_NEUTRAL("fly.neutral"),
|
||||||
FOCUS("focus"),
|
FOCUS("focus"),
|
||||||
|
FRIENDLYFIRE("friendlyfire"),
|
||||||
GLOBALCHAT("globalchat"),
|
GLOBALCHAT("globalchat"),
|
||||||
GRACE("grace"),
|
GRACE("grace"),
|
||||||
|
GRACETOGGLE("gracetoggle"),
|
||||||
HELP("help"),
|
HELP("help"),
|
||||||
HOME("home"),
|
HOME("home"),
|
||||||
INVITE("invite"),
|
INVITE("invite"),
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public enum FancyTag implements Tag {
|
|||||||
* @author FactionsUUID Team
|
* @author FactionsUUID Team
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
NEUTRAL_LIST("{neutral-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.NEUTRAL)),
|
||||||
ALLIES_LIST("{allies-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.ALLY)),
|
ALLIES_LIST("{allies-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.ALLY)),
|
||||||
ENEMIES_LIST("{enemies-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.ENEMY)),
|
ENEMIES_LIST("{enemies-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.ENEMY)),
|
||||||
TRUCES_LIST("{truces-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.TRUCE)),
|
TRUCES_LIST("{truces-list}", (target, fme, prefix, gm) -> processRelation(prefix, target, fme, Relation.TRUCE)),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.massivecraft.factions.tag;
|
|||||||
|
|
||||||
import com.massivecraft.factions.FPlayers;
|
import com.massivecraft.factions.FPlayers;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import com.massivecraft.factions.util.timer.TimerManager;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ public enum GeneralTag implements Tag {
|
|||||||
/**
|
/**
|
||||||
* @author FactionsUUID Team
|
* @author FactionsUUID Team
|
||||||
*/
|
*/
|
||||||
|
GRACE_TIMER("{grace-time}", () -> String.valueOf(TimerManager.getRemaining(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining(), true))),
|
||||||
MAX_WARPS("{max-warps}", () -> String.valueOf(FactionsPlugin.getInstance().getConfig().getInt("max-warps", 5))),
|
MAX_WARPS("{max-warps}", () -> String.valueOf(FactionsPlugin.getInstance().getConfig().getInt("max-warps", 5))),
|
||||||
MAX_ALLIES("{max-allies}", () -> getRelation("ally")),
|
MAX_ALLIES("{max-allies}", () -> getRelation("ally")),
|
||||||
MAX_ENEMIES("{max-enemies}", () -> getRelation("enemy")),
|
MAX_ENEMIES("{max-enemies}", () -> getRelation("enemy")),
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.massivecraft.factions.tag;
|
package com.massivecraft.factions.tag;
|
||||||
|
|
||||||
import com.massivecraft.factions.FPlayer;
|
import com.massivecraft.factions.FPlayer;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
|
||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.apache.commons.lang.time.DurationFormatUtils;
|
import org.apache.commons.lang.time.DurationFormatUtils;
|
||||||
@@ -16,13 +15,6 @@ public enum PlayerTag implements Tag {
|
|||||||
/**
|
/**
|
||||||
* @author FactionsUUID Team
|
* @author FactionsUUID Team
|
||||||
*/
|
*/
|
||||||
GROUP("{group}", (fp) -> {
|
|
||||||
if (fp.isOnline()) {
|
|
||||||
return FactionsPlugin.getInstance().getPrimaryGroup(fp.getPlayer());
|
|
||||||
} else {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
LAST_SEEN("{lastSeen}", (fp) -> {
|
LAST_SEEN("{lastSeen}", (fp) -> {
|
||||||
String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX;
|
String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX;
|
||||||
return fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized);
|
return fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.massivecraft.factions.integration.Econ;
|
|||||||
import com.massivecraft.factions.struct.Relation;
|
import com.massivecraft.factions.struct.Relation;
|
||||||
import com.massivecraft.factions.tag.FactionTag;
|
import com.massivecraft.factions.tag.FactionTag;
|
||||||
import com.massivecraft.factions.tag.Tag;
|
import com.massivecraft.factions.tag.Tag;
|
||||||
|
import com.massivecraft.factions.util.timer.TimerManager;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
import me.clip.placeholderapi.expansion.Relational;
|
import me.clip.placeholderapi.expansion.Relational;
|
||||||
@@ -209,8 +210,12 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
|
|||||||
return String.valueOf(faction.getMaxVaults());
|
return String.valueOf(faction.getMaxVaults());
|
||||||
case "faction_relation_color":
|
case "faction_relation_color":
|
||||||
return fPlayer.getColorTo(faction).toString();
|
return fPlayer.getColorTo(faction).toString();
|
||||||
case "faction_grace":
|
case "grace_time":
|
||||||
return Conf.gracePeriod ? "Enabled" : "Disabled";
|
if(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining() >= 0) {
|
||||||
|
return String.valueOf(TimerManager.getRemaining(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining(), true));
|
||||||
|
} else {
|
||||||
|
return TL.GRACE_DISABLED_PLACEHOLDER.toString();
|
||||||
|
}
|
||||||
case "faction_name_at_location":
|
case "faction_name_at_location":
|
||||||
Faction factionAtLocation = Board.getInstance().getFactionAt(new FLocation(player.getLocation()));
|
Faction factionAtLocation = Board.getInstance().getFactionAt(new FLocation(player.getLocation()));
|
||||||
return factionAtLocation != null ? factionAtLocation.getTag() : Factions.getInstance().getWilderness().getTag();
|
return factionAtLocation != null ? factionAtLocation.getTag() : Factions.getInstance().getWilderness().getTag();
|
||||||
|
|||||||
82
src/main/java/com/massivecraft/factions/util/Config.java
Normal file
82
src/main/java/com/massivecraft/factions/util/Config.java
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
package com.massivecraft.factions.util;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public class Config extends YamlConfiguration {
|
||||||
|
private String fileName;
|
||||||
|
private FactionsPlugin plugin;
|
||||||
|
|
||||||
|
public Config(FactionsPlugin plugin, String fileName) {
|
||||||
|
this(plugin, fileName, ".yml");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Config(FactionsPlugin plugin, String fileName, String fileExtension) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.fileName = fileName + (fileName.endsWith(fileExtension) ? "" : fileExtension);
|
||||||
|
this.createFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileName() {
|
||||||
|
return this.fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FactionsPlugin getPlugin() {
|
||||||
|
return this.plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createFile() {
|
||||||
|
File folder = this.plugin.getDataFolder();
|
||||||
|
try {
|
||||||
|
File ex = new File(folder, this.fileName);
|
||||||
|
if (!ex.exists()) {
|
||||||
|
if (this.plugin.getResource(this.fileName) != null) {
|
||||||
|
this.plugin.saveResource(this.fileName, false);
|
||||||
|
} else {
|
||||||
|
this.save(ex);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.load(ex);
|
||||||
|
this.save(ex);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save() {
|
||||||
|
File folder = this.plugin.getDataFolder();
|
||||||
|
try {
|
||||||
|
this.save(new File(folder, this.fileName));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(o instanceof Config)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Config config = (Config) o;
|
||||||
|
if (this.fileName != null) {
|
||||||
|
if (this.fileName.equals(config.fileName)) {
|
||||||
|
return Objects.equals(this.plugin, config.plugin);
|
||||||
|
}
|
||||||
|
} else if (config.fileName == null) {
|
||||||
|
return Objects.equals(this.plugin, config.plugin);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
27
src/main/java/com/massivecraft/factions/util/Cooldown.java
Normal file
27
src/main/java/com/massivecraft/factions/util/Cooldown.java
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package com.massivecraft.factions.util;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/6/2020
|
||||||
|
*/
|
||||||
|
public class Cooldown {
|
||||||
|
|
||||||
|
public static void setCooldown(Player player, String name, int seconds) {
|
||||||
|
player.setMetadata(name, new FixedMetadataValue(FactionsPlugin.getInstance(), System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(seconds)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isOnCooldown(Player player, String name) {
|
||||||
|
if (!player.hasMetadata(name) || player.getMetadata(name).size() <= 0) return false;
|
||||||
|
long time = player.getMetadata(name).get(0).asLong();
|
||||||
|
return (time > System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -85,6 +85,7 @@ public class MiscUtil {
|
|||||||
for (char c : str.toCharArray()) {
|
for (char c : str.toCharArray()) {
|
||||||
if (!substanceChars.contains(String.valueOf(c))) {
|
if (!substanceChars.contains(String.valueOf(c))) {
|
||||||
errors.add(FactionsPlugin.getInstance().txt.parse(TL.GENERIC_FACTIONTAG_ALPHANUMERIC.toString(), c));
|
errors.add(FactionsPlugin.getInstance().txt.parse(TL.GENERIC_FACTIONTAG_ALPHANUMERIC.toString(), c));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ package com.massivecraft.factions.util;
|
|||||||
* All rights reserved 2020.
|
* All rights reserved 2020.
|
||||||
* Creation Date: 4/4/2020
|
* Creation Date: 4/4/2020
|
||||||
*/
|
*/
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ package com.massivecraft.factions.util;
|
|||||||
* All rights reserved 2020.
|
* All rights reserved 2020.
|
||||||
* Creation Date: 4/4/2020
|
* Creation Date: 4/4/2020
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public class UtilFly {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static void run() {
|
public static void run() {
|
||||||
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))
|
if (!FactionsPlugin.factionsFlight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.getInstance(), () -> {
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.getInstance(), () -> {
|
||||||
@@ -28,7 +28,7 @@ public class UtilFly {
|
|||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static void setFly(FPlayer fp, boolean fly, boolean silent, boolean damage) {
|
public static void setFly(FPlayer fp, boolean fly, boolean silent, boolean damage) {
|
||||||
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))
|
if (!FactionsPlugin.factionsFlight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fp.getPlayer().setAllowFlight(fly);
|
fp.getPlayer().setAllowFlight(fly);
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.massivecraft.factions.util.timer;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import org.apache.commons.lang.time.FastDateFormat;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public final class DateTimeFormats {
|
||||||
|
public static final TimeZone SERVER_TIME_ZONE = TimeZone.getTimeZone(Conf.serverTimeZone);
|
||||||
|
public static final ZoneId SERVER_ZONE_ID = SERVER_TIME_ZONE.toZoneId();
|
||||||
|
public static final FastDateFormat DAY_MTH_HR_MIN_SECS = FastDateFormat.getInstance("dd/MM HH:mm:ss", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat DAY_MTH_YR_HR_MIN_AMPM = FastDateFormat.getInstance("dd/MM/yy hh:mma", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat DAY_MTH_HR_MIN_AMPM = FastDateFormat.getInstance("dd/MM hh:mma", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat HR_MIN_AMPM = FastDateFormat.getInstance("hh:mma", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat HR_MIN_AMPM_TIMEZONE = FastDateFormat.getInstance("hh:mma z", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat HR_MIN = FastDateFormat.getInstance("hh:mm", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final FastDateFormat MIN_SECS = FastDateFormat.getInstance("mm:ss", SERVER_TIME_ZONE, Locale.ENGLISH);
|
||||||
|
public static final ThreadLocal<DecimalFormat> SECONDS = ThreadLocal.withInitial(() -> new DecimalFormat("0"));
|
||||||
|
public static final ThreadLocal<DecimalFormat> REMAINING_SECONDS = ThreadLocal.withInitial(() -> new DecimalFormat("0.#"));
|
||||||
|
public static final ThreadLocal<DecimalFormat> REMAINING_SECONDS_TRAILING = ThreadLocal.withInitial(() -> new DecimalFormat("0.0"));
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package com.massivecraft.factions.util.timer;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.util.Config;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public abstract class GlobalTimer extends Timer {
|
||||||
|
private TimerRunnable runnable;
|
||||||
|
|
||||||
|
|
||||||
|
public GlobalTimer(String name, long defaultCooldown) {
|
||||||
|
super(name, defaultCooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean clearCooldown() {
|
||||||
|
if (this.runnable != null) {
|
||||||
|
this.runnable.cancel();
|
||||||
|
this.runnable = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isPaused() {
|
||||||
|
return (this.runnable != null) && (this.runnable.isPaused());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPaused(boolean paused) {
|
||||||
|
if ((this.runnable != null) && (this.runnable.isPaused() != paused)) {
|
||||||
|
this.runnable.setPaused(paused);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getRemaining() {
|
||||||
|
return this.runnable == null ? 0L : this.runnable.getRemaining();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getRemaining(long now) {
|
||||||
|
return this.runnable == null ? 0L : this.runnable.getRemaining(now);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean setRemaining() {
|
||||||
|
return setRemaining(this.defaultCooldown, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean setRemaining(long duration, boolean overwrite) {
|
||||||
|
boolean hadCooldown = false;
|
||||||
|
if (this.runnable != null) {
|
||||||
|
if (!overwrite) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
hadCooldown = this.runnable.getRemaining() > 0L;
|
||||||
|
this.runnable.setRemaining(duration);
|
||||||
|
} else {
|
||||||
|
this.runnable = new TimerRunnable(this, duration);
|
||||||
|
}
|
||||||
|
return !hadCooldown;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.massivecraft.factions.util.timer;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.util.Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public abstract class Timer {
|
||||||
|
protected final String name;
|
||||||
|
public final long defaultCooldown;
|
||||||
|
|
||||||
|
|
||||||
|
public Timer(String name, long defaultCooldown) {
|
||||||
|
this.name = name;
|
||||||
|
this.defaultCooldown = defaultCooldown;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load(Config config) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void save(Config config) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package com.massivecraft.factions.util.timer;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import com.massivecraft.factions.util.Config;
|
||||||
|
import com.massivecraft.factions.util.timer.type.GraceTimer;
|
||||||
|
import org.apache.commons.lang.time.DurationFormatUtils;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public class TimerManager implements Listener, Runnable {
|
||||||
|
private final Set<Timer> timers;
|
||||||
|
private final FactionsPlugin plugin;
|
||||||
|
private final List<TimerRunnable> timerRunnableList = new ArrayList<>();
|
||||||
|
private Config config;
|
||||||
|
public GraceTimer graceTimer;
|
||||||
|
private static final long MINUTE = TimeUnit.MINUTES.toMillis(1L);
|
||||||
|
private static final long HOUR = TimeUnit.HOURS.toMillis(1L);
|
||||||
|
private static final long MULTI_HOUR = TimeUnit.HOURS.toMillis(10);
|
||||||
|
|
||||||
|
public static String getRemaining(long millis, boolean milliseconds) {
|
||||||
|
return getRemaining(millis, milliseconds, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getRemaining(long duration, boolean milliseconds, boolean trail) {
|
||||||
|
if ((milliseconds) && (duration < MINUTE)) {
|
||||||
|
return ( (trail ? DateTimeFormats.REMAINING_SECONDS_TRAILING : DateTimeFormats.REMAINING_SECONDS).get()).format(duration * 0.001D) + 's';
|
||||||
|
}
|
||||||
|
return DurationFormatUtils.formatDuration(duration, (duration >= HOUR ? (duration >= MULTI_HOUR ? "d" : "") + "d:" : "") + "HH:mm:ss");
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimerManager(FactionsPlugin plugin) {
|
||||||
|
this.timers = new HashSet<>();
|
||||||
|
this.plugin = plugin;
|
||||||
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
|
if(Conf.useGraceSystem) {
|
||||||
|
this.registerTimer(this.graceTimer = new GraceTimer());
|
||||||
|
}
|
||||||
|
plugin.getServer().getScheduler().runTaskTimer(plugin, this, 4, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<Timer> getTimers() {
|
||||||
|
return this.timers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerTimer(Timer timer) {
|
||||||
|
this.timers.add(timer);
|
||||||
|
if (timer instanceof Listener) {
|
||||||
|
this.plugin.getServer().getPluginManager().registerEvents((Listener) timer, this.plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterTimer(Timer timer) {
|
||||||
|
this.timers.remove(timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadTimerData() {
|
||||||
|
this.config = new Config(this.plugin, "timers");
|
||||||
|
for (Timer timer : this.timers) {
|
||||||
|
timer.load(this.config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveTimerData() {
|
||||||
|
for (Timer timer : this.timers) {
|
||||||
|
timer.save(this.config);
|
||||||
|
}
|
||||||
|
this.config.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
timerRunnableList.removeIf(next -> next.check(now));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TimerRunnable> getTimerRunnableList() {
|
||||||
|
return timerRunnableList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
package com.massivecraft.factions.util.timer;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TimerRunnable {
|
||||||
|
private final Timer timer;
|
||||||
|
private long expiryMillis;
|
||||||
|
private long pauseMillis;
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
|
||||||
|
public TimerRunnable(Timer timer, long duration) {
|
||||||
|
this.timer = timer;
|
||||||
|
setRemaining(duration);
|
||||||
|
FactionsPlugin plugin = FactionsPlugin.getInstance();
|
||||||
|
plugin.getTimerManager().getTimerRunnableList().add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public TimerRunnable(UUID playerUUID, Timer timer, long duration) {
|
||||||
|
this.timer = timer;
|
||||||
|
setRemaining(duration);
|
||||||
|
FactionsPlugin plugin = FactionsPlugin.getInstance();
|
||||||
|
plugin.getTimerManager().getTimerRunnableList().add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timer getTimer() {
|
||||||
|
return this.timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getRemaining() {
|
||||||
|
return getRemaining(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getRemaining(long now) {
|
||||||
|
return getRemaining(false, now);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setRemaining(long remaining) {
|
||||||
|
setExpiryMillis(remaining);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getRemaining(boolean ignorePaused) {
|
||||||
|
if ((!ignorePaused) && (this.pauseMillis != 0L)) return this.pauseMillis;
|
||||||
|
return this.expiryMillis - System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getRemaining(boolean ignorePaused, long now) {
|
||||||
|
if ((!ignorePaused) && (this.pauseMillis != 0L)) return this.pauseMillis;
|
||||||
|
return this.expiryMillis - now;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getExpiryMillis() {
|
||||||
|
return this.expiryMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setExpiryMillis(long remainingMillis) {
|
||||||
|
long expiryMillis = System.currentTimeMillis() + remainingMillis;
|
||||||
|
if (expiryMillis == this.expiryMillis) return;
|
||||||
|
this.expiryMillis = expiryMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean check(long now) {
|
||||||
|
if (cancelled) return true;
|
||||||
|
return getRemaining(false, now) <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getPauseMillis() {
|
||||||
|
return this.pauseMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPauseMillis(long pauseMillis) {
|
||||||
|
this.pauseMillis = pauseMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isPaused() {
|
||||||
|
return this.pauseMillis != 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPaused(boolean paused) {
|
||||||
|
if (paused == isPaused()) return;
|
||||||
|
|
||||||
|
if (paused) {
|
||||||
|
this.pauseMillis = getRemaining(true);
|
||||||
|
cancel();
|
||||||
|
} else {
|
||||||
|
setExpiryMillis(this.pauseMillis);
|
||||||
|
this.pauseMillis = 0L;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void cancel() {
|
||||||
|
cancelled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package com.massivecraft.factions.util.timer.type;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.FPlayers;
|
||||||
|
import com.massivecraft.factions.util.Config;
|
||||||
|
import com.massivecraft.factions.util.timer.GlobalTimer;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 4/7/2020
|
||||||
|
*/
|
||||||
|
public class GraceTimer extends GlobalTimer implements Listener {
|
||||||
|
|
||||||
|
public GraceTimer() {
|
||||||
|
super("GRACE", TimeUnit.DAYS.toMillis(Conf.gracePeriodTimeDays));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBreak(EntityExplodeEvent e) {
|
||||||
|
if(getRemaining() > 0)
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onTNTPlace(BlockPlaceEvent event) {
|
||||||
|
FPlayer fp = FPlayers.getInstance().getByPlayer(event.getPlayer());
|
||||||
|
if(getRemaining() > 0) {
|
||||||
|
if (!fp.isAdminBypassing()) {
|
||||||
|
if (event.getBlock().getType().equals(Material.TNT)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load(Config config) {
|
||||||
|
setPaused(config.getBoolean(this.name + ".paused"));
|
||||||
|
setRemaining(config.getLong(this.name + ".time"), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(Config config) {
|
||||||
|
config.set(this.name + ".paused", isPaused());
|
||||||
|
config.set(this.name + ".time", getRemaining());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,13 +8,11 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factions - Developed by Driftay.
|
* @author DroppingAnvil
|
||||||
* All rights reserved 2020.
|
|
||||||
* Creation Date: 4/4/2020
|
|
||||||
*/
|
*/
|
||||||
public class WaitExecutor {
|
public class WaitExecutor {
|
||||||
private static boolean enabled = false;
|
|
||||||
public static ConcurrentHashMap<Player, WaitTask> taskMap = new ConcurrentHashMap<>();
|
public static ConcurrentHashMap<Player, WaitTask> taskMap = new ConcurrentHashMap<>();
|
||||||
|
private static boolean enabled = false;
|
||||||
|
|
||||||
public static void startTask() {
|
public static void startTask() {
|
||||||
if (enabled) return;
|
if (enabled) return;
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ public class WaitTask {
|
|||||||
return wait;
|
return wait;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setWait(Integer i) {
|
||||||
|
wait = i;
|
||||||
|
}
|
||||||
|
|
||||||
public TL getMessage() {
|
public TL getMessage() {
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
@@ -33,10 +37,6 @@ public class WaitTask {
|
|||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWait(Integer i) {
|
|
||||||
wait = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void success() {
|
public void success() {
|
||||||
origin.handleSuccess(player);
|
origin.handleSuccess(player);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ public abstract class MPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
try {
|
|
||||||
if (saveTask != null) {
|
if (saveTask != null) {
|
||||||
this.getServer().getScheduler().cancelTask(saveTask);
|
this.getServer().getScheduler().cancelTask(saveTask);
|
||||||
saveTask = null;
|
saveTask = null;
|
||||||
@@ -190,8 +189,6 @@ public abstract class MPlugin extends JavaPlugin {
|
|||||||
Board.getInstance().forceSave();
|
Board.getInstance().forceSave();
|
||||||
}
|
}
|
||||||
log("Disabled");
|
log("Disabled");
|
||||||
} catch (IllegalPluginAccessException e) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class FDisbandFrame {
|
|||||||
private Gui gui;
|
private Gui gui;
|
||||||
|
|
||||||
public FDisbandFrame(Faction faction) {
|
public FDisbandFrame(Faction faction) {
|
||||||
this.gui = new Gui(FactionsPlugin.getInstance(), 1, "Confirm Disband");
|
this.gui = new Gui(FactionsPlugin.getInstance(), 1, ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(FactionsPlugin.getInstance().getConfig().getString("f-disband-gui.title"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void buildGUI(FPlayer fPlayer) {
|
public void buildGUI(FPlayer fPlayer) {
|
||||||
|
|||||||
@@ -28,42 +28,35 @@ public class FUpgradeFrame {
|
|||||||
public FUpgradeFrame(Faction f) {
|
public FUpgradeFrame(Faction f) {
|
||||||
this.gui = new Gui(FactionsPlugin.getInstance(),
|
this.gui = new Gui(FactionsPlugin.getInstance(),
|
||||||
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5),
|
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5),
|
||||||
ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(FactionsPlugin.getInstance().getConfig()
|
ChatColor.translateAlternateColorCodes('&', FactionsPlugin.getInstance().getConfig()
|
||||||
.getString("fupgrades.MainMenu.Title")).replace("{faction}", f.getTag())));
|
.getString("fupgrades.MainMenu.Title").replace("{faction}", f.getTag())));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void buildGUI(FPlayer fplayer) {
|
public void buildGUI(FPlayer fplayer) {
|
||||||
PaginatedPane pane = new PaginatedPane(0, 0, 9, this.gui.getRows());
|
PaginatedPane pane = new PaginatedPane(0, 0, 9, this.gui.getRows());
|
||||||
List<GuiItem> GUIItems = new ArrayList<>();
|
List<GuiItem> GUIItems = new ArrayList<>();
|
||||||
ItemStack dummy = buildDummyItem();
|
ItemStack dummy = buildDummyItem();
|
||||||
for (int x = 0; x <= this.gui.getRows() * 9 - 1; ++x)
|
for (int x = 0; x <= this.gui.getRows() * 9 - 1; ++x) GUIItems.add(new GuiItem(dummy, e -> e.setCancelled(true)));
|
||||||
GUIItems.add(new GuiItem(dummy, (e) -> e.setCancelled(true)));
|
|
||||||
|
|
||||||
for (UpgradeType value : UpgradeType.values()) {
|
for (UpgradeType value : UpgradeType.values()) {
|
||||||
if (value.getSlot() != -1) {
|
if (value.getSlot() != -1) {
|
||||||
GUIItems.set(value.getSlot(), new GuiItem(value.buildAsset(fplayer.getFaction()), (e) -> {
|
GUIItems.set(value.getSlot(), new GuiItem(value.buildAsset(fplayer.getFaction()), e -> {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getWhoClicked());
|
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getWhoClicked());
|
||||||
if (fme.getFaction().getUpgrade(value) != value.getMaxLevel()) {
|
if (fme.getFaction().getUpgrade(value) == value.getMaxLevel()) return;
|
||||||
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu." + value.toString() + ".Cost.level-" + (fme.getFaction().getUpgrade(value) + 1));
|
int cost = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu." + value.toString() + ".Cost.level-" + (fme.getFaction().getUpgrade(value) + 1));
|
||||||
if (fme.hasMoney(cost)) {
|
if (fme.hasMoney(cost)) {
|
||||||
fme.takeMoney(cost);
|
fme.takeMoney(cost);
|
||||||
if (value == UpgradeType.CHEST)
|
if (value == UpgradeType.CHEST) updateChests(fme.getFaction());
|
||||||
updateChests(fme.getFaction());
|
|
||||||
|
|
||||||
if (value == UpgradeType.POWER)
|
if (value == UpgradeType.POWER) updateFactionPowerBoost(fme.getFaction());
|
||||||
updateFactionPowerBoost(fme.getFaction());
|
|
||||||
|
|
||||||
if (value == UpgradeType.TNT)
|
if (value == UpgradeType.TNT) updateTNT(fme.getFaction());
|
||||||
updateTNT(fme.getFaction());
|
|
||||||
|
|
||||||
if (value == UpgradeType.WARP)
|
if (value == UpgradeType.WARP) updateWarps(fme.getFaction());
|
||||||
updateWarps(fme.getFaction());
|
|
||||||
|
|
||||||
fme.getFaction().setUpgrade(value, fme.getFaction().getUpgrade(value) + 1);
|
fme.getFaction().setUpgrade(value, fme.getFaction().getUpgrade(value) + 1);
|
||||||
this.buildGUI(fme);
|
buildGUI(fme);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ public enum UpgradeType {
|
|||||||
* @author Illyria Team
|
* @author Illyria Team
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CHEST("Chest", 3),
|
CHEST("Chest", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Chest.Max-Level")),
|
||||||
SPAWNER("Spawners", 3),
|
SPAWNER("Spawners", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Spawners.Max-Level")),
|
||||||
EXP("EXP", 3),
|
EXP("EXP", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.EXP.Max-Level")),
|
||||||
CROP("Crops", 3),
|
CROP("Crops", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Max-Level")),
|
||||||
POWER("Power", 3),
|
POWER("Power", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Power.Max-Level")),
|
||||||
REDSTONE("Redstone", 1),
|
REDSTONE("Redstone", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Redstone.Max-Level")),
|
||||||
MEMBERS("Members", 3),
|
MEMBERS("Members", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.Max-Level")),
|
||||||
TNT("TNT", 3),
|
TNT("TNT", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.TNT.Max-Level")),
|
||||||
WARP("Warps", 3),
|
WARP("Warps", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Warps.Max-Level")),
|
||||||
DAMAGEINCREASE("DamageIncrease", 3),
|
DAMAGEINCREASE("DamageIncrease", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageIncrease.Max-Level")),
|
||||||
DAMAGEDECREASE("DamageReduct", 3),
|
DAMAGEDECREASE("DamageReduct", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.DamageReduct.Max-Level")),
|
||||||
REINFORCEDARMOR("Armor", 3);
|
REINFORCEDARMOR("Armor", FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Armor.Max-Level"));
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private int maxLevel;
|
private int maxLevel;
|
||||||
@@ -86,7 +86,6 @@ public enum UpgradeType {
|
|||||||
private ItemStack updateLevelStatus(ItemStack item, int level) {
|
private ItemStack updateLevelStatus(ItemStack item, int level) {
|
||||||
if (level >= 1) {
|
if (level >= 1) {
|
||||||
item.setAmount(level);
|
item.setAmount(level);
|
||||||
enchant(item);
|
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ public class FactionWarpsFrame {
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for (int x = 0; x <= gui.getRows() * 9 - 1; ++x)
|
for (int x = 0; x <= gui.getRows() * 9 - 1; ++x)
|
||||||
GUIItems.add(new GuiItem(buildDummyItem(), e -> e.setCancelled(true)));
|
GUIItems.add(new GuiItem(buildDummyItem(), e -> e.setCancelled(true)));
|
||||||
slots.forEach(slot -> GUIItems.set(slot, new GuiItem(XMaterial.AIR.parseItem())));
|
//We comment this out for now so it does not interfere with item placement when no warps are set
|
||||||
|
//slots.forEach(slot -> GUIItems.set(slot, new GuiItem(XMaterial.AIR.parseItem())));
|
||||||
for (final Map.Entry<String, LazyLocation> warp : fplayer.getFaction().getWarps().entrySet()) {
|
for (final Map.Entry<String, LazyLocation> warp : fplayer.getFaction().getWarps().entrySet()) {
|
||||||
if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()) {
|
if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()) {
|
||||||
slots.add(slots.get(slots.size() - 1) + 1);
|
slots.add(slots.get(slots.size() - 1) + 1);
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
protected boolean titlesEnabled = true;
|
protected boolean titlesEnabled = true;
|
||||||
protected boolean isAlt = false;
|
protected boolean isAlt = false;
|
||||||
boolean inspectMode = false;
|
boolean inspectMode = false;
|
||||||
|
boolean friendlyFire = false;
|
||||||
|
|
||||||
public MemoryFPlayer() {
|
public MemoryFPlayer() {
|
||||||
}
|
}
|
||||||
@@ -727,12 +728,13 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
|
|
||||||
public void sendFactionHereMessage(Faction from) {
|
public void sendFactionHereMessage(Faction from) {
|
||||||
Faction toShow = Board.getInstance().getFactionAt(getLastStoodAt());
|
Faction toShow = Board.getInstance().getFactionAt(getLastStoodAt());
|
||||||
boolean showChat = true;
|
|
||||||
|
if(Conf.worldsNoClaiming.contains(getLastStoodAt().getWorldName())) return;
|
||||||
|
|
||||||
if (showInfoBoard(toShow)) {
|
if (showInfoBoard(toShow)) {
|
||||||
FScoreboard.get(this).setTemporarySidebar(new FInfoSidebar(toShow));
|
FScoreboard.get(this).setTemporarySidebar(new FInfoSidebar(toShow));
|
||||||
showChat = FactionsPlugin.getInstance().getConfig().getBoolean("scoreboard.also-send-chat", true);
|
|
||||||
}
|
}
|
||||||
if (showChat)
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("scoreboard.also-send-chat", true))
|
||||||
this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this))));
|
this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -817,7 +819,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty()) {
|
if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty()) {
|
||||||
// Remove this faction
|
// Remove this faction
|
||||||
|
|
||||||
if(FactionsPlugin.getInstance().getConfig().getBoolean("faction-disband-broadcast")) {
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("faction-disband-broadcast")) {
|
||||||
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers())
|
for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers())
|
||||||
fplayer.msg(TL.LEAVE_DISBANDED, myFaction.describeTo(fplayer, true));
|
fplayer.msg(TL.LEAVE_DISBANDED, myFaction.describeTo(fplayer, true));
|
||||||
}
|
}
|
||||||
@@ -841,80 +843,79 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canClaimForFactionAtLocation(Faction forFaction, FLocation flocation, boolean notifyFailure) {
|
public boolean canClaimForFactionAtLocation(Faction forFaction, FLocation flocation, boolean notifyFailure) {
|
||||||
|
FactionsPlugin plugin = FactionsPlugin.getInstance();
|
||||||
String error = null;
|
String error = null;
|
||||||
Faction myFaction = getFaction();
|
Faction myFaction = getFaction();
|
||||||
Faction currentFaction = Board.getInstance().getFactionAt(flocation);
|
Faction currentFaction = Board.getInstance().getFactionAt(flocation);
|
||||||
int ownedLand = forFaction.getLandRounded();
|
int ownedLand = forFaction.getLandRounded();
|
||||||
int factionBuffer = FactionsPlugin.getInstance().getConfig().getInt("hcf.buffer-zone", 0);
|
int factionBuffer = plugin.getConfig().getInt("hcf.buffer-zone", 0);
|
||||||
int worldBuffer = FactionsPlugin.getInstance().getConfig().getInt("world-border.buffer", 0);
|
int worldBuffer = plugin.getConfig().getInt("world-border.buffer", 0) - 1;
|
||||||
|
|
||||||
if (Conf.worldGuardChecking && Worldguard.getInstance().checkForRegionsInChunk(flocation) && !this.isAdminBypassing()) {
|
if (Conf.worldGuardChecking && Worldguard.getInstance().checkForRegionsInChunk(flocation)) {
|
||||||
// Checks for WorldGuard regions in the chunk attempting to be claimed
|
// Checks for WorldGuard regions in the chunk attempting to be claimed
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_PROTECTED.toString());
|
error = plugin.txt.parse(TL.CLAIM_PROTECTED.toString());
|
||||||
} else if (flocation.isOutsideWorldBorder(FactionsPlugin.getInstance().getConfig().getInt("world-border.buffer", 0))) {
|
} else if (flocation.isOutsideWorldBorder(plugin.getConfig().getInt("world-border.buffer", 0) - 1)) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString());
|
error = plugin.txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString());
|
||||||
} else if (Conf.useWorldConfigurationsAsWhitelist != Conf.worldsNoClaiming.contains(flocation.getWorldName())) {
|
} else if (Conf.worldsNoClaiming.contains(flocation.getWorldName())) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_DISABLED.toString());
|
error = plugin.txt.parse(TL.CLAIM_DISABLED.toString());
|
||||||
} else if (this.isAdminBypassing()) {
|
} else if (this.isAdminBypassing()) {
|
||||||
return true;
|
return true;
|
||||||
} else if (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer())) {
|
} else if (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer())) {
|
||||||
return true;
|
return true;
|
||||||
} else if (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer())) {
|
} else if (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer())) {
|
||||||
return true;
|
return true;
|
||||||
} else if (currentFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
|
} else if (currentFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW && forFaction != currentFaction ) {
|
||||||
return true;
|
|
||||||
} else if (currentFaction.isWilderness() && forFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
|
|
||||||
return true;
|
return true;
|
||||||
} else if (myFaction != forFaction) {
|
} else if (myFaction != forFaction) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this));
|
error = plugin.txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this));
|
||||||
} else if (forFaction == currentFaction) {
|
} else if (forFaction == currentFaction) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_ALREADYOWN.toString(), forFaction.describeTo(this, true));
|
error = plugin.txt.parse(TL.CLAIM_ALREADYOWN.toString(), forFaction.describeTo(this, true));
|
||||||
} else if (forFaction.getAccess(this, PermissableAction.TERRITORY) != Access.ALLOW) {
|
|
||||||
error = TL.COMMAND_CLAIM_DENIED.toString();
|
|
||||||
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
|
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers);
|
error = plugin.txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers);
|
||||||
} else if (currentFaction.isSafeZone()) {
|
} else if (currentFaction.isSafeZone()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_SAFEZONE.toString());
|
error = plugin.txt.parse(TL.CLAIM_SAFEZONE.toString());
|
||||||
} else if (currentFaction.isWarZone()) {
|
} else if (currentFaction.isWarZone()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_WARZONE.toString());
|
error = plugin.txt.parse(TL.CLAIM_WARZONE.toString());
|
||||||
} else if (FactionsPlugin.getInstance().getConfig().getBoolean("hcf.allow-overclaim", true) && ownedLand >= forFaction.getPowerRounded()) {
|
} else if (plugin.getConfig().getBoolean("hcf.allow-overclaim", true) && ownedLand >= forFaction.getPowerRounded()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_POWER.toString());
|
error = plugin.txt.parse(TL.CLAIM_POWER.toString());
|
||||||
} else if (Conf.claimedLandsMax != 0 && ownedLand >= Conf.claimedLandsMax && forFaction.isNormal()) {
|
} else if (Conf.claimedLandsMax != 0 && ownedLand >= Conf.claimedLandsMax && forFaction.isNormal()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_LIMIT.toString());
|
error = plugin.txt.parse(TL.CLAIM_LIMIT.toString());
|
||||||
} else if (currentFaction.getRelationTo(forFaction) == Relation.ALLY) {
|
} else if (currentFaction.getRelationTo(forFaction) == Relation.ALLY) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_ALLY.toString());
|
error = plugin.txt.parse(TL.CLAIM_ALLY.toString());
|
||||||
} else if (Conf.claimsMustBeConnected && !this.isAdminBypassing() && myFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0 && !Board.getInstance().isConnectedLocation(flocation, myFaction) && (!Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())) {
|
} else if (Conf.claimsMustBeConnected && !this.isAdminBypassing() && myFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0 && !Board.getInstance().isConnectedLocation(flocation, myFaction) && (!Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())) {
|
||||||
if (Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction) {
|
if (Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_CONTIGIOUS.toString());
|
error = plugin.txt.parse(TL.CLAIM_CONTIGIOUS.toString());
|
||||||
} else {
|
} else {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_FACTIONCONTIGUOUS.toString());
|
error = plugin.txt.parse(TL.CLAIM_FACTIONCONTIGUOUS.toString());
|
||||||
}
|
}
|
||||||
} else if (factionBuffer > 0 && Board.getInstance().hasFactionWithin(flocation, myFaction, factionBuffer)) {
|
} else if (factionBuffer > 0 && Board.getInstance().hasFactionWithin(flocation, myFaction, factionBuffer)) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_TOOCLOSETOOTHERFACTION.format(factionBuffer));
|
error = plugin.txt.parse(TL.CLAIM_TOOCLOSETOOTHERFACTION.format(factionBuffer));
|
||||||
} else if (flocation.isOutsideWorldBorder(worldBuffer)) {
|
} else if (flocation.isOutsideWorldBorder(worldBuffer)) {
|
||||||
if (worldBuffer > 0) {
|
if (worldBuffer > 0) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_OUTSIDEBORDERBUFFER.format(worldBuffer));
|
error = plugin.txt.parse(TL.CLAIM_OUTSIDEBORDERBUFFER.format(worldBuffer));
|
||||||
} else {
|
} else {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString());
|
error = plugin.txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString());
|
||||||
}
|
}
|
||||||
} else if (currentFaction.isNormal()) {
|
} else if (currentFaction.isNormal()) {
|
||||||
if (myFaction.isPeaceful()) {
|
if (myFaction.isPeaceful()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_PEACEFUL.toString(), currentFaction.getTag(this));
|
error = plugin.txt.parse(TL.CLAIM_PEACEFUL.toString(), currentFaction.getTag(this));
|
||||||
} else if (currentFaction.isPeaceful()) {
|
} else if (currentFaction.isPeaceful()) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_PEACEFULTARGET.toString(), currentFaction.getTag(this));
|
error = plugin.txt.parse(TL.CLAIM_PEACEFULTARGET.toString(), currentFaction.getTag(this));
|
||||||
} else if (!currentFaction.hasLandInflation()) {
|
} else if (!currentFaction.hasLandInflation()) {
|
||||||
// TODO more messages WARN current faction most importantly
|
// TODO more messages WARN current faction most importantly
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_THISISSPARTA.toString(), currentFaction.getTag(this));
|
error = plugin.txt.parse(TL.CLAIM_THISISSPARTA.toString(), currentFaction.getTag(this));
|
||||||
} else if (currentFaction.hasLandInflation() && !FactionsPlugin.getInstance().getConfig().getBoolean("hcf.allow-overclaim", true)) {
|
} else if (currentFaction.hasLandInflation() && !plugin.getConfig().getBoolean("hcf.allow-overclaim", true)) {
|
||||||
// deny over claim when it normally would be allowed.
|
// deny over claim when it normally would be allowed.
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_OVERCLAIM_DISABLED.toString());
|
error = plugin.txt.parse(TL.CLAIM_OVERCLAIM_DISABLED.toString());
|
||||||
} else if (!Board.getInstance().isBorderLocation(flocation)) {
|
} else if (!Board.getInstance().isBorderLocation(flocation)) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_BORDER.toString());
|
error = plugin.txt.parse(TL.CLAIM_BORDER.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: Add more else if statements.
|
// TODO: Add more else if statements.
|
||||||
|
|
||||||
if (notifyFailure && error != null) msg(error);
|
if (notifyFailure && error != null) {
|
||||||
|
msg(error);
|
||||||
|
}
|
||||||
return error == null;
|
return error == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -962,7 +963,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFFlying(boolean fly, boolean damage) {
|
public void setFFlying(boolean fly, boolean damage) {
|
||||||
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))
|
if (!FactionsPlugin.factionsFlight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Player player = getPlayer();
|
Player player = getPlayer();
|
||||||
@@ -973,7 +974,8 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
|
|
||||||
if (!damage) {
|
if (!damage) {
|
||||||
msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled");
|
msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled");
|
||||||
if (!fly) sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + ""));
|
if (!fly)
|
||||||
|
sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + ""));
|
||||||
} else {
|
} else {
|
||||||
msg(TL.COMMAND_FLY_DAMAGE);
|
msg(TL.COMMAND_FLY_DAMAGE);
|
||||||
}
|
}
|
||||||
@@ -1203,6 +1205,15 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean hasFriendlyFire(){
|
||||||
|
return friendlyFire;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFriendlyFire(boolean status){
|
||||||
|
friendlyFire = status;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInspectMode() {
|
public boolean isInspectMode() {
|
||||||
return inspectMode;
|
return inspectMode;
|
||||||
@@ -1216,10 +1227,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
public boolean attemptClaim(Faction forFaction, FLocation flocation, boolean notifyFailure) {
|
public boolean attemptClaim(Faction forFaction, FLocation flocation, boolean notifyFailure) {
|
||||||
// notifyFailure is false if called by auto-claim; no need to notify on every failure for it
|
// notifyFailure is false if called by auto-claim; no need to notify on every failure for it
|
||||||
// return value is false on failure, true on success
|
// return value is false on failure, true on success
|
||||||
|
|
||||||
Faction currentFaction = Board.getInstance().getFactionAt(flocation);
|
Faction currentFaction = Board.getInstance().getFactionAt(flocation);
|
||||||
int ownedLand = forFaction.getLandRounded();
|
int ownedLand = forFaction.getLandRounded();
|
||||||
|
|
||||||
if (!this.canClaimForFactionAtLocation(forFaction, flocation, notifyFailure)) return false;
|
if (!this.canClaimForFactionAtLocation(forFaction, flocation, notifyFailure)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// if economy is enabled and they're not on the bypass list, make sure they can pay
|
// if economy is enabled and they're not on the bypass list, make sure they can pay
|
||||||
boolean mustPay = Econ.shouldBeUsed() && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone() && (Conf.econCostClaimWilderness != 0);
|
boolean mustPay = Econ.shouldBeUsed() && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone() && (Conf.econCostClaimWilderness != 0);
|
||||||
double cost = 0.0;
|
double cost = 0.0;
|
||||||
@@ -1238,21 +1253,38 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
payee = this;
|
payee = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Econ.hasAtLeast(payee, cost, TL.CLAIM_TOCLAIM.toString())) return false;
|
if (!Econ.hasAtLeast(payee, cost, TL.CLAIM_TOCLAIM.toString())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (forFaction.getClaimOwnership().containsKey(flocation) && !forFaction.isPlayerInOwnerList(this, flocation)) {
|
||||||
|
this.msg(TL.GENERIC_FPERM_OWNER_NOPERMISSION, "claim");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Conf.worldGuardChecking && Worldguard.getInstance().checkForRegionsInChunk(flocation)) {
|
||||||
|
this.msg(TL.GENERIC_WORLDGUARD);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LandClaimEvent claimEvent = new LandClaimEvent(flocation, forFaction, this);
|
LandClaimEvent claimEvent = new LandClaimEvent(flocation, forFaction, this);
|
||||||
Bukkit.getPluginManager().callEvent(claimEvent);
|
Bukkit.getPluginManager().callEvent(claimEvent);
|
||||||
if (claimEvent.isCancelled()) return false;
|
|
||||||
|
if (claimEvent.isCancelled()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// then make 'em pay (if applicable)
|
// then make 'em pay (if applicable)
|
||||||
if (mustPay && !Econ.modifyMoney(payee, -cost, TL.CLAIM_TOCLAIM.toString(), TL.CLAIM_FORCLAIM.toString()))
|
if (mustPay && !Econ.modifyMoney(payee, -cost, TL.CLAIM_TOCLAIM.toString(), TL.CLAIM_FORCLAIM.toString())) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Was an over claim
|
// Was an over claim
|
||||||
if (mustPay && currentFaction.isNormal() && currentFaction.hasLandInflation())
|
if (currentFaction.isNormal() && currentFaction.hasLandInflation()) {
|
||||||
// Give them money for over claiming.
|
// Give them money for over claiming.
|
||||||
Econ.modifyMoney(payee, Conf.econOverclaimRewardMultiplier, TL.CLAIM_TOOVERCLAIM.toString(), TL.CLAIM_FOROVERCLAIM.toString());
|
Econ.modifyMoney(payee, Conf.econOverclaimRewardMultiplier, TL.CLAIM_TOOVERCLAIM.toString(), TL.CLAIM_FOROVERCLAIM.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// announce success
|
// announce success
|
||||||
@@ -1260,14 +1292,15 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
informTheseFPlayers.add(this);
|
informTheseFPlayers.add(this);
|
||||||
informTheseFPlayers.addAll(forFaction.getFPlayersWhereOnline(true));
|
informTheseFPlayers.addAll(forFaction.getFPlayersWhereOnline(true));
|
||||||
for (FPlayer fp : informTheseFPlayers) {
|
for (FPlayer fp : informTheseFPlayers) {
|
||||||
if (!fp.hasNotificationsEnabled()) continue;
|
|
||||||
fp.msg(TL.CLAIM_CLAIMED, this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
fp.msg(TL.CLAIM_CLAIMED, this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Board.getInstance().setFactionAt(forFaction, flocation);
|
Board.getInstance().setFactionAt(forFaction, flocation);
|
||||||
if (Conf.logLandClaims)
|
|
||||||
|
if (Conf.logLandClaims) {
|
||||||
FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag());
|
FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag());
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -416,6 +416,11 @@ public enum TL {
|
|||||||
COMMAND_FOCUS_NO_LONGER("&c&l[!] &7Your faction is no longer focusing &c%s"),
|
COMMAND_FOCUS_NO_LONGER("&c&l[!] &7Your faction is no longer focusing &c%s"),
|
||||||
COMMAND_FOCUS_DESCRIPTION("Focus a Specific Player"),
|
COMMAND_FOCUS_DESCRIPTION("Focus a Specific Player"),
|
||||||
|
|
||||||
|
COMMAND_FRIENDLY_FIRE_DESCRIPTION("Toggle friendly fire for yourself."),
|
||||||
|
COMMAND_FRIENDLY_FIRE_TOGGLE_OFF("&c[!] &7You have toggled friendly fire &4off&7!"),
|
||||||
|
COMMAND_FRIENDLY_FIRE_TOGGLE_ON("&c[!] &7You have toggled friendly fire &aon&7!"),
|
||||||
|
FRIENDLY_FIRE_OFF_ATTACKER("&b%1$s &7has friendly fire toggle &4off&7!"),
|
||||||
|
FRIENDLY_FIRE_YOU_MUST("&c[!] &7You must have friendly fire active to attack faction members!"),
|
||||||
|
|
||||||
COMMAND_FWARP_CLICKTOWARP("&c&l[!]&7 Click to &cwarp!"),
|
COMMAND_FWARP_CLICKTOWARP("&c&l[!]&7 Click to &cwarp!"),
|
||||||
COMMAND_FWARP_COMMANDFORMAT("&c&l[!]&7 /f warp <warpname> &c[password]"),
|
COMMAND_FWARP_COMMANDFORMAT("&c&l[!]&7 /f warp <warpname> &c[password]"),
|
||||||
@@ -429,9 +434,12 @@ public enum TL {
|
|||||||
COMMAND_FWARP_PASSWORD_REQUIRED("&c&l[!]&c Warp Password:"),
|
COMMAND_FWARP_PASSWORD_REQUIRED("&c&l[!]&c Warp Password:"),
|
||||||
COMMAND_FWARP_PASSWORD_TIMEOUT("&c&l[!]&7 Warp password &ccanceled"),
|
COMMAND_FWARP_PASSWORD_TIMEOUT("&c&l[!]&7 Warp password &ccanceled"),
|
||||||
|
|
||||||
|
COMMAND_GRACE_TIME_REMAINING("&c&lGracePeriod &8» &cTime Remaining: &b%1$s"),
|
||||||
|
COMMAND_GRACE_DISABLED_NO_FORMAT("&c[!] &7Grace is disabled! Explosions are allowed!"),
|
||||||
|
COMMAND_GRACE_ENABLED_FORMAT("&c&lGracePeriod &8» &7Grace Period Has Now &aStarted&7! &cTime Remaining: &b%1$s"),
|
||||||
|
COMMAND_GRACE_DISABLED_FORMAT("&c&lGracePeriod &8» &7Grace Period Has Now &cEnded&7! &cExplosions are now enabled!"),
|
||||||
COMMAND_GRACE_DESCRIPTION("Toggles Grace Period on/off"),
|
COMMAND_GRACE_DESCRIPTION("Toggles Grace Period on/off"),
|
||||||
COMMAND_GRACE_ENABLED("&cYou cannot place &e%s &cwhile grace period is active!"),
|
COMMAND_GRACE_ENABLED_PLACEMENT("&cYou cannot place &e%s &cwhile grace period is active!"),
|
||||||
COMMAND_GRACE_TOGGLE("&8» &7Grace period is now &c%1$s"),
|
|
||||||
|
|
||||||
COMMAND_HINT_PERMISSION("&aYou can manage your factions permissions using &7/f perms"),
|
COMMAND_HINT_PERMISSION("&aYou can manage your factions permissions using &7/f perms"),
|
||||||
|
|
||||||
@@ -462,7 +470,7 @@ public enum TL {
|
|||||||
COMMAND_INVITE_TOINVITE("to invite someone"),
|
COMMAND_INVITE_TOINVITE("to invite someone"),
|
||||||
COMMAND_INVITE_FORINVITE("for inviting someone"),
|
COMMAND_INVITE_FORINVITE("for inviting someone"),
|
||||||
COMMAND_INVITE_CLICKTOJOIN("Click to join!"),
|
COMMAND_INVITE_CLICKTOJOIN("Click to join!"),
|
||||||
COMMAND_INVITE_INVITEDYOU(" &chas invited you to join "),
|
COMMAND_INVITE_INVITEDYOU("&l[!]&7 &c%1$s&7 has invited you to join &c%2$s&7"),
|
||||||
COMMAND_INVITE_INVITED("&c&l[!]&7 &c%1$s&7 invited &c%2$s&7 to your faction."),
|
COMMAND_INVITE_INVITED("&c&l[!]&7 &c%1$s&7 invited &c%2$s&7 to your faction."),
|
||||||
COMMAND_ALTINVITE_INVITED_ALT("&c&l[!]&7 &c%1$s&7 invited &c%2$s&7 to your faction as an alt."),
|
COMMAND_ALTINVITE_INVITED_ALT("&c&l[!]&7 &c%1$s&7 invited &c%2$s&7 to your faction as an alt."),
|
||||||
|
|
||||||
@@ -606,6 +614,8 @@ public enum TL {
|
|||||||
COMMAND_MONEYWITHDRAW_DESCRIPTION("Withdraw money"),
|
COMMAND_MONEYWITHDRAW_DESCRIPTION("Withdraw money"),
|
||||||
COMMAND_MONEYWITHDRAW_WITHDRAW("&c&l[!]&7 &c%1$s&7 withdrew&c %2$s &7from the faction bank:&c %3$s"),
|
COMMAND_MONEYWITHDRAW_WITHDRAW("&c&l[!]&7 &c%1$s&7 withdrew&c %2$s &7from the faction bank:&c %3$s"),
|
||||||
|
|
||||||
|
|
||||||
|
COMMAND_COOLDOWN("&c&l[!] &7You are currently on cooldown for this command!"),
|
||||||
COMMAND_OPEN_TOOPEN("to open or close the faction"),
|
COMMAND_OPEN_TOOPEN("to open or close the faction"),
|
||||||
COMMAND_OPEN_FOROPEN("for opening or closing the faction"),
|
COMMAND_OPEN_FOROPEN("for opening or closing the faction"),
|
||||||
COMMAND_OPEN_OPEN("open"),
|
COMMAND_OPEN_OPEN("open"),
|
||||||
@@ -962,7 +972,7 @@ public enum TL {
|
|||||||
COMMAND_UNBAN_NOTBANNED("&7%s &cisn't banned. Not doing anything."),
|
COMMAND_UNBAN_NOTBANNED("&7%s &cisn't banned. Not doing anything."),
|
||||||
COMMAND_UNBAN_TARGET_IN_OTHER_FACTION("&c%1$s is not in your faction!"),
|
COMMAND_UNBAN_TARGET_IN_OTHER_FACTION("&c%1$s is not in your faction!"),
|
||||||
COMMAND_UNBAN_UNBANNED("&e%1$s &cunbanned &7%2$s"),
|
COMMAND_UNBAN_UNBANNED("&e%1$s &cunbanned &7%2$s"),
|
||||||
COMMAND_UNBAN_TARGET("&aYou were unbanned from &r%s"),
|
COMMAND_UNBAN_TARGETUNBANNED("&aYou were unbanned from &r%s"),
|
||||||
|
|
||||||
COMMAND_UNCLAIM_SAFEZONE_SUCCESS("Safe zone was unclaimed."),
|
COMMAND_UNCLAIM_SAFEZONE_SUCCESS("Safe zone was unclaimed."),
|
||||||
COMMAND_UNCLAIM_SAFEZONE_NOPERM("This is a safe zone. You lack permissions to unclaim."),
|
COMMAND_UNCLAIM_SAFEZONE_NOPERM("This is a safe zone. You lack permissions to unclaim."),
|
||||||
@@ -1110,6 +1120,8 @@ public enum TL {
|
|||||||
GENERIC_NOFACTION_FOUND("&cCouldn't find a faction with that name!"),
|
GENERIC_NOFACTION_FOUND("&cCouldn't find a faction with that name!"),
|
||||||
GENERIC_YOUMUSTBE("&cYour must be atleast %1$s to do this!"),
|
GENERIC_YOUMUSTBE("&cYour must be atleast %1$s to do this!"),
|
||||||
GENERIC_MEMBERONLY("&cYou must be in a faction to do this!"),
|
GENERIC_MEMBERONLY("&cYou must be in a faction to do this!"),
|
||||||
|
GENERIC_WORLDGUARD("&cThis area is worldguard protected."),
|
||||||
|
GRACE_DISABLED_PLACEHOLDER("Disabled"),
|
||||||
|
|
||||||
// MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"),
|
// MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"),
|
||||||
MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"),
|
MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"),
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.massivecraft.factions.zcore.util;
|
|||||||
import com.massivecraft.factions.*;
|
import com.massivecraft.factions.*;
|
||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
import com.massivecraft.factions.struct.Relation;
|
import com.massivecraft.factions.struct.Relation;
|
||||||
|
import com.massivecraft.factions.util.timer.TimerManager;
|
||||||
import org.apache.commons.lang.time.DurationFormatUtils;
|
import org.apache.commons.lang.time.DurationFormatUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@@ -20,6 +21,7 @@ public enum TagReplacer {
|
|||||||
/**
|
/**
|
||||||
* Fancy variables, used by f show
|
* Fancy variables, used by f show
|
||||||
*/
|
*/
|
||||||
|
NEUTRAL_LIST(TagType.FANCY, "{neutral-list}"),
|
||||||
ALLIES_LIST(TagType.FANCY, "{allies-list}"),
|
ALLIES_LIST(TagType.FANCY, "{allies-list}"),
|
||||||
ONLINE_LIST(TagType.FANCY, "{online-list}"),
|
ONLINE_LIST(TagType.FANCY, "{online-list}"),
|
||||||
ENEMIES_LIST(TagType.FANCY, "{enemies-list}"),
|
ENEMIES_LIST(TagType.FANCY, "{enemies-list}"),
|
||||||
@@ -81,6 +83,7 @@ public enum TagReplacer {
|
|||||||
/**
|
/**
|
||||||
* General variables, require no faction or player
|
* General variables, require no faction or player
|
||||||
*/
|
*/
|
||||||
|
GRACE_TIMER(TagType.GENERAL, "{grace-time}"),
|
||||||
MAX_WARPS(TagType.GENERAL, "{max-warps}"),
|
MAX_WARPS(TagType.GENERAL, "{max-warps}"),
|
||||||
MAX_ALLIES(TagType.GENERAL, "{max-allies}"),
|
MAX_ALLIES(TagType.GENERAL, "{max-allies}"),
|
||||||
MAX_ALTS(TagType.GENERAL, "{max-alts}"),
|
MAX_ALTS(TagType.GENERAL, "{max-alts}"),
|
||||||
@@ -124,6 +127,8 @@ public enum TagReplacer {
|
|||||||
*/
|
*/
|
||||||
protected String getValue() {
|
protected String getValue() {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
|
case GRACE_TIMER:
|
||||||
|
return String.valueOf(TimerManager.getRemaining(FactionsPlugin.getInstance().getTimerManager().graceTimer.getRemaining(), true));
|
||||||
case TOTAL_ONLINE:
|
case TOTAL_ONLINE:
|
||||||
return String.valueOf(Bukkit.getOnlinePlayers().size());
|
return String.valueOf(Bukkit.getOnlinePlayers().size());
|
||||||
case FACTIONLESS:
|
case FACTIONLESS:
|
||||||
@@ -134,7 +139,7 @@ public enum TagReplacer {
|
|||||||
}
|
}
|
||||||
return TL.GENERIC_INFINITY.toString();
|
return TL.GENERIC_INFINITY.toString();
|
||||||
case MAX_ALTS:
|
case MAX_ALTS:
|
||||||
if(FactionsPlugin.getInstance().getConfig().getBoolean("f-alts.Enabled")){
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("f-alts.Enabled")) {
|
||||||
return String.valueOf(Conf.factionAltMemberLimit);
|
return String.valueOf(Conf.factionAltMemberLimit);
|
||||||
}
|
}
|
||||||
return TL.GENERIC_INFINITY.toString();
|
return TL.GENERIC_INFINITY.toString();
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ help:
|
|||||||
# We use '1' to preserve default functionality of /f help 1
|
# We use '1' to preserve default functionality of /f help 1
|
||||||
'1':
|
'1':
|
||||||
- '&7&m----------------------------------------------------'
|
- '&7&m----------------------------------------------------'
|
||||||
- '&6&lFactions Help &8- &f(1/2) '
|
- '&6&lFactions Help &8- &f(1/3) '
|
||||||
- '&7&m----------------------------------------------------'
|
- '&7&m----------------------------------------------------'
|
||||||
- '&c/f create &f<name> &8- &7Create your own faction.'
|
- '&c/f create &f<name> &8- &7Create your own faction.'
|
||||||
- '&c/f who &f<name> &8- &7Show faction information.'
|
- '&c/f who &f<name> &8- &7Show faction information.'
|
||||||
@@ -362,7 +362,9 @@ help:
|
|||||||
- '&c/f banlist &8- &7List banned players from your faction.'
|
- '&c/f banlist &8- &7List banned players from your faction.'
|
||||||
- '&c/f lowpower &8- &7List player with power under max from your faction.'
|
- '&c/f lowpower &8- &7List player with power under max from your faction.'
|
||||||
- '&c/f coords &8- &7Broadcast your location to your faction.'
|
- '&c/f coords &8- &7Broadcast your location to your faction.'
|
||||||
|
#THIS IS AFFILIATED WITH F PERMS PERMISSION (TERRITORY) LOL
|
||||||
- '&c/f showclaims &8- &7List all claims from your faction.'
|
- '&c/f showclaims &8- &7List all claims from your faction.'
|
||||||
|
#THIS IS AFFILIATED WITH F PERMS PERMISSION (TERRITORY) LOL
|
||||||
- '&7&m--------------------&r &e/f help 2 &7&m-----------------------'
|
- '&7&m--------------------&r &e/f help 2 &7&m-----------------------'
|
||||||
'2':
|
'2':
|
||||||
- '&7&m----------------------------------------------------'
|
- '&7&m----------------------------------------------------'
|
||||||
@@ -594,11 +596,13 @@ fwarp-gui:
|
|||||||
- ' '
|
- ' '
|
||||||
############################################################
|
############################################################
|
||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
# | Faction Creation/Disband Broadcast | #
|
# | Faction Broadcasts | #
|
||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
############################################################
|
############################################################
|
||||||
faction-creation-broadcast: true #Disabling this will not make faction creation broadcasts appear in chat.
|
faction-creation-broadcast: true #Disabling this will not make faction creation broadcasts appear in chat.
|
||||||
faction-disband-broadcast: true #Disabling this will not make faction disband broadcasts appear in chat.
|
faction-disband-broadcast: true #Disabling this will not make faction disband broadcasts appear in chat.
|
||||||
|
faction-open-broadcast: true #Disabling this will not make faction open broadcasts appear in chat.
|
||||||
|
faction-leader-broadcast: true #Disabling this will not make leader changes appear in chat.
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
@@ -729,8 +733,7 @@ F-Shop:
|
|||||||
# | Faction Command Cooldowns | #
|
# | Faction Command Cooldowns | #
|
||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
############################################################
|
############################################################
|
||||||
#To-Do#
|
fcooldowns: #All of These Cooldowns Are In Seconds
|
||||||
fcooldowns:
|
|
||||||
f-open: 5
|
f-open: 5
|
||||||
f-disband: 10
|
f-disband: 10
|
||||||
f-create: 10
|
f-create: 10
|
||||||
@@ -753,6 +756,7 @@ Falling-Block-Fix:
|
|||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
############################################################
|
############################################################
|
||||||
f-disband-gui:
|
f-disband-gui:
|
||||||
|
title: '&7Confirm Disband'
|
||||||
confirm-item:
|
confirm-item:
|
||||||
Type: LIME_STAINED_GLASS_PANE
|
Type: LIME_STAINED_GLASS_PANE
|
||||||
Name: '&a&lConfirm'
|
Name: '&a&lConfirm'
|
||||||
@@ -954,6 +958,7 @@ fupgrades:
|
|||||||
Lore:
|
Lore:
|
||||||
- ' '
|
- ' '
|
||||||
Crops:
|
Crops:
|
||||||
|
Max-Level: 4
|
||||||
Crop-Boost:
|
Crop-Boost:
|
||||||
level-1: 10
|
level-1: 10
|
||||||
level-2: 20
|
level-2: 20
|
||||||
@@ -969,7 +974,7 @@ fupgrades:
|
|||||||
Lore:
|
Lore:
|
||||||
- '&7&oIncrease growth &c&ospeed&7&o of crops in &c&oclaims.'
|
- '&7&oIncrease growth &c&ospeed&7&o of crops in &c&oclaims.'
|
||||||
- '&7&oChance to Grow Two Levels.'
|
- '&7&oChance to Grow Two Levels.'
|
||||||
- 'Current level is &e&l&o{level}'
|
- '&7&oYour current level is &e&l&o{level}'
|
||||||
- ''
|
- ''
|
||||||
- '&c&lChances'
|
- '&c&lChances'
|
||||||
- '&4&l* &cLevel 1: &f10% Chance'
|
- '&4&l* &cLevel 1: &f10% Chance'
|
||||||
@@ -984,6 +989,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 31
|
Slot: 31
|
||||||
EXP:
|
EXP:
|
||||||
|
Max-Level: 3
|
||||||
EXP-Boost:
|
EXP-Boost:
|
||||||
level-1: 1.5
|
level-1: 1.5
|
||||||
level-2: 2.0
|
level-2: 2.0
|
||||||
@@ -1013,6 +1019,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 32
|
Slot: 32
|
||||||
Power:
|
Power:
|
||||||
|
Max-Level: 3
|
||||||
Power-Boost:
|
Power-Boost:
|
||||||
level-1: 100.0
|
level-1: 100.0
|
||||||
level-2: 200.0
|
level-2: 200.0
|
||||||
@@ -1028,7 +1035,7 @@ fupgrades:
|
|||||||
Lore:
|
Lore:
|
||||||
- '&a&oIncrease&7&o the amount of &c&opower'
|
- '&a&oIncrease&7&o the amount of &c&opower'
|
||||||
- '&7&oyour &a&ofaction has&7&o.'
|
- '&7&oyour &a&ofaction has&7&o.'
|
||||||
- 'Current level is &e&l&o{level}'
|
- '&7&oYour current level is &e&l&o{level}'
|
||||||
- ''
|
- ''
|
||||||
- '&c&lIncreased Faction Power'
|
- '&c&lIncreased Faction Power'
|
||||||
- '&4&l* &cLevel 1: &f100'
|
- '&4&l* &cLevel 1: &f100'
|
||||||
@@ -1043,6 +1050,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 22
|
Slot: 22
|
||||||
Redstone:
|
Redstone:
|
||||||
|
Max-Level: 1
|
||||||
Cost:
|
Cost:
|
||||||
level-1: 1000000
|
level-1: 1000000
|
||||||
DisplayItem:
|
DisplayItem:
|
||||||
@@ -1058,6 +1066,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oLeft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oLeft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 23
|
Slot: 23
|
||||||
Spawners:
|
Spawners:
|
||||||
|
Max-Level: 3
|
||||||
Spawner-Boost:
|
Spawner-Boost:
|
||||||
# This is a Percentage so .10 means 10% lowered spawner delay!
|
# This is a Percentage so .10 means 10% lowered spawner delay!
|
||||||
level-1: 0.10
|
level-1: 0.10
|
||||||
@@ -1088,6 +1097,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 30
|
Slot: 30
|
||||||
DamageReduct:
|
DamageReduct:
|
||||||
|
Max-Level: 3
|
||||||
DamageReductPercent:
|
DamageReductPercent:
|
||||||
level-1: 3
|
level-1: 3
|
||||||
level-2: 5
|
level-2: 5
|
||||||
@@ -1117,6 +1127,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 7
|
Slot: 7
|
||||||
DamageIncrease:
|
DamageIncrease:
|
||||||
|
Max-Level: 3
|
||||||
DamageIncreasePercent:
|
DamageIncreasePercent:
|
||||||
level-1: 3
|
level-1: 3
|
||||||
level-2: 5
|
level-2: 5
|
||||||
@@ -1146,6 +1157,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 1
|
Slot: 1
|
||||||
TNT:
|
TNT:
|
||||||
|
Max-Level: 3
|
||||||
tnt-limit:
|
tnt-limit:
|
||||||
level-1: 500000
|
level-1: 500000
|
||||||
level-2: 1000000
|
level-2: 1000000
|
||||||
@@ -1175,6 +1187,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 21
|
Slot: 21
|
||||||
Warps:
|
Warps:
|
||||||
|
Max-Level: 3
|
||||||
warp-limit:
|
warp-limit:
|
||||||
level-1: 3
|
level-1: 3
|
||||||
level-2: 4
|
level-2: 4
|
||||||
@@ -1204,6 +1217,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 24
|
Slot: 24
|
||||||
Chest:
|
Chest:
|
||||||
|
Max-Level: 3
|
||||||
Chest-Size:
|
Chest-Size:
|
||||||
# This is rows
|
# This is rows
|
||||||
level-1: 2
|
level-1: 2
|
||||||
@@ -1234,6 +1248,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 20
|
Slot: 20
|
||||||
Members:
|
Members:
|
||||||
|
Max-Level: 3
|
||||||
Members-Limit:
|
Members-Limit:
|
||||||
level-1: 30
|
level-1: 30
|
||||||
level-2: 35
|
level-2: 35
|
||||||
@@ -1263,6 +1278,7 @@ fupgrades:
|
|||||||
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
- '&7&o(( Tip: &f&oleft-click&7&o to &c&oupgrade&7&o ))'
|
||||||
Slot: 40
|
Slot: 40
|
||||||
Armor:
|
Armor:
|
||||||
|
Max-Level: 3
|
||||||
Armor-HP-Drop:
|
Armor-HP-Drop:
|
||||||
# HP Drop is in percent so .10 would mean it would drop 10% of the damage to the armor
|
# HP Drop is in percent so .10 would mean it would drop 10% of the damage to the armor
|
||||||
level-1: .10
|
level-1: .10
|
||||||
@@ -1422,6 +1438,8 @@ Wild:
|
|||||||
Enabled: true
|
Enabled: true
|
||||||
# Time to wait in seconds #
|
# Time to wait in seconds #
|
||||||
Wait: 5
|
Wait: 5
|
||||||
|
# World players will be teleported to #
|
||||||
|
World: 'World'
|
||||||
# General GUI Settings #
|
# General GUI Settings #
|
||||||
GUI:
|
GUI:
|
||||||
Name: 'Teleporter'
|
Name: 'Teleporter'
|
||||||
@@ -1548,6 +1566,7 @@ Wild:
|
|||||||
# - {action-access-color} : Access color
|
# - {action-access-color} : Access color
|
||||||
|
|
||||||
# General variables. Can be used anywhere.
|
# General variables. Can be used anywhere.
|
||||||
|
# - {grace-time} : Time of Grace Period
|
||||||
# - {total-online} : Total # of players on the server
|
# - {total-online} : Total # of players on the server
|
||||||
# - {max-warps} : Max # of warps a faction can set
|
# - {max-warps} : Max # of warps a faction can set
|
||||||
# - {max-allies} : Max # of allies a faction can have
|
# - {max-allies} : Max # of allies a faction can have
|
||||||
|
|||||||
@@ -158,6 +158,8 @@ permissions:
|
|||||||
description: auto-claim land as you walk around
|
description: auto-claim land as you walk around
|
||||||
factions.bypass:
|
factions.bypass:
|
||||||
description: enable admin bypass mode
|
description: enable admin bypass mode
|
||||||
|
factions.friendlyfire:
|
||||||
|
description: ability to toggle on friend fire per player
|
||||||
factions.lookup:
|
factions.lookup:
|
||||||
description: Lookup claim & home stats for faction
|
description: Lookup claim & home stats for faction
|
||||||
factions.chat:
|
factions.chat:
|
||||||
|
|||||||
Reference in New Issue
Block a user