Compare commits

..

16 Commits

Author SHA1 Message Date
Driftay
e55f053e4d Version Change 2020-03-25 00:59:39 -04:00
Driftay
945edc946e Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2020-03-25 00:57:21 -04:00
Driftay
8cace99444 Changelog will be posted, add alot 2020-03-25 00:56:39 -04:00
Driftay
5d4735859b Merge pull request #54 from Lumpiasty/1.6.x
Add missing BLAST_FURNACE and SMOKER to Container permission
2020-03-24 11:22:34 -04:00
Lumpiasty
cef153691d Add missing BLAST_FURNACE and SMOKER to Container permission 2020-03-24 16:05:37 +01:00
Driftay
4dec162d46 More Configurability 2020-03-23 16:31:33 -04:00
Driftay
606e82c890 Made F Stuck Toggleable 2020-03-23 16:11:54 -04:00
Driftay
323dce1c4f boolean to toggle f inspect on and off 2020-03-18 14:37:23 -04:00
Driftay
36c8d53a85 Configurable Option For Click To Claim 2020-03-10 06:36:47 -04:00
Driftay
81bac35b51 OCD Fixed 2020-03-03 00:45:56 -05:00
Driftay
19f09a6379 Version Change 2020-03-03 00:36:48 -05:00
Driftay
19ea590e5f Merge pull request #52 from MSWS/patch-1
Allow color codes in Faction Upgrade Title GUI
2020-02-26 06:52:42 -05:00
Driftay
d6a274ddc5 Revert Deleted Line 2020-02-26 06:51:41 -05:00
Driftay
5591048136 Merge remote-tracking branch 'origin/1.6.x' into 1.6.x 2020-02-26 06:50:23 -05:00
Driftay
fe7738fea0 Fixed Faction Alt And Member Limits 2020-02-26 06:50:07 -05:00
MSWS
3ba6e1f376 Allow color codes in Faction Upgrade Title GUI 2020-02-23 22:31:50 -08:00
78 changed files with 869 additions and 1147 deletions

View File

@@ -4,7 +4,7 @@
<groupId>com.massivecraft</groupId>
<artifactId>Factions</artifactId>
<version>1.6.9.5-2.2.9-RC</version>
<version>1.6.9.5-2.3.1-RC</version>
<packaging>jar</packaging>
<name>SaberFactions</name>

View File

@@ -1,7 +1,6 @@
package com.massivecraft.factions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.massivecraft.factions.integration.dynmap.DynmapStyle;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.fperms.DefaultPermissions;
@@ -22,7 +21,7 @@ public class Conf {
public static final transient double DYNMAP_STYLE_FILL_OPACITY = 0.35D;
public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag";
public static final transient boolean DYNMAP_STYLE_BOOST = false;
public static List<String> baseCommandAliases = new ArrayList<>(Collections.singletonList("f"));
public static List<String> baseCommandAliases = new ArrayList<>();
public static boolean allowNoSlashCommand = true;
// Colors
@@ -99,15 +98,30 @@ public class Conf {
public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction.
public static boolean worldGuardChecking = false;
public static boolean worldGuardBuildPriority = false;
//Claim Fill
public static int maxFillClaimCount = 25;
public static int maxFillClaimDistance = 5;
public static boolean factionsDrainEnabled = false;
//RESERVE
public static boolean useReserveSystem = true;
//AUDIT
public static boolean useAuditSystem = true;
//INSPECT
public static boolean useInspectSystem = true;
//GUI's
public static boolean useDisbandGUI = true;
//SEALTH
public static boolean useSealthSystem = true;
//STRIKES
public static boolean useStrikeSystem = true;
//DISCORD
public static boolean useDiscordSystem = false;
public static String discordBotToken = "<token here>";
@@ -123,7 +137,7 @@ public class Conf {
public static Boolean factionDiscordTags = false;
public static String factionTag = "(NAME) [FACTION]";
public static Boolean factionRoles = false;
public static List<Integer> factionRoleColor = new ArrayList<Integer>(){{
public static List<Integer> factionRoleColor = new ArrayList<Integer>() {{
add(25);
add(162);
add(203);
@@ -259,6 +273,7 @@ public class Conf {
public static Set<Material> territoryBypassProtectedMaterials = EnumSet.noneOf(Material.class);
// Dependency check
public static boolean dependencyCheck = true;
public static boolean enableClickToClaim = true;
public static Set<Material> territoryCancelAndAllowItemUseMaterial = new HashSet<>();
public static Set<Material> territoryDenySwitchMaterials = new HashSet<>();
@@ -411,6 +426,7 @@ public class Conf {
}
static {
baseCommandAliases.add("f");
blacklistedFactionNames.add("somenamehere");
@@ -579,7 +595,9 @@ public class Conf {
FactionsPlugin.getInstance().persist.save(i);
}
public static void saveSync() { FactionsPlugin.instance.persist.saveSync(i); }
public static void saveSync() {
FactionsPlugin.instance.persist.saveSync(i);
}
public enum Backend {
JSON,

View File

@@ -14,6 +14,7 @@ import java.util.Set;
public class FLocation implements Serializable {
private static final long serialVersionUID = -8292915234027387983L;
private static final boolean worldBorderSupport;
static {
boolean worldBorderClassPresent = false;
try {
@@ -150,7 +151,9 @@ public class FLocation implements Serializable {
return "" + x + "," + z;
}
public String formatXAndZ(String splitter) { return chunkToBlock(this.x) + "x" + splitter + " " + chunkToBlock(this.z) + "z"; }
public String formatXAndZ(String splitter) {
return chunkToBlock(this.x) + "x" + splitter + " " + chunkToBlock(this.z) + "z";
}
//----------------------------------------------//
// Misc Geometry
@@ -178,8 +181,8 @@ public class FLocation implements Serializable {
}
public boolean isInChunk(Location loc) {
if(loc == null) return false;
if(loc.getWorld() == null) return false;
if (loc == null) return false;
if (loc.getWorld() == null) return false;
Chunk chunk = loc.getChunk();
return loc.getWorld().getName().equalsIgnoreCase(getWorldName()) && chunk.getX() == x && chunk.getZ() == z;

View File

@@ -12,10 +12,8 @@ import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Map;
/**
@@ -36,84 +34,70 @@ public interface FPlayer extends EconomyParticipator {
/**
* Determine if a player has enemies nearby based on the enemy check task in CmdFly
* NOTE: THIS VALUE IS ONLY UPDATED WHEN A USER IS USING FLY
*
* @return enemiesNearby as a boolean
*/
boolean hasEnemiesNearby();
/**
* Set if this FPlayer has an enemy nearby
*
* @param b enemiesNearby
*/
void setEnemiesNearby(Boolean b);
/**
* Get this players inventory prior to entering the duel (Will be set to null after duel!)
* @return Map of old inventory contents
*/
Map<Integer, ItemStack> getOldInv();
/**
* Set this players stored inventory, this inventory will be retrieved after a duel is complete
* @param inv Map of inventory contents
*/
void setOldInv(Map<Integer, ItemStack> inv);
/**
* Used to check if player has entered a duel and has not proceeded
* @return boolean determining if the player is in a duel
*/
boolean isInDuel();
/**
* Used before and after duels to set the inDuel status of the FPlayer
* @param b Desired status
*/
void setInDuel(Boolean b);
/**
* Get if a player has setup their Discord before
*
* @return if the player setup Discord as a boolean
*/
boolean discordSetup();
/**
* Get the players Discord user ID
*
* @return players Discord user ID as a String
*/
String discordUserID();
/**
* Set the players Boolean defining if the player has setup their Discord
*
* @param b Boolean for discordSetup to be defined to
*/
void setDiscordSetup(Boolean b);
/**
* Set the players Discord user ID
*
* @param s String for their user ID to be set to
*/
void setDiscordUserID(String s);
/**
* Get the players Discord user (If the player has not setup Discord it will return null!)
*
* @return User from players set Discord User ID
*/
User discordUser();
/**
* Used to check if this player should be served titles
*
* @return if this FPlayer has titles enabled as a boolean
*/
boolean hasTitlesEnabled();
/**
* Used to set if player should be served titles
*
* @param b Boolean to titlesEnabled to
*/
void setTitlesEnabled(Boolean b);
/**
* Used to determine if a player is in their faction's chest
*
* @return if player is in their faction's as a boolean
*/
boolean isInFactionsChest();

View File

@@ -23,8 +23,6 @@ import java.util.concurrent.ConcurrentHashMap;
public interface Faction extends EconomyParticipator {
void broadcast(String s);
String getMemberRoleId();
void setMemberRoleId(String roleId);
@@ -249,6 +247,8 @@ public interface Faction extends EconomyParticipator {
void setHome(Location home);
void deleteHome();
long getFoundedDate();
void setFoundedDate(long newDate);

View File

@@ -26,8 +26,6 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.*;
import com.massivecraft.factions.util.Particles.ReflectionUtils;
import com.massivecraft.factions.util.Sync.SyncExecutor;
import com.massivecraft.factions.util.Wait.WaitExecutor;
import com.massivecraft.factions.zcore.CommandVisibility;
import com.massivecraft.factions.zcore.MPlugin;
import com.massivecraft.factions.zcore.fperms.Access;
@@ -54,7 +52,6 @@ import java.io.*;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
@@ -84,6 +81,7 @@ public class FactionsPlugin extends MPlugin {
public boolean mc115 = false;
public boolean useNonPacketParticles = false;
public boolean factionsFlight = false;
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
SkriptAddon skriptAddon;
private FactionsPlayerListener factionsPlayerListener;
private boolean locked = false;
@@ -93,7 +91,6 @@ public class FactionsPlugin extends MPlugin {
private ClipPlaceholderAPIManager clipPlaceholderAPIManager;
private boolean mvdwPlaceholderAPIManager = false;
private Listener[] eventsListener;
public List<String> itemList = getConfig().getStringList("fchest.Items-Not-Allowed");
private Worldguard wg;
private FLogManager fLogManager;
private List<ReserveObject> reserveObjects;
@@ -183,10 +180,6 @@ public class FactionsPlugin extends MPlugin {
this.saveResource("config.yml", false);
this.reloadConfig();
}
//Start synctask
SyncExecutor.startTask();
//Start wait task executor
WaitExecutor.startTask();
//Attempt to generate a permission list
PermissionList.generateFile();
// Load Conf from disk
@@ -196,13 +189,12 @@ public class FactionsPlugin extends MPlugin {
if (Conf.dependencyCheck && (!Bukkit.getPluginManager().isPluginEnabled("Vault"))) {
divider();
System.out.println("You are missing dependencies!");
System.out.println("Please verify Vault is installed!");
System.out.println("Please verify and Vault are installed!");
Conf.save();
Bukkit.getPluginManager().disablePlugin(instance);
divider();
return;
}
//TODO fix this
//Update their config if needed
// Updater.updateIfNeeded(getConfig());
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
@@ -445,7 +437,7 @@ public class FactionsPlugin extends MPlugin {
file.getParentFile().mkdirs();
file.createNewFile();
}
Files.write(Paths.get(file.getPath()),getGsonBuilder().create().toJson(reserveObjects).getBytes());
Files.write(Paths.get(file.getPath()), getGsonBuilder().create().toJson(reserveObjects).getBytes());
} catch (IOException e) {
e.printStackTrace();
}

View File

@@ -6,10 +6,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/**
* @author DroppingAnvil
*/
public class Aliases {
/**
* @author DroppingAnvil
*/
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
public static ArrayList<String> alts_invite = new ArrayList<>(Collections.singletonList("invite"));
@@ -21,8 +21,10 @@ public class Aliases {
public static ArrayList<String> claim_auto = new ArrayList<>(Collections.singletonList("autoclaim"));
public static ArrayList<String> claim_claim = new ArrayList<>(Collections.singletonList("claim"));
public static ArrayList<String> claim_at = new ArrayList<>(Collections.singletonList("claimat"));
public static ArrayList<String> claim_claimFill = new ArrayList<>(Arrays.asList("claimfill", "cf"));
public static ArrayList<String> claim_line = new ArrayList<>(Arrays.asList("claimline", "cl"));
public static ArrayList<String> claim_corner = new ArrayList<>(Arrays.asList("corner"));
public static ArrayList<String> delfHome = new ArrayList<>(Arrays.asList("delhome", "deletehome"));
public static ArrayList<String> unclaim_all_safe = new ArrayList<>(Arrays.asList("safeunclaimall", "safedeclaimall"));
public static ArrayList<String> unclaim_unclaim = new ArrayList<>(Arrays.asList("unclaim", "declaim"));
public static ArrayList<String> unclaim_all_unsafe = new ArrayList<>(Arrays.asList("unclaimall", "declaimall"));

View File

@@ -0,0 +1,51 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
/**
* Factions - Developed by Driftay.
* All rights reserved 2020.
* Creation Date: 3/24/2020
*/
public class CmdDelHome extends FCommand {
public CmdDelHome() {
this.aliases.addAll(Aliases.delfHome);
this.requirements = new CommandRequirements.Builder(Permission.DELHOME)
.memberOnly()
.withAction(PermissableAction.SETHOME)
.build();
}
@Override
public void perform(CommandContext context) {
FactionsPlugin.getInstance().getServer().getScheduler().runTaskAsynchronously(FactionsPlugin.instance, () -> {
//Check if homes are enabled
if (!Conf.homesEnabled) {
context.msg(TL.COMMAND_SETHOME_DISABLED);
return;
}
//If They Don't Have Home
if (!context.faction.hasHome()) {
context.msg(TL.COMMAND_HOME_NOHOME.toString());
context.msg(FactionsPlugin.getInstance().cmdBase.cmdSethome.getUsageTemplate(context));
return;
}
context.faction.deleteHome();
context.faction.msg(TL.COMMAND_DELHOME_SUCCESS, context.fPlayer.describeTo(context.faction, true));
});
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_DELHOME_DESCRIPTION;
}
}

View File

@@ -9,7 +9,6 @@ import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.command.ConsoleCommandSender;
import java.util.HashMap;
@@ -79,7 +78,7 @@ public class CmdDisband extends FCommand {
}
if (!access) {
if(Conf.useDisbandGUI && !context.fPlayer.isAdminBypassing() || !context.player.isOp()) {
if (Conf.useDisbandGUI && !context.fPlayer.isAdminBypassing() || !context.player.isOp()) {
if (!disbandMap.containsKey(context.player.getUniqueId().toString())) {
new FDisbandFrame(context.faction).buildGUI(context.fPlayer);
return;
@@ -111,6 +110,7 @@ public class CmdDisband extends FCommand {
} else {
context.player.sendMessage(String.valueOf(TL.COMMAND_DISBAND_PLAYER));
}
Bukkit.broadcastMessage("Called");
faction.disband(context.player, PlayerDisbandReason.COMMAND);
if (!context.fPlayer.canFlyAtLocation() && FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight")) {
context.fPlayer.setFFlying(false, false);

View File

@@ -6,9 +6,6 @@ import com.massivecraft.factions.zcore.util.TL;
import java.util.Random;
/**
* @author droppinganvil
*/
public class CmdDiscord extends FCommand {
public CmdDiscord() {
super();

View File

@@ -1,5 +1,6 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
@@ -21,6 +22,11 @@ public class CmdInspect extends FCommand {
@Override
public void perform(CommandContext context) {
if (!Conf.useInspectSystem) {
context.fPlayer.msg(TL.GENERIC_DISABLED, "Faction Inspection");
return;
}
if (context.fPlayer.isInspectMode()) {
context.fPlayer.setInspectMode(false);
context.msg(TL.COMMAND_INSPECT_DISABLED_MSG);

View File

@@ -127,6 +127,7 @@ public class CmdJoin extends FCommand {
}
faction.deinvite(fplayer);
try {
context.fPlayer.setRole(faction.getDefaultRole());
FactionsPlugin.instance.logFactionEvent(faction, FLogType.INVITES, context.fPlayer.getName(), CC.Green + "joined", "the faction");
@@ -154,7 +155,7 @@ public class CmdJoin extends FCommand {
private int getFactionMemberLimit(Faction f) {
if (f.getUpgrade(UpgradeType.MEMBERS) == 0) return Conf.factionMemberLimit;
return Conf.factionMemberLimit + FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.Member-Boost.level-" + f.getUpgrade(UpgradeType.MEMBERS));
return Conf.factionMemberLimit + FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Members.Members-Limit.level-" + f.getUpgrade(UpgradeType.MEMBERS));
}
@Override

View File

@@ -3,7 +3,6 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.discord.Discord;
import com.massivecraft.factions.duels.RequestGUI;
import com.massivecraft.factions.listeners.FactionsPlayerListener;
import com.massivecraft.factions.shop.ShopConfig;
import com.massivecraft.factions.struct.Permission;
@@ -45,9 +44,6 @@ public class CmdReload extends FCommand {
FCmdRoot.instance.addVariableCommands();
FCmdRoot.instance.rebuild();
long timeReload = (System.currentTimeMillis() - timeInitStart);
//Duels
RequestGUI.inv = null;
RequestGUI.responseMap.clear();
context.msg(TL.COMMAND_RELOAD_TIME, timeReload);
}

View File

@@ -1,5 +1,6 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
@@ -19,6 +20,12 @@ public class CmdStealth extends FCommand {
@Override
public void perform(CommandContext context) {
if (!Conf.useSealthSystem) {
context.msg(TL.GENERIC_DISABLED, "Factions Stealth");
return;
}
if (context.faction != null && !context.faction.getId().equalsIgnoreCase("0") && !context.faction.getId().equalsIgnoreCase("none") && !context.faction.getId().equalsIgnoreCase("safezone") && !context.faction.getId().equalsIgnoreCase("warzone")) {
context.fPlayer.setStealth(!context.fPlayer.isStealthEnabled());
context.msg(context.fPlayer.isStealthEnabled() ? TL.COMMAND_STEALTH_ENABLE : TL.COMMAND_STEALTH_DISABLE);

View File

@@ -35,6 +35,12 @@ public class CmdStuck extends FCommand {
final long delay = FactionsPlugin.getInstance().getConfig().getLong("hcf.stuck.delay", 30);
final int radius = FactionsPlugin.getInstance().getConfig().getInt("hcf.stuck.radius", 10);
if (!FactionsPlugin.getInstance().getConfig().getBoolean("hcf.stuck.Enabled", false)) {
context.msg(TL.GENERIC_DISABLED, "Factions Stuck");
return;
}
if (FactionsPlugin.getInstance().getStuckMap().containsKey(player.getUniqueId())) {
long wait = FactionsPlugin.getInstance().getTimers().get(player.getUniqueId()) - System.currentTimeMillis();
String time = DurationFormatUtils.formatDuration(wait, TL.COMMAND_STUCK_TIMEFORMAT.toString(), true);

View File

@@ -168,6 +168,8 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
public CmdLookup cmdLookup = new CmdLookup();
public CmdAudit cmdAudit = new CmdAudit();
public CmdReserve cmdReserve = new CmdReserve();
public CmdDelHome cmdDelHome = new CmdDelHome();
public CmdClaimFill cmdClaimFill = new CmdClaimFill();
//Variables to know if we already setup certain sub commands
public Boolean discordEnabled = false;
public Boolean checkEnabled = false;
@@ -184,6 +186,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
public Boolean internalFTOPEnabled = false;
public Boolean fWildEnabled = false;
public Boolean fAuditEnabled = false;
public Boolean fStrikes = false;
public FCmdRoot() {
super();
@@ -212,6 +215,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
this.addSubCommand(this.cmdCreate);
this.addSubCommand(this.cmdDeinvite);
this.addSubCommand(this.cmdDescription);
this.addSubCommand(this.cmdDelHome);
this.addSubCommand(this.cmdDisband);
this.addSubCommand(this.cmdHelp);
this.addSubCommand(this.cmdHome);
@@ -262,6 +266,7 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
this.addSubCommand(this.cmdDelFWarp);
this.addSubCommand(this.cmdModifyPower);
this.addSubCommand(this.cmdLogins);
this.addSubCommand(this.cmdClaimFill);
this.addSubCommand(this.cmdClaimLine);
this.addSubCommand(this.cmdAHome);
this.addSubCommand(this.cmdPerm);
@@ -292,7 +297,6 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
this.addSubCommand(this.cmdChest);
this.addSubCommand(this.cmdSetBanner);
this.addSubCommand(this.cmdCorner);
this.addSubCommand(this.cmdStrikes);
this.addSubCommand(this.cmdFGlobal);
this.addSubCommand(this.cmdViewChest);
this.addSubCommand(this.cmdConvertConfig);
@@ -355,6 +359,11 @@ public class FCmdRoot extends FCommand implements CommandExecutor {
fAuditEnabled = true;
}
if (Conf.useStrikeSystem) {
this.addSubCommand(this.cmdStrikes);
fStrikes = true;
}
//Other
if (FactionsPlugin.getInstance().getConfig().getBoolean("Wild.Enabled", false) && !fWildEnabled) {
this.addSubCommand(this.cmdWild);

View File

@@ -0,0 +1,130 @@
package com.massivecraft.factions.cmd.claim;
/**
* Created by FactionsUUID Team
*/
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.cmd.Aliases;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Location;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
public class CmdClaimFill extends FCommand {
public CmdClaimFill() {
// Aliases
this.aliases.addAll(Aliases.claim_claimFill);
// Args
this.optionalArgs.put("limit", String.valueOf(Conf.maxFillClaimCount));
this.optionalArgs.put("faction", "you");
this.requirements = new CommandRequirements.Builder(Permission.CLAIM_FILL)
.playerOnly()
.build();
}
@Override
public void perform(CommandContext context) {
// Args
final int limit = context.argAsInt(0, Conf.maxFillClaimCount);
if (limit > Conf.maxFillClaimCount) {
context.msg(TL.COMMAND_CLAIMFILL_ABOVEMAX, Conf.maxFillClaimCount);
return;
}
final Faction forFaction = context.argAsFaction(2, context.faction);
Location location = context.player.getLocation();
FLocation loc = new FLocation(location);
Faction currentFaction = Board.getInstance().getFactionAt(loc);
if (currentFaction.equals(forFaction)) {
context.msg(TL.CLAIM_ALREADYOWN, forFaction.describeTo(context.fPlayer, true));
return;
}
if (!currentFaction.isWilderness()) {
context.msg(TL.COMMAND_CLAIMFILL_ALREADYCLAIMED);
return;
}
if (!context.fPlayer.isAdminBypassing() && forFaction.getAccess(context.fPlayer, PermissableAction.TERRITORY) != Access.ALLOW) {
context.msg(TL.CLAIM_CANTCLAIM, forFaction.describeTo(context.fPlayer));
return;
}
final double distance = Conf.maxFillClaimDistance;
long startX = loc.getX();
long startZ = loc.getZ();
Set<FLocation> toClaim = new HashSet<>();
Queue<FLocation> queue = new LinkedList<>();
FLocation currentHead;
queue.add(loc);
toClaim.add(loc);
while (!queue.isEmpty() && toClaim.size() <= limit) {
currentHead = queue.poll();
if (Math.abs(currentHead.getX() - startX) > distance || Math.abs(currentHead.getZ() - startZ) > distance) {
context.msg(TL.COMMAND_CLAIMFILL_TOOFAR, distance);
return;
}
addIf(toClaim, queue, currentHead.getRelative(0, 1));
addIf(toClaim, queue, currentHead.getRelative(0, -1));
addIf(toClaim, queue, currentHead.getRelative(1, 0));
addIf(toClaim, queue, currentHead.getRelative(-1, 0));
}
if (toClaim.size() > limit) {
context.msg(TL.COMMAND_CLAIMFILL_PASTLIMIT);
return;
}
if (toClaim.size() > context.faction.getPowerRounded() - context.faction.getLandRounded()) {
context.msg(TL.COMMAND_CLAIMFILL_NOTENOUGHLANDLEFT, forFaction.describeTo(context.fPlayer), toClaim.size());
return;
}
final int limFail = Conf.radiusClaimFailureLimit;
int fails = 0;
for (FLocation currentLocation : toClaim) {
if (!context.fPlayer.attemptClaim(forFaction, currentLocation, true)) {
fails++;
}
if (fails >= limFail) {
context.msg(TL.COMMAND_CLAIMFILL_TOOMUCHFAIL, fails);
return;
}
}
}
private void addIf(Set<FLocation> toClaim, Queue<FLocation> queue, FLocation examine) {
if (Board.getInstance().getFactionAt(examine).isWilderness() && !toClaim.contains(examine)) {
toClaim.add(examine);
queue.add(examine);
}
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_CLAIMFILL_DESCRIPTION;
}
}

View File

@@ -17,9 +17,6 @@ import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
/**
* @author droppinganvil
*/
public class ConvertConfigHandler {
static File savageConfigFile = new File("plugins/Factions/SavageFactions/config.yml");

View File

@@ -1,7 +1,6 @@
package com.massivecraft.factions.cmd.tnt;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.Aliases;
import com.massivecraft.factions.cmd.CommandContext;
@@ -20,7 +19,9 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class CmdTntFill extends FCommand {
@@ -38,6 +39,24 @@ public class CmdTntFill extends FCommand {
.build();
}
public static void removeItems(Inventory inventory, ItemStack item, int toRemove) {
if (toRemove <= 0 || inventory == null || item == null)
return;
for (int i = 0; i < inventory.getSize(); i++) {
ItemStack loopItem = inventory.getItem(i);
if (loopItem == null || !item.isSimilar(loopItem))
continue;
if (toRemove <= 0)
return;
if (toRemove < loopItem.getAmount()) {
loopItem.setAmount(loopItem.getAmount() - toRemove);
return;
}
inventory.clear(i);
toRemove -= loopItem.getAmount();
}
}
@Override
public void perform(CommandContext context) {
if (!FactionsPlugin.instance.getConfig().getBoolean("Tntfill.enabled")) {
@@ -146,24 +165,6 @@ public class CmdTntFill extends FCommand {
}
}
public static void removeItems(Inventory inventory, ItemStack item, int toRemove) {
if (toRemove <= 0 || inventory == null || item == null)
return;
for (int i = 0; i < inventory.getSize(); i++) {
ItemStack loopItem = inventory.getItem(i);
if (loopItem == null || !item.isSimilar(loopItem))
continue;
if (toRemove <= 0)
return;
if (toRemove < loopItem.getAmount()) {
loopItem.setAmount(loopItem.getAmount() - toRemove);
return;
}
inventory.clear(i);
toRemove -= loopItem.getAmount();
}
}
// Counts the item type available in the inventory.
private int inventoryItemCount(Inventory inventory, Material mat) {
int count = 0;

View File

@@ -10,7 +10,6 @@ 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.util.Wait.WaitedTask;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@@ -24,21 +23,18 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
/**
* @author droppinganvil
*/
public class CmdWild extends FCommand implements WaitedTask {
public class CmdWild extends FCommand {
public static HashMap<Player, Integer> waitingTeleport;
public static HashMap<Player, String> teleportRange;
public static HashSet<Player> teleporting;
public static CmdWild instance;
public CmdWild() {
super();
if (instance == null) instance = this;
this.aliases.addAll(Aliases.wild);
this.requirements = new CommandRequirements.Builder(Permission.WILD)
.playerOnly()
.build();
waitingTeleport = new HashMap<>();
teleporting = new HashSet<>();
teleportRange = new HashMap<>();
startWild();
@@ -46,7 +42,7 @@ public class CmdWild extends FCommand implements WaitedTask {
@Override
public void perform(CommandContext context) {
if (!teleportRange.containsKey(context.player)) {
if (!waitingTeleport.containsKey(context.player)) {
context.player.openInventory(new WildGUI(context.player, context.fPlayer).getInventory());
} else {
context.fPlayer.msg(TL.COMMAND_WILD_WAIT);
@@ -54,6 +50,23 @@ public class CmdWild extends FCommand implements WaitedTask {
}
public void startWild() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () -> {
for (Player p : waitingTeleport.keySet()) {
int i = waitingTeleport.get(p) - 1;
if (i > 0) {
if (i != 1) {
p.sendMessage(TL.COMMAND_WILD_WAIT.format((i + " Seconds")));
} else {
p.sendMessage(TL.COMMAND_WILD_WAIT.format((i + " Second")));
}
waitingTeleport.replace(p, i);
} else {
p.sendMessage(TL.COMMAND_WILD_SUCCESS.toString());
waitingTeleport.remove(p);
attemptTeleport(p);
}
}
}, 0L, 20L);
}
public void attemptTeleport(Player p) {
@@ -108,14 +121,4 @@ public class CmdWild extends FCommand implements WaitedTask {
public TL getUsageTranslation() {
return TL.COMMAND_WILD_DESCRIPTION;
}
@Override
public void handleSuccess(Player player) {
attemptTeleport(player);
}
@Override
public void handleFailure(Player player) {
player.sendMessage(TL.COMMAND_WILD_INTERUPTED.toString());
}
}

View File

@@ -3,8 +3,6 @@ package com.massivecraft.factions.cmd.wild;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.FactionGUI;
import com.massivecraft.factions.util.Wait.WaitExecutor;
import com.massivecraft.factions.util.Wait.WaitTask;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
@@ -20,10 +18,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
* @author droppinganvil
*/
//TODO StaticGUI
public class WildGUI implements FactionGUI {
Player player;
FPlayer fplayer;
@@ -41,7 +35,7 @@ public class WildGUI implements FactionGUI {
if (map.containsKey(slot)) {
String zone = map.get(slot);
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));
CmdWild.waitingTeleport.put(player, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait"));
CmdWild.teleportRange.put(player, zone);
fplayer.msg(TL.COMMAND_WILD_WAIT, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait") + " Seconds");
player.closeInventory();

View File

@@ -14,7 +14,7 @@ public class CmdInviteBot extends FCommand {
* @author Driftay
*/
public CmdInviteBot(){
public CmdInviteBot() {
super();
this.aliases.add("invitebot");
}

View File

@@ -4,7 +4,6 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.exceptions.SaberException;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
@@ -19,16 +18,12 @@ import java.util.HashSet;
import java.util.Objects;
import java.util.logging.Level;
/**
* @author droppinganvil
*/
public class Discord {
//We dont want waitingLink to reset during reload so we are going to set it here
public static HashMap<Integer, FPlayer> waitingLink;
public static HashMap<FPlayer, Integer> waitingLinkk;
//We want to track the amount of times setup has been tried and the result may be useful for determining issues
public static HashSet<DiscordSetupAttempt> setupLog;
private static FactionsPlugin plugin;
public static Boolean confUseDiscord;
public static String botToken;
public static String mainGuildID;
@@ -40,6 +35,7 @@ public class Discord {
public static Boolean useEmotes;
public static Emote positive;
public static Emote negative;
private static FactionsPlugin plugin;
public Discord(FactionsPlugin plugin) {
Discord.plugin = plugin;
@@ -65,7 +61,9 @@ public class Discord {
}
private static Boolean startBot() {
if (!Conf.useDiscordSystem) {return false;}
if (!Conf.useDiscordSystem) {
return false;
}
try {
jda = new JDABuilder(AccountType.BOT).setToken(Conf.discordBotToken).buildBlocking();
} catch (LoginException | InterruptedException e) {
@@ -81,11 +79,11 @@ public class Discord {
try {
confUseDiscord = Conf.useDiscordSystem;
botToken = Conf.discordBotToken;
if (jda != null && Conf.leaderRoles || Conf.factionDiscordTags) {
mainGuild = jda.getGuildById(Conf.mainGuildID);
} else {
mainGuild = null;
}
if (jda != null && Conf.leaderRoles || Conf.factionDiscordTags) {
mainGuild = jda.getGuildById(Conf.mainGuildID);
} else {
mainGuild = null;
}
mainGuildID = Conf.mainGuildID;
useDiscord = !botToken.equals("<token here>") && !mainGuildID.equals("<Discord Server ID here>") && confUseDiscord;
roleColor = new java.awt.Color(Conf.factionRoleColor.get(0), Conf.factionRoleColor.get(1), Conf.factionRoleColor.get(2));
@@ -93,13 +91,22 @@ public class Discord {
try {
positive = jda.getEmoteById(Conf.positiveReaction);
negative = jda.getEmoteById(Conf.negativeReaction);
if (positive == null | negative == null) {useEmotes = false;}
if (positive == null | negative == null) {
useEmotes = false;
}
} catch (NumberFormatException e) {
FactionsPlugin.getInstance().getLogger().log(Level.WARNING, "Invalid Emote(s) disabling them.");
useEmotes = false;
}
if (mainGuild != null) {leader = mainGuild.getRoleById(Conf.leaderRole);} else {leader = null;}
} else {useEmotes = false; leader = null;}
if (mainGuild != null) {
leader = mainGuild.getRoleById(Conf.leaderRole);
} else {
leader = null;
}
} else {
useEmotes = false;
leader = null;
}
} catch (NullPointerException e) {
setupLog.add(new DiscordSetupAttempt("Threw an NPE while setting up variables", System.currentTimeMillis()));
}
@@ -114,11 +121,21 @@ public class Discord {
public static String getNicknameString(FPlayer f) {
if (useDiscord) {
String temp = Conf.factionTag;
if (temp.contains("NAME")) { temp = temp.replace("NAME", f.getName()); }
if (temp.contains("DiscordName")) { temp = temp.replace("DiscordName", (f.discordUser() == null) ? (f.getName()) : (f.discordUser().getName())); }
if (temp.contains("FACTION")) { temp = temp.replace("FACTION", f.getFaction().getTag()); }
if (temp.contains("FactionRole")) { temp = temp.replace("FactionRole", f.getRole().getRoleCapitalized()); }
if (temp.contains("FactionRolePrefix")) { temp = temp.replace("FactionRolePrefix", f.getRole().getPrefix()); }
if (temp.contains("NAME")) {
temp = temp.replace("NAME", f.getName());
}
if (temp.contains("DiscordName")) {
temp = temp.replace("DiscordName", (f.discordUser() == null) ? (f.getName()) : (f.discordUser().getName()));
}
if (temp.contains("FACTION")) {
temp = temp.replace("FACTION", f.getFaction().getTag());
}
if (temp.contains("FactionRole")) {
temp = temp.replace("FactionRole", f.getRole().getRoleCapitalized());
}
if (temp.contains("FactionRolePrefix")) {
temp = temp.replace("FactionRolePrefix", f.getRole().getPrefix());
}
return temp;
}
return null;
@@ -141,7 +158,9 @@ public class Discord {
public static Role getRoleFromName(String s) {
if (useDiscord && mainGuild != null) {
for (Role r : mainGuild.getRoles()) {
if (r.getName().equals(s)) {return r;}
if (r.getName().equals(s)) {
return r;
}
}
}
return null;
@@ -154,8 +173,12 @@ public class Discord {
* @return Role generated faction role
*/
public static Role createFactionRole(String s) {
if (!useDiscord) { return null; }
if (mainGuild == null) { return null; }
if (!useDiscord) {
return null;
}
if (mainGuild == null) {
return null;
}
StringBuilder sb = new StringBuilder();
sb.append(Conf.factionRolePrefix);
sb.append(s);
@@ -179,6 +202,7 @@ public class Discord {
/**
* Get the name of the Faction Role that would be generated with the tag
*
* @param tag Faction Name/Tag
* @return Name of would be Role
*/
@@ -207,13 +231,19 @@ public class Discord {
* @param f FPlayer target
*/
public static void resetNick(FPlayer f) {
if (mainGuild == null) { return; }
if (mainGuild.getMember(f.discordUser()) == null) { return; }
if (mainGuild == null) {
return;
}
if (mainGuild.getMember(f.discordUser()) == null) {
return;
}
mainGuild.getController().setNickname(mainGuild.getMember(f.discordUser()), f.discordUser().getName()).queue();
}
public static void changeFactionTag(Faction f, String oldTag) {
if (!useDiscord | mainGuild == null) { return; }
if (!useDiscord | mainGuild == null) {
return;
}
for (FPlayer fp : f.getFPlayers()) {
if (fp.discordSetup() && isInMainGuild(fp.discordUser())) {
try {
@@ -225,7 +255,9 @@ public class Discord {
mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(getRoleFromName(oldTag))).queue();
mainGuild.getController().addSingleRoleToMember(m, Objects.requireNonNull(createFactionRole(f.getTag()))).queue();
}
} catch (HierarchyException e) {System.out.print(e.getMessage());}
} catch (HierarchyException e) {
System.out.print(e.getMessage());
}
}
}

View File

@@ -93,7 +93,8 @@ public class DiscordListener extends ListenerAdapter {
prefix = ".";
}
String content = event.getMessage().getContentRaw();
if (!content.startsWith(prefix) && !content.startsWith(event.getGuild().getSelfMember().getAsMention())) return;
if (!content.startsWith(prefix) && !content.startsWith(event.getGuild().getSelfMember().getAsMention()))
return;
if (content.startsWith(prefix + "help") || content.startsWith(event.getGuild().getSelfMember().getAsMention() + " help")) {
this.help(event, content, prefix);
} else if (content.startsWith(prefix + "stats")) {
@@ -124,7 +125,8 @@ public class DiscordListener extends ListenerAdapter {
this.settings(event);
}
} catch (PermissionException exception) {
if (!event.getGuild().getSelfMember().hasPermission(event.getChannel(), Permission.MESSAGE_READ, Permission.MESSAGE_WRITE)) return;
if (!event.getGuild().getSelfMember().hasPermission(event.getChannel(), Permission.MESSAGE_READ, Permission.MESSAGE_WRITE))
return;
event.getChannel().sendMessage((":x: Missing permission, `" + exception.getPermission().toString() + "`")).queue();
}
}
@@ -135,7 +137,8 @@ public class DiscordListener extends ListenerAdapter {
private Faction getFactionWithWarning(TextChannel textChannel) {
Faction faction = this.getFaction(textChannel.getGuild());
if (faction == null) textChannel.sendMessage((":x: This guild isn't linked to a faction, use `/f setguild " + textChannel.getGuild().getId() + "` in game")).queue();
if (faction == null)
textChannel.sendMessage((":x: This guild isn't linked to a faction, use `/f setguild " + textChannel.getGuild().getId() + "` in game")).queue();
return faction;
}
@@ -342,7 +345,7 @@ public class DiscordListener extends ListenerAdapter {
private void setNotifyFormat(GuildMessageReceivedEvent event, String content, String prefix) {
Faction faction = this.getFactionWithWarning(event.getChannel());
if (faction == null)return;
if (faction == null) return;
if (cantAccessPermissionWithWarning(event.getChannel(), event.getMember())) return;
if (!content.contains(" ")) {
event.getChannel().sendMessage((":x: Usage, `" + prefix + "setnotifyformat <format>` (%type%)")).queue();

View File

@@ -1,8 +1,5 @@
package com.massivecraft.factions.discord;
/**
* @author droppinganvil
*/
public class DiscordSetupAttempt {
private Boolean success;
private String reason;
@@ -10,8 +7,9 @@ public class DiscordSetupAttempt {
/**
* Constructor used when an attempt fails
*
* @param reason String reason for the attempt failing
* @param time Long current system time in millis
* @param time Long current system time in millis
*/
public DiscordSetupAttempt(String reason, Long time) {
this.success = false;
@@ -21,6 +19,7 @@ public class DiscordSetupAttempt {
/**
* Constructor used for successful attempts
*
* @param time Long Current system time in millis
*/
public DiscordSetupAttempt(Long time) {
@@ -31,30 +30,43 @@ public class DiscordSetupAttempt {
/**
* Get if this attempt to setup the Discord bot was successful
*
* @return Boolean success
*/
public Boolean getSuccess() {return this.success;}
public Boolean getSuccess() {
return this.success;
}
/**
* Get the reason for the setup failing (If it was successful it will return null)
*
* @return String reason
*/
public String getReason() {return this.reason;}
public String getReason() {
return this.reason;
}
/**
* Get the time this setup was attempted
*
* @return Long initialTime
*/
public Long getInitialTime() {return this.initialTime;}
public Long getInitialTime() {
return this.initialTime;
}
/**
* Get the difference of time between when attempted and present time
*
* @return Long time difference in milliseconds
*/
public Long getDifferentialTime() {return System.currentTimeMillis()-initialTime;}
public Long getDifferentialTime() {
return System.currentTimeMillis() - initialTime;
}
/**
* Get the difference in time between when attempted and present time formatted MS,Seconds,Minutes,Hours,Years
*
* @return String with formatted time difference
*/
public String getDifferentialFormatted() {
@@ -64,25 +76,25 @@ public class DiscordSetupAttempt {
if (inProcessTime >= 1000) {
timeIndex++;
//Seconds
inProcessTime = inProcessTime/Integer.toUnsignedLong(1000);
inProcessTime = inProcessTime / Integer.toUnsignedLong(1000);
if (inProcessTime >= 60) {
timeIndex++;
//Minutes
inProcessTime = inProcessTime/Integer.toUnsignedLong(60);
inProcessTime = inProcessTime / Integer.toUnsignedLong(60);
if (inProcessTime >= 60) {
timeIndex++;
//Hours
inProcessTime = inProcessTime/Integer.toUnsignedLong(60);
inProcessTime = inProcessTime / Integer.toUnsignedLong(60);
if (inProcessTime >= 24) {
timeIndex++;
//Days
inProcessTime = inProcessTime/Integer.toUnsignedLong(24);
inProcessTime = inProcessTime / Integer.toUnsignedLong(24);
//Skipping months
if (inProcessTime >= 365) {
timeIndex++;
//Years
//If someone really has 100% uptime in a year idek
inProcessTime = inProcessTime/Integer.toUnsignedLong(365);
inProcessTime = inProcessTime / Integer.toUnsignedLong(365);
}
}
}
@@ -94,12 +106,24 @@ public class DiscordSetupAttempt {
sb.append(" ");
String s = "";
switch (timeIndex) {
case 0: s = "MS"; break;
case 1: s = "Seconds"; break;
case 2: s = "Minutes"; break;
case 3: s = "Hours"; break;
case 4: s = "Days"; break;
case 5: s = "Years"; break;
case 0:
s = "MS";
break;
case 1:
s = "Seconds";
break;
case 2:
s = "Minutes";
break;
case 3:
s = "Hours";
break;
case 4:
s = "Days";
break;
case 5:
s = "Years";
break;
}
sb.append(s);
sb.append(" ago");

View File

@@ -5,8 +5,6 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import mkremins.fanciful.FancyMessage;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.TextChannel;
@@ -19,12 +17,10 @@ import net.dv8tion.jda.webhook.WebhookMessage;
import net.dv8tion.jda.webhook.WebhookMessageBuilder;
import org.bukkit.ChatColor;
import javax.security.auth.login.LoginException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
public class FactionChatHandler extends ListenerAdapter {
@@ -69,7 +65,9 @@ public class FactionChatHandler extends ListenerAdapter {
while (i <= x.size() - 1) {
mention.append(" ").append(x.get(i));
ii.add(i);
if (mention.toString().contains("#")) {break;}
if (mention.toString().contains("#")) {
break;
}
i++;
}
if (mention.toString().contains("#")) {

View File

@@ -1,166 +0,0 @@
package com.massivecraft.factions.duels;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* @author droppinganvil
*/
public class Duel {
private Faction faction1;
private Faction faction2;
private HashMap<FPlayer, Boolean> eliminationMap;
private HashMap<FPlayer, Location> oldLocMap;
public Duel(Faction faction1, Faction faction2) {
this.faction1 = faction1;
this.faction2 = faction2;
this.eliminationMap = new HashMap<>();
this.oldLocMap = new HashMap<>();
}
public Faction getFaction1() {
return faction1;
}
public Faction getFaction2() {
return faction2;
}
public Set<FPlayer> getEliminated() {
Set<FPlayer> list = new HashSet<>();
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
if (entry.getValue()) list.add(entry.getKey());
}
return list;
}
public Set<FPlayer> getEliminated(Faction faction) {
Set<FPlayer> list = new HashSet<>();
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
if (entry.getValue() && entry.getKey().getFaction().equals(faction)) list.add(entry.getKey());
}
return list;
}
public Set<FPlayer> getRemaining() {
Set<FPlayer> list = new HashSet<>();
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
if (!entry.getValue()) list.add(entry.getKey());
}
return list;
}
public Set<FPlayer> getRemaining(Faction faction) {
Set<FPlayer> list = new HashSet<>();
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
if (!entry.getValue() && entry.getKey().getFaction().equals(faction)) list.add(entry.getKey());
}
return list;
}
public void handleExit(FPlayer fplayer, Boolean death) {
if (death) {
eliminationMap.replace(fplayer, false, true);
fplayer.getPlayer().spigot().respawn();
}
fplayer.getPlayer().teleport(oldLocMap.get(fplayer), PlayerTeleportEvent.TeleportCause.PLUGIN);
for (Map.Entry<Integer, ItemStack> entry : fplayer.getOldInv().entrySet()) {
fplayer.getPlayer().getInventory().setItem(entry.getKey(), entry.getValue());
}
fplayer.setOldInv(null);
fplayer.setInDuel(false);
if (getClearWinner() != null) {
handleEnd();
}
}
public void handleEnd() {
if (FactionsPlugin.getInstance().getConfig().getBoolean("Duels.Broadcast.BroadcastResult.Enabled")) {
Bukkit.broadcastMessage(getEndMessage());
}
for (FPlayer fp : getRemaining()) {
handleExit(fp, false);
}
Map.Entry<Faction, Faction> fvf = (Map.Entry<Faction, Faction>) Duels.duelQueue.entrySet().toArray()[0];
if (fvf != null) {
Duels.duel = new Duel(fvf.getKey(), fvf.getValue());
Duels.preparingDuel = true;
Duels.acceptedDuel.clear();
Duels.sendRequests(faction1);
Duels.sendRequests(faction2);
}
}
public Faction getClearWinner() {
Set<FPlayer> team1r = getRemaining(faction1);
Set<FPlayer> team2r = getRemaining(faction2);
if (team1r.isEmpty() && !team2r.isEmpty()) return faction2;
if (team2r.isEmpty() && !team1r.isEmpty()) return faction1;
return null;
}
private Faction getWinning(Set<FPlayer> s1, Set<FPlayer> s2) {
if (s1.size() > s2.size()) return faction1;
return faction2;
}
public String getEndMessage() {
String temp;
Set<FPlayer> team1r = getRemaining(faction1);
Set<FPlayer> team2r = getRemaining(faction2);
if (team1r.size() == team2r.size()) {
//Tied
temp = FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastResult.FormatTie");
} else {
temp = FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastResult.Format");
}
Faction winner = getWinning(team1r, team2r);
return ChatColor.translateAlternateColorCodes('&', temp
.replace("{team1_tag}", faction1.getTag())
.replace("{team2_tag}", faction2.getTag())
.replace("{remaining}", String.valueOf(getRemaining(winner).size()))
.replace("{tag}", winner.getTag())
.replace("{losers_tag}", winner == faction1 ? faction2.getTag() : faction1.getTag()));
}
public String getDeathMessage(Player player) {
return ChatColor.translateAlternateColorCodes('&',
FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastKill.Format")
.replace("{team1_remaining}", String.valueOf(getRemaining(getFaction1()).size()))
.replace("{team2_remaining}", String.valueOf(getRemaining(getFaction2()).size()))
.replace("{team1_eliminated}", String.valueOf(getEliminated(getFaction1()).size()))
.replace("{team2_eliminated}", String.valueOf(getEliminated(getFaction2()).size()))
.replace("{team1_tag}", faction1.getTag())
.replace("{team2_tag}", faction2.getTag())
.replace("{eliminated_name}", player.getName()));
}
public HashMap<FPlayer, Location> getLocMap() {
return oldLocMap;
}
public void addFPlayer(FPlayer fp) {
oldLocMap.put(fp, fp.getPlayer().getLocation());
eliminationMap.put(fp, false);
}
public void start() {
Duels.preparingDuel = false;
for (FPlayer fplayer : Duels.acceptedDuel) {
}
}
}

View File

@@ -1,73 +0,0 @@
package com.massivecraft.factions.duels;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author droppinganvil
*/
public class Duels {
public static boolean enabled = true;
public static long targetTimeout = Integer.toUnsignedLong(FactionsPlugin.getInstance().getConfig().getInt("Duels.WaitTime")) * 1000;
public static ConcurrentHashMap<FPlayer, Long> guiMap = new ConcurrentHashMap<>();
public static HashSet<FPlayer> acceptedDuel = new HashSet<>();
public static HashMap<Faction, Faction> duelQueue = new HashMap<>();
public static Boolean preparingDuel = false;
public static Duel duel;
public static HashSet<SpawnPoint> spawnPoints = new HashSet<>();
private static void startGUITask() {
Bukkit.getScheduler().scheduleAsyncRepeatingTask(FactionsPlugin.instance, () -> {
for (Map.Entry<FPlayer, Long> entry : guiMap.entrySet()) {
if (System.currentTimeMillis() - entry.getValue() <= targetTimeout) RequestGUI.closeSync(true, entry.getKey());
}
}, 0L, 20L);
}
public void setup() {
enabled = FactionsPlugin.getInstance().getConfig().getBoolean("Duels.Enabled", true);
if (enabled) startGUITask();
loadSpawnPoints();
}
public void loadSpawnPoints() {
spawnPoints.clear();
loadTeamSpawnPoints(1);
loadTeamSpawnPoints(2);
}
public void loadTeamSpawnPoints(Integer i) {
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
String team = "Team" + i;
for (String key : config.getConfigurationSection("Duels.SpawnPoints." + team).getKeys(false)) {
spawnPoints.add(new SpawnPoint (i, getSpawnPointLocation(team, key, config), Integer.parseInt(key)));
}
}
public Location getSpawnPointLocation(String team, String key, FileConfiguration config) {
String[] locKeyArray = config.getString("Duels.SpawnPoints." + team + "." + key).split(",");
return new Location(Bukkit.getWorld(locKeyArray[0]), Double.parseDouble(locKeyArray[1]), Double.parseDouble(locKeyArray[2]), Double.parseDouble(locKeyArray[3]));
}
public static void sendRequests(Faction faction) {
for (FPlayer fplayer : faction.getFPlayers()) {
if (fplayer.isOnline()) {
fplayer.getPlayer().openInventory(RequestGUI.inv);
guiMap.put(fplayer, System.currentTimeMillis());
}
}
}
}

View File

@@ -1,121 +0,0 @@
package com.massivecraft.factions.duels;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.StaticGUI;
import com.massivecraft.factions.util.Sync.SyncExecutor;
import com.massivecraft.factions.util.Sync.SyncTask;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
/**
* @author droppinganvil
*/
public class RequestGUI implements StaticGUI {
private static ItemStack fillItem;
private static RequestResponse fallback;
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
public static HashMap<Integer, RequestResponse> responseMap = new HashMap<>();
public static Inventory inv;
private static RequestGUI instance;
public static RequestGUI getInstance() {
return instance;
}
public RequestGUI() {
if (instance == null) {
instance = this;
}
if (fillItem == null) {
fillItem = XMaterial.matchXMaterial(config.getString("Duels.GUI.Fill-Item.Material")).get().parseItem();
ItemMeta fillMeta = fillItem.getItemMeta();
fillMeta.setDisplayName(" ");
fillItem.setItemMeta(fillMeta);
}
if (fallback == null) {
try {
fallback = RequestResponse.valueOf(config.getString("Duels.GUI.Fill-Item.Response"));
} catch (EnumConstantNotPresentException e) {
FactionsPlugin.getInstance().getLogger().log(Level.WARNING, "FallbackResponse is invalid! Using Ignored");
fallback = RequestResponse.Ignored;
}
}
if (inv == null) {
inv = Bukkit.createInventory(this, 27, "Join Faction Duel");
int fi = 0;
while (fi != 26) {
inv.setItem(fi, fillItem);
fi++;
}
for (String key : config.getConfigurationSection("Duels.GUI.Items").getKeys(false)) {
ItemStack item = XMaterial.matchXMaterial(config.getString("Duels.GUI.Items." + key + ".Material")).get().parseItem();
ItemMeta itemMeta = item.getItemMeta();
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Duels.GUI.Items." + key + ".Name")));
List<String> lore = new ArrayList<>();
for (String loreEntry : config.getStringList("Duels.GUI.Items." + key + ".Lore")) {
lore.add(ChatColor.translateAlternateColorCodes('&', loreEntry));
}
itemMeta.setLore(lore);
item.setItemMeta(itemMeta);
int slot = Integer.parseInt(key);
responseMap.put(slot, RequestResponse.valueOf(config.getString("Duels.GUI.Items." + key + ".Response")));
inv.setItem(slot, item);
}
}
}
@Override
public void click(int slot, ClickType action, Player player) {
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
if (action != ClickType.LEFT) {
processResponse(fallback, fPlayer);
} else {
processResponse(responseMap.get(slot), fPlayer);
}
}
public static void processResponse(RequestResponse response, FPlayer fPlayer) {
switch (response) {
case Accepted:
fPlayer.getFaction().broadcast(TL.DUEL_REQUEST_ACCEPTED_PLAYER.format(fPlayer.getNameAndTitle()));
Duels.acceptedDuel.add(fPlayer);
close(false, fPlayer);
break;
case Rejected:
fPlayer.getFaction().broadcast(TL.DUEL_REQUEST_REJECTED_PLAYER.format(fPlayer.getNameAndTitle()));
close(false, fPlayer);
break;
}
}
public static void close(Boolean reject, FPlayer fPlayer) {
if (reject) {
processResponse(RequestResponse.Rejected, fPlayer);
}
fPlayer.getPlayer().closeInventory();
Duels.guiMap.remove(fPlayer);
}
public static void closeSync(Boolean reject, FPlayer fPlayer) {
SyncExecutor.taskQueue.add(new SyncTask(RequestGUI.getInstance(), "close", reject, fPlayer));
}
@Override
public Inventory getInventory() {
return inv;
}
}

View File

@@ -1,10 +0,0 @@
package com.massivecraft.factions.duels;
/**
* @author droppinganvil
*/
public enum RequestResponse {
Accepted,
Rejected,
Ignored,
}

View File

@@ -1,27 +0,0 @@
package com.massivecraft.factions.duels;
import org.bukkit.Location;
public class SpawnPoint {
private Integer team;
private Integer id;
private Location location;
public SpawnPoint(Integer team, Location location, Integer id) {
this.team = team;
this.location = location;
this.id = id;
}
public Integer getTeam() {
return team;
}
public Location getLocation() {
return location;
}
public Integer getID() {
return id;
}
}

View File

@@ -76,32 +76,40 @@ public class PowerLossEvent extends FactionPlayerEvent implements Cancellable {
/**
* Gets the configured damage to a players individual power on death
*
* @return power to be lost as a Double.
*/
public double getDefaultPowerLost() {return Conf.powerPerDeath;}
public double getDefaultPowerLost() {
return Conf.powerPerDeath;
}
/**
* Gets the variable power lost. Custom power ignored when less than or equal to zero.
*
* @return custom power to be lost as a Double.
*/
public double getCustomPowerLost() {return this.modified;}
public double getCustomPowerLost() {
return this.modified;
}
/**
* Sets the variable power lost. Custom power ignored when less than or equal to zero.
*
* @param loss Double amount for the custom power loss to be set to.
*/
public void setCustomPowerLost(Double loss) {modified = loss;}
public void setCustomPowerLost(Double loss) {
modified = loss;
}
/**
* Determines if custom power is to be used.
*
* @return If custom power is to be used as a boolean.
*/
public boolean usingCustomPower() {
if (modified > 0) {
return true;
}
return false;
return modified > 0;
}
@Override
public boolean isCancelled() {
return cancelled;

View File

@@ -3,8 +3,6 @@ package com.massivecraft.factions.event;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
import com.massivecraft.factions.zcore.persist.MemoryFPlayers;
import org.bukkit.event.Cancellable;
/**
@@ -25,6 +23,7 @@ public class PowerRegenEvent extends FactionPlayerEvent implements Cancellable {
/**
* Get the amount of power this player will regen by default
*
* @return power amount gained as a Double.
*/
public double getDefaultPowerGained() {
@@ -33,26 +32,30 @@ public class PowerRegenEvent extends FactionPlayerEvent implements Cancellable {
/**
* Get the amount of custom power this player will gain. Ignored if less than or equal to 0.
*
* @return Custom power as a double
*/
public double getCustomPower() {return modified;}
/**
* Get if we will be using the custom power gain instead of default.
* @return If we will process the event custom returned as a Boolean.
*/
public boolean usingCustomPower() {
if (modified > 0) {
return true;
}
return false;
public double getCustomPower() {
return modified;
}
/**
* Set the custom power gain for this event.
*
* @param gain Amount of power to be added to player.
*/
public void setCustomPower(Double gain) {modified = gain;}
public void setCustomPower(Double gain) {
modified = gain;
}
/**
* Get if we will be using the custom power gain instead of default.
*
* @return If we will process the event custom returned as a Boolean.
*/
public boolean usingCustomPower() {
return modified > 0;
}
@Override
public boolean isCancelled() {

View File

@@ -34,6 +34,7 @@ import java.util.List;
public class Worldguard {
private static Worldguard instance;
/**
* @author FactionsUUID Team
*/
@@ -53,8 +54,6 @@ public class Worldguard {
private StateFlag breakFlag;
private boolean initialized = false;
private static Worldguard instance;
public Worldguard() {
instance = this;
@@ -72,16 +71,20 @@ public class Worldguard {
Method getInstanceMethod = worldGuardClass.getMethod("getInstance");
worldGuard = getInstanceMethod.invoke(null);
FactionsPlugin.instance.log("Found WorldGuard 7+");
} catch (Exception ex) { FactionsPlugin.instance.log("Found WorldGuard <7"); }
} catch (Exception ex) {
FactionsPlugin.instance.log("Found WorldGuard <7");
}
}
}
public static Worldguard getInstance() {
return instance;
}
public boolean isEnabled() {
return worldGuardPlugin != null;
}
public static Worldguard getInstance() { return instance; }
protected RegionAssociable getAssociable(Player player) {
RegionAssociable associable;
if (player == null) {
@@ -173,9 +176,9 @@ public class Worldguard {
try {
if (worldAdaptMethod != null) {
Object worldEditWorld = worldAdaptMethod.invoke(null, world);
regionManager = (RegionManager)regionContainerGetMethod.invoke(regionContainer, worldEditWorld);
regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, worldEditWorld);
} else {
regionManager = (RegionManager)regionContainerGetMethod.invoke(regionContainer, world);
regionManager = (RegionManager) regionContainerGetMethod.invoke(regionContainer, world);
}
} catch (Exception ex) {
FactionsPlugin.instance.log("An error occurred looking up a WorldGuard RegionManager");
@@ -190,7 +193,7 @@ public class Worldguard {
Object vector = vectorConstructorAsAMethodBecauseWhyNot == null
? vectorConstructor.newInstance(location.getX(), location.getY(), location.getZ())
: vectorConstructorAsAMethodBecauseWhyNot.invoke(null, location.getX(), location.getY(), location.getZ());
return (ApplicableRegionSet)regionManagerGetMethod.invoke(regionManager, vector);
return (ApplicableRegionSet) regionManagerGetMethod.invoke(regionManager, vector);
} catch (Exception ex) {
FactionsPlugin.instance.log("An error occurred looking up a WorldGuard ApplicableRegionSet");
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
@@ -201,7 +204,8 @@ public class Worldguard {
/**
* Used to check WorldGuard to see if a Player has permission to place a block.
* @param player player in question.
*
* @param player player in question.
* @param location Location of block placed.
* @return
*/
@@ -212,8 +216,9 @@ public class Worldguard {
Object query = createQueryMethod.invoke(regionContainer);
if (locationAdaptMethod != null) {
Object loc = locationAdaptMethod.invoke(null, location);
return (boolean)regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{buildFlag});
} else return (boolean)regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag});
return (boolean) regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{buildFlag});
} else
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{buildFlag});
} catch (Exception ex) {
FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
FactionsPlugin.instance.log("WorldGuard 7.0.0 support is currently in BETA. Please be careful!");
@@ -224,7 +229,8 @@ public class Worldguard {
/**
* Used to check WorldGuard to see if a player has permission to break a block.
* @param player player in question.
*
* @param player player in question.
* @param location Location of block broken.
* @return
*/
@@ -236,7 +242,8 @@ public class Worldguard {
if (locationAdaptMethod != null) {
Object loc = locationAdaptMethod.invoke(null, location);
return (boolean) regionQueryTestStateMethod.invoke(query, loc, getAssociable(player), new StateFlag[]{breakFlag});
} else return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag});
} else
return (boolean) regionQueryTestStateMethod.invoke(query, location, getAssociable(player), new StateFlag[]{breakFlag});
} catch (Exception ex) {
FactionsPlugin.instance.log("An error occurred querying WorldGuard! Report this issue to SF Developers!");
@@ -246,10 +253,13 @@ public class Worldguard {
return true;
}
public boolean checkForRegionsInChunk(FLocation floc) { return checkForRegionsInChunk(floc.getChunk()); }
public boolean checkForRegionsInChunk(FLocation floc) {
return checkForRegionsInChunk(floc.getChunk());
}
/**
* Used for checking if regions are located in a chunk
*
* @param chunk Chunk in question.
* @return
*/
@@ -284,7 +294,8 @@ public class Worldguard {
/**
* General check for WorldGuard region @ location.
* @param player player in question.
*
* @param player player in question.
* @param location Location of block broken.
* @return
*/

View File

@@ -493,45 +493,39 @@ public class FactionsBlockListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
//If there is an error its much safer to not allow the block to be broken
try {
Block block = event.getBlock();
Block block = event.getBlock();
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
event.setCancelled(true);
return;
}
FPlayer fme = FPlayers.getInstance().getByPlayer(event.getPlayer());
if (fme == null || !fme.hasFaction()) return;
if (isSpawner) {
Access access = fme.getFaction().getAccess(fme, PermissableAction.SPAWNER);
if (access != Access.ALLOW && fme.getRole() != Role.LEADER) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "mine spawners");
}
}
if (isSpawner && !fme.isAdminBypassing()) {
ItemStack item = new ItemStack(block.getType(), 1, block.getData());
if (at != null && at.isNormal()) {
FPlayer fplayer = FPlayers.getInstance().getByPlayer(event.getPlayer());
if (fplayer != null) {
BlockState state = block.getState();
if (state instanceof CreatureSpawner) {
CreatureSpawner spawner = (CreatureSpawner) state;
item.setDurability(spawner.getSpawnedType().getTypeId());
}
handleSpawnerUpdate(at, event.getPlayer(), item, LogTimer.TimerSubType.SPAWNER_BREAK);
}
}
}
} catch (Exception e) {
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
event.setCancelled(true);
e.printStackTrace();
return;
}
FPlayer fme = FPlayers.getInstance().getByPlayer(event.getPlayer());
if (fme == null || !fme.hasFaction()) return;
if (isSpawner) {
Access access = fme.getFaction().getAccess(fme, PermissableAction.SPAWNER);
if (access != Access.ALLOW && fme.getRole() != Role.LEADER) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "mine spawners");
}
}
if (isSpawner && !fme.isAdminBypassing()) {
ItemStack item = new ItemStack(block.getType(), 1, block.getData());
if (at != null && at.isNormal()) {
FPlayer fplayer = FPlayers.getInstance().getByPlayer(event.getPlayer());
if (fplayer != null) {
BlockState state = block.getState();
if (state instanceof CreatureSpawner) {
CreatureSpawner spawner = (CreatureSpawner) state;
item.setDurability(spawner.getSpawnedType().getTypeId());
}
handleSpawnerUpdate(at, event.getPlayer(), item, LogTimer.TimerSubType.SPAWNER_BREAK);
}
}
}
}

View File

@@ -7,7 +7,7 @@ import com.massivecraft.factions.util.MiscUtil;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.TravelAgent;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.entity.minecart.ExplosiveMinecart;
@@ -20,7 +20,6 @@ import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.projectiles.ProjectileSource;
@@ -155,16 +154,17 @@ public class FactionsEntityListener implements Listener {
// Run the check for a player
if (damager instanceof Player) {
// Generate the action message.
String entityAction;
if (damagee.getType() == EntityType.ITEM_FRAME) {
entityAction = "item frames";
} else {
entityAction = "armor stands";
Player player = (Player) damager;
Material material = null;
switch (sub.getEntity().getType()) {
case ITEM_FRAME:
material = Material.ITEM_FRAME;
break;
case ARMOR_STAND:
material = Material.ARMOR_STAND;
break;
}
if (!FactionsBlockListener.playerCanBuildDestroyBlock((Player) damager, damagee.getLocation(), "destroy " + entityAction, false)) {
if (material != null && !FactionsBlockListener.playerCanBuildDestroyBlock(player, damagee.getLocation(), "destroy " + material.toString().toLowerCase(), false)) {
event.setCancelled(true);
}
} else {
@@ -240,7 +240,7 @@ public class FactionsEntityListener implements Listener {
UUID uuid = player.getUniqueId();
if (FactionsPlugin.getInstance().getStuckMap().containsKey(uuid))
FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_STUCK_CANCELLED);
FactionsPlugin.getInstance().getStuckMap().remove(uuid);
FactionsPlugin.getInstance().getStuckMap().remove(uuid);
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
@@ -292,7 +292,7 @@ public class FactionsEntityListener implements Listener {
if (faction.noExplosionsInTerritory() || (faction.isPeaceful() && Conf.peacefulTerritoryDisableBoom))
return false;
// faction is peaceful and has explosions set to disabled
// faction is peaceful and has explosions set to disabled
boolean online = faction.hasPlayersOnline();
@@ -682,8 +682,8 @@ public class FactionsEntityListener implements Listener {
Player victim = (Player) e.getEntity();
FPlayer fdamager = FPlayers.getInstance().getByPlayer(damager);
FPlayer fvictim = FPlayers.getInstance().getByPlayer(victim);
if(damager == victim) return;
if(fdamager == fvictim) return;
if (damager == victim) return;
if (fdamager == fvictim) return;
if (fvictim.getRelationTo(fdamager) == Relation.TRUCE) {
fdamager.msg(TL.PLAYER_PVP_CANTHURT, fvictim.describeTo(fdamager));
e.setCancelled(true);

View File

@@ -1,7 +1,6 @@
package com.massivecraft.factions.listeners;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.Location;
import org.bukkit.Material;

View File

@@ -18,8 +18,10 @@ import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.*;
import com.massivecraft.factions.util.Wait.WaitExecutor;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.util.FactionGUI;
import com.massivecraft.factions.util.VisualizeUtil;
import com.massivecraft.factions.util.XMaterial;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
@@ -51,12 +53,14 @@ import java.util.logging.Level;
public class FactionsPlayerListener implements Listener {
public static Set<FLocation> corners;
public static BukkitTask positionTask = null;
public static Map<UUID, Location> lastLocations = new HashMap<>();
/**
* @author FactionsUUID Team
*/
HashMap<Player, Boolean> fallMap = new HashMap<>();
public static Set<FLocation> corners;
// Holds the next time a player can have a map shown.
private HashMap<UUID, Long> showTimes = new HashMap<>();
@@ -223,7 +227,6 @@ public class FactionsPlayerListener implements Listener {
return CheckPlayerAccess(player, me, loc, myFaction, otherFaction.getAccess(me, action), action, Conf.territoryPainBuild);
}
public static boolean preventCommand(String fullCmd, Player player) {
if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty() && Conf.permanentFactionMemberDenyCommands.isEmpty() && Conf.warzoneDenyCommands.isEmpty())) {
return false;
@@ -259,7 +262,7 @@ public class FactionsPlayerListener implements Listener {
Relation rel = at.getRelationTo(me);
if (at.isNormal() && rel.isAlly() && !Conf.territoryAllyDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryAllyDenyCommands.iterator())) {
me.msg(TL.PLAYER_COMMAND_ALLY, fullCmd);
return false;
return true;
}
if (at.isNormal() && rel.isNeutral() && !Conf.territoryNeutralDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator())) {
@@ -400,6 +403,8 @@ public class FactionsPlayerListener implements Listener {
case YELLOW_SHULKER_BOX:
case FURNACE:
case BLAST_FURNACE:
case SMOKER:
case DROPPER:
case DISPENSER:
case ENCHANTING_TABLE:
@@ -439,6 +444,8 @@ public class FactionsPlayerListener implements Listener {
case ENCHANTING_TABLE:
case DROPPER:
case FURNACE:
case BLAST_FURNACE:
case SMOKER:
case HOPPER:
case ANVIL:
case CHIPPED_ANVIL:
@@ -637,9 +644,6 @@ public class FactionsPlayerListener implements Listener {
return (result.length() == 3 ? result + "0" : result) + "/hrs ago";
}
public static BukkitTask positionTask = null;
public static Map<UUID, Location> lastLocations = new HashMap<>();
public void startPositionCheck() {
positionTask = Bukkit.getScheduler().runTaskTimer(FactionsPlugin.instance, () -> {
if (Bukkit.getOnlinePlayers().size() > 0) {
@@ -818,7 +822,7 @@ public class FactionsPlayerListener implements Listener {
Material type;
if (event.getItem() != null) {
// Convert 1.8 Material Names -> 1.14
// Convert 1.8 Material Names -> 1.15
type = XMaterial.matchXMaterial(event.getItem().getType().toString()).get().parseMaterial();
} else {
type = null;
@@ -919,7 +923,6 @@ public class FactionsPlayerListener implements Listener {
}
@EventHandler
public void onLogoutMove(PlayerMoveEvent e) {
LogoutHandler handler = LogoutHandler.getByName(e.getPlayer().getName());
@@ -933,7 +936,11 @@ public class FactionsPlayerListener implements Listener {
handler.cancelLogout(e.getPlayer());
e.getPlayer().sendMessage(String.valueOf(TL.COMMAND_LOGOUT_MOVED));
}
WaitExecutor.handleAction(e.getPlayer());
if (CmdWild.waitingTeleport.containsKey(e.getPlayer())) {
CmdWild.waitingTeleport.remove(e.getPlayer());
FPlayers.getInstance().getByPlayer(e.getPlayer()).msg(TL.COMMAND_WILD_INTERUPTED);
}
}
@EventHandler
@@ -945,7 +952,10 @@ public class FactionsPlayerListener implements Listener {
handler.cancelLogout(player);
player.sendMessage(String.valueOf(TL.COMMAND_LOGOUT_DAMAGE_TAKEN));
}
WaitExecutor.handleAction(player);
if (CmdWild.waitingTeleport.containsKey(player)) {
CmdWild.waitingTeleport.remove(player);
FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_WILD_INTERUPTED);
}
if (CmdWild.teleporting.contains(player)) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("Wild.FallDamage") && e.getCause() == EntityDamageEvent.DamageCause.FALL) {
e.setCancelled(true);
@@ -973,15 +983,11 @@ public class FactionsPlayerListener implements Listener {
event.setCancelled(true);
((FactionGUI) event.getClickedInventory().getHolder()).onClick(event.getRawSlot(), event.getClick());
}
if (event.getClickedInventory().getHolder() instanceof StaticGUI) {
event.setCancelled(true);
((StaticGUI) event.getClickedInventory().getHolder()).click(event.getRawSlot(), event.getClick(), (Player) event.getWhoClicked());
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerMoveGUI(InventoryDragEvent event) {
if (event.getInventory().getHolder() instanceof FactionGUI || event.getInventory().getHolder() instanceof StaticGUI) event.setCancelled(true);
if (event.getInventory().getHolder() instanceof FactionGUI) event.setCancelled(true);
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)

View File

@@ -13,6 +13,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.*;
public class MissionGUI implements FactionGUI {
@@ -56,7 +57,9 @@ public class MissionGUI implements FactionGUI {
}
}
}
} else if (plugin.getConfig().getBoolean("Randomization.Enabled")) {return;}
} else if (plugin.getConfig().getBoolean("Randomization.Enabled")) {
return;
}
if (configurationSection == null) return;
int max = plugin.getConfig().getInt("MaximumMissionsAllowedAtOnce");
@@ -64,7 +67,8 @@ public class MissionGUI implements FactionGUI {
fPlayer.msg(TL.MISSION_MISSION_MAX_ALLOWED, max);
return;
}
if (missionName.equals(plugin.color(FactionsPlugin.getInstance().getConfig().getString("Randomization.Start-Item.Disallowed.Name")))) return;
if (missionName.equals(plugin.color(FactionsPlugin.getInstance().getConfig().getString("Randomization.Start-Item.Disallowed.Name"))))
return;
if (fPlayer.getFaction().getMissions().containsKey(missionName)) {
fPlayer.msg(TL.MISSION_MISSION_ACTIVE);
@@ -73,7 +77,7 @@ public class MissionGUI implements FactionGUI {
ConfigurationSection section = configurationSection.getConfigurationSection(missionName);
if (section == null) return;
if(FactionsPlugin.getInstance().getConfig().getBoolean("DenyMissionsMoreThenOnce")) {
if (FactionsPlugin.getInstance().getConfig().getBoolean("DenyMissionsMoreThenOnce")) {
if (fPlayer.getFaction().getCompletedMissions().contains(missionName)) {
fPlayer.msg(TL.MISSION_ALREAD_COMPLETED);
return;

View File

@@ -28,6 +28,7 @@ public enum Permission {
CHECK("check"),
CLAIM("claim"),
CLAIMAT("claimat"),
CLAIM_FILL("claimfill"),
CLAIM_LINE("claim.line"),
CLAIM_RADIUS("claim.radius"),
CONFIG("config"),

View File

@@ -50,7 +50,9 @@ public enum FactionTag implements Tag {
return null;
}),
ANNOUNCEMENT("{announcement}", (fac) -> { return String.valueOf(fac.getAnnouncements()); }),
ANNOUNCEMENT("{announcement}", (fac) -> {
return String.valueOf(fac.getAnnouncements());
}),
PEACEFUL("{peaceful}", (fac) -> fac.isPeaceful() ? Conf.colorNeutral + TL.COMMAND_SHOW_PEACEFUL.toString() : ""),
PERMANENT("permanent", (fac) -> fac.isPermanent() ? "permanent" : "{notPermanent}"), // no braces needed
LAND_VALUE("{land-value}", (fac) -> Econ.shouldBeUsed() ? Econ.moneyString(Econ.calculateTotalLandValue(fac.getLandRounded())) : Tag.isMinimalShow() ? null : TL.ECON_OFF.format("value")),
@@ -95,7 +97,7 @@ public enum FactionTag implements Tag {
return String.valueOf(fac.getFPlayersWhereOnline(false).size());
}
}),
FACTION_STRIKES("{faction-strikes}",(fac) -> String.valueOf(fac.getStrikes())),
FACTION_STRIKES("{faction-strikes}", (fac) -> String.valueOf(fac.getStrikes())),
FACTION_POINTS("{faction-points}", (fac) -> String.valueOf(fac.getPoints())),
FACTION_SIZE("{members}", (fac) -> String.valueOf(fac.getFPlayers().size())),
FACTION_KILLS("{faction-kills}", (fac) -> String.valueOf(fac.getKills())),

View File

@@ -1,7 +1,6 @@
package com.massivecraft.factions.tag;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;

View File

@@ -1,6 +1,7 @@
package com.massivecraft.factions.tag;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.zcore.util.TL;
import org.apache.commons.lang.time.DurationFormatUtils;
@@ -15,7 +16,13 @@ public enum PlayerTag implements Tag {
/**
* @author FactionsUUID Team
*/
GROUP("{group}", (fp) -> {
if (fp.isOnline()) {
return FactionsPlugin.getInstance().getPrimaryGroup(fp.getPlayer());
} else {
return "";
}
}),
LAST_SEEN("{lastSeen}", (fp) -> {
String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX;
return fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized);

View File

@@ -3,12 +3,13 @@ package com.massivecraft.factions.util;
/**
* @author Saser
*/
import org.bukkit.ChatColor;
public class CC {
public static String Black = ChatColor.BLACK.toString();
public static String BlackB = ChatColor.BLACK + ChatColor.BOLD.toString();
public static String BlackI = ChatColor.BLACK + ChatColor.ITALIC.toString();;
public static String BlackI = ChatColor.BLACK + ChatColor.ITALIC.toString();
public static String BlackU = ChatColor.BLACK + ChatColor.UNDERLINE.toString();
public static String DarkBlue = ChatColor.DARK_BLUE.toString();
public static String DarkBlueB = ChatColor.DARK_BLUE + ChatColor.BOLD.toString();

View File

@@ -121,7 +121,7 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
case "faction_description":
return faction.getDescription();
case "faction_claims":
return fPlayer.hasFaction() ? String.valueOf(faction.getAllClaims().size()) : "0";
return fPlayer.hasFaction() ? String.valueOf(faction.getAllClaims().size()) : "0";
case "faction_maxclaims":
return String.valueOf(Conf.claimedLandsMax);
case "faction_founded":
@@ -169,10 +169,28 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
return Econ.shouldBeUsed() ? Econ.moneyString(Econ.getBalance(faction.getAccountId())) : TL.ECON_OFF.format("balance");
case "faction_allies":
return String.valueOf(faction.getRelationCount(Relation.ALLY));
case "faction_allies_players":
return String.valueOf(this.countOn(faction, Relation.ALLY, null, fPlayer));
case "faction_allies_players_online":
return String.valueOf(this.countOn(faction, Relation.ALLY, true, fPlayer));
case "faction_allies_players_offline":
return String.valueOf(this.countOn(faction, Relation.ALLY, false, fPlayer));
case "faction_enemies":
return String.valueOf(faction.getRelationCount(Relation.ENEMY));
case "faction_enemies_players":
return String.valueOf(this.countOn(faction, Relation.ENEMY, null, fPlayer));
case "faction_enemies_players_online":
return String.valueOf(this.countOn(faction, Relation.ENEMY, true, fPlayer));
case "faction_enemies_players_offline":
return String.valueOf(this.countOn(faction, Relation.ENEMY, false, fPlayer));
case "faction_truces":
return String.valueOf(faction.getRelationCount(Relation.TRUCE));
case "faction_truces_players":
return String.valueOf(this.countOn(faction, Relation.TRUCE, null, fPlayer));
case "faction_truces_players_online":
return String.valueOf(this.countOn(faction, Relation.TRUCE, true, fPlayer));
case "faction_truces_players_offline":
return String.valueOf(this.countOn(faction, Relation.TRUCE, false, fPlayer));
case "faction_online":
return String.valueOf(faction.getOnlinePlayers().size());
case "faction_offline":
@@ -187,6 +205,8 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
return String.valueOf(faction.getDeaths());
case "faction_maxvaults":
return String.valueOf(faction.getMaxVaults());
case "faction_relation_color":
return fPlayer.getColorTo(faction).toString();
case "faction_grace":
return String.valueOf(Conf.gracePeriod);
case "faction_name_at_location":
@@ -196,4 +216,21 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
return null;
}
private int countOn(Faction f, Relation relation, Boolean status, FPlayer player) {
int count = 0;
for (Faction faction : Factions.getInstance().getAllFactions()) {
if (faction.getRelationTo(f) == relation) {
if (status == null) {
count += faction.getFPlayers().size();
} else if (status) {
count += faction.getFPlayersWhereOnline(true, player).size();
} else {
count += faction.getFPlayersWhereOnline(false, player).size();
}
}
}
return count;
}
}

View File

@@ -38,8 +38,8 @@ public class FactionWarpsFrame {
GUIItems.add(new GuiItem(buildDummyItem(), e -> e.setCancelled(true)));
slots.forEach(slot -> GUIItems.set(slot, new GuiItem(XMaterial.AIR.parseItem())));
for (final Map.Entry<String, LazyLocation> warp : fplayer.getFaction().getWarps().entrySet()) {
if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()){
slots.add(slots.get(slots.size()-1)+1);
if (slots.size() < fplayer.getFaction().getWarps().entrySet().size()) {
slots.add(slots.get(slots.size() - 1) + 1);
FactionsPlugin.instance.log("Automatically setting F WARP GUI slot since slot not specified. Head config.yml and add more entries in warp-slots section.");
}

View File

@@ -1,7 +1,6 @@
package com.massivecraft.factions.util;
import com.google.gson.*;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.inventory.Inventory;

View File

@@ -24,6 +24,7 @@ public class ItemBuilder {
public ItemBuilder(Material material, int amount) {
this(new ItemStack(material, amount));
}
public ItemBuilder(Material material) {
this(material, 1);
}

View File

@@ -3,7 +3,7 @@ package com.massivecraft.factions.util;
/**
* @author Saser
*/
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
@@ -24,7 +24,7 @@ public class ItemUtil {
} else {
int itemsFound = 0;
for(int i = 0; i < inventory.getSize(); ++i) {
for (int i = 0; i < inventory.getSize(); ++i) {
ItemStack item = inventory.getItem(i);
if (item != null && item.getType() != Material.AIR) {
++itemsFound;
@@ -41,7 +41,7 @@ public class ItemUtil {
return skull.clone();
} else {
skull = new ItemStack(XMaterial.PLAYER_HEAD.parseMaterial());
SkullMeta sm = (SkullMeta)skull.getItemMeta();
SkullMeta sm = (SkullMeta) skull.getItemMeta();
sm.setOwner(name);
skull.setItemMeta(sm);
cachedSkulls.put(name, skull.clone());

View File

@@ -3,15 +3,14 @@ package com.massivecraft.factions.util;
/**
* @author Saser
*/
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.massivecraft.factions.cmd.audit.FactionLogs;
import org.bukkit.Bukkit;
import java.io.*;
import java.lang.reflect.Type;
import java.util.Map;
public class JSONUtils {
public static Gson gson = (new GsonBuilder()).enableComplexMapKeySerialization().create();
@@ -94,7 +93,7 @@ public class JSONUtils {
}
private static Type getTypeFromObject(Object object) {
return object instanceof Type ? (Type)object : getTypeFromClass(object.getClass());
return object instanceof Type ? (Type) object : getTypeFromClass(object.getClass());
}
private static Type getTypeFromClass(Class<?> clazz) {

View File

@@ -5,18 +5,17 @@ package com.massivecraft.factions.util;
*/
public class Pair<Left, Right> {
public static <Left, Right> Pair<Left, Right> of(Left left, Right right) {
return new Pair<>(left, right);
}
private final Left left;
private final Right right;
private Pair(Left left, Right right) {
this.left = left;
this.right = right;
}
public static <Left, Right> Pair<Left, Right> of(Left left, Right right) {
return new Pair<>(left, right);
}
public Left getLeft() {
return this.left;
}

View File

@@ -8,9 +8,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
/**
* @author droppinganvil
*/
public class PermissionList {
public static void generateFile() {
File file = new File(FactionsPlugin.getInstance().getDataFolder().toString() + "/" + "permissions.yml");

View File

@@ -1,15 +0,0 @@
package com.massivecraft.factions.util;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.InventoryHolder;
/**
* @author droppinganvil
* Inspired by FactionGUI with the difference being that this should be used for GUIs that will not differ between players
* Using StaticGUI and only generating one will not require generating one object per player unlike FactionGUI this will save many resources from being used.
* @see FactionGUI
*/
public interface StaticGUI extends InventoryHolder {
void click(int slot, ClickType action, Player player);
}

View File

@@ -1,35 +0,0 @@
package com.massivecraft.factions.util.Sync;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.Bukkit;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.logging.Level;
/**
* @author droppinganvil
*/
public class SyncExecutor {
private static boolean started = false;
/**
* This queue is used to collect task that need to happen async rather than scheduling for every action.
*/
public static Queue<SyncTask> taskQueue = new LinkedList<>();
public static void startTask() {
if (started) return;
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () -> {
SyncTask syncTask = taskQueue.poll();
if (syncTask != null) {
try {
syncTask.call();
} catch (InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A task was not able to execute successfully! Please provide this stacktrace to the Saber team at Discord.Saber.pw");
}
}
}, 0L, 2L);
}
}

View File

@@ -1,63 +0,0 @@
package com.massivecraft.factions.util.Sync;
import com.massivecraft.factions.FactionsPlugin;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
/**
* @author droppinganvil
*/
public class SyncTask {
private Object o;
private Method m;
private Object[] arguments;
private Collection<Class<?>> params;
public SyncTask(Object target, Method method, Object... arguments) {
this.o = target;
this.m = method;
this.arguments = arguments;
}
/**
* Generate sync task without the ability to specify the Method object, made for easy typing
* @param target Object the method is on
* @param method Method name
* @param arguments Objects needed to call method
*/
public SyncTask(Object target, String method, Object... arguments) {
this.o = target;
this.arguments = arguments;
this.params = new ArrayList<>();
for (Object o : this.arguments) {
this.params.add(o.getClass());
}
try {
this.m = o.getClass().getMethod(method, (Class<?>[]) params.toArray());
} catch (NoSuchMethodException e) {
e.printStackTrace();
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A Method could not be located! This means a task that was supposed to happen did not, this may be a very serious issue");
}
}
/**
* Generate sync task without the ability to specify the Method object or arguments, made for easy typing
*/
public SyncTask(Object target, String method) {
this.o = target;
try {
this.m = o.getClass().getMethod(method);
} catch (NoSuchMethodException e) {
e.printStackTrace();
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A Method could not be located! This means a task that was supposed to happen did not, this may be a very serious issue");
}
}
public void call() throws InvocationTargetException, IllegalAccessException {
m.invoke(o, arguments);
}
}

View File

@@ -10,6 +10,7 @@ import java.util.List;
public class Updater {
public static double currentVersion = 1.1;
public static void updateIfNeeded(FileConfiguration conf) {
double version = conf.getDouble("Config-Version", 0);
//Previous version
@@ -41,6 +42,8 @@ public class Updater {
try {
conf.save(new File("plugins/Factions/config.yml"));
FactionsPlugin.getInstance().reloadConfig();
} catch (IOException e) {e.printStackTrace();}
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@@ -25,6 +25,7 @@ public class UtilFly {
}
}, 0, FactionsPlugin.getInstance().getConfig().getInt("fly-task-interval", 10));
}
@Deprecated
public static void setFly(FPlayer fp, boolean fly, boolean silent, boolean damage) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))
@@ -45,6 +46,7 @@ public class UtilFly {
setFallDamage(fp, fly, damage);
}
@Deprecated
public static void checkFly(FPlayer me, Faction factionTo) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))

View File

@@ -1,41 +0,0 @@
package com.massivecraft.factions.util.Wait;
import com.massivecraft.factions.FactionsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author droppinganvil
*/
public class WaitExecutor {
private static boolean enabled = false;
public static ConcurrentHashMap<Player, WaitTask> taskMap = new ConcurrentHashMap<>();
public static void startTask() {
if (enabled) return;
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () ->
{
for (WaitTask task : taskMap.values()) {
int i = task.getWait() - 1;
if (i > 0) {
if (i != 1) {
task.getPlayer().sendMessage(task.getMessage().format((i + " Seconds")));
} else {
task.getPlayer().sendMessage(task.getMessage().format((i + " Second")));
}
task.setWait(i);
} else {
task.success();
taskMap.remove(task.getPlayer());
}
}
},0L,20L);
enabled = true;
}
public static void handleAction(Player player) {
if (!taskMap.containsKey(player)) return;
taskMap.get(player).fail();
taskMap.remove(player);
}
}

View File

@@ -1,47 +0,0 @@
package com.massivecraft.factions.util.Wait;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.entity.Player;
/**
* @author droppinganvil
*/
public class WaitTask {
private Integer wait;
private TL msg;
//Using player as to not have to convert every event
private Player player;
private WaitedTask origin;
public WaitTask(Integer wait, TL message, Player player, WaitedTask waitedTask) {
this.wait = wait;
this.msg = message;
this.player = player;
this.origin = waitedTask;
}
public Integer getWait() {
return wait;
}
public TL getMessage() {
return msg;
}
public Player getPlayer() {
return player;
}
public void setWait(Integer i) {
wait = i;
}
public void success() {
origin.handleSuccess(player);
}
public void fail() {
origin.handleFailure(player);
}
}

View File

@@ -1,11 +0,0 @@
package com.massivecraft.factions.util.Wait;
import org.bukkit.entity.Player;
/**
* @author droppinganvil
*/
public interface WaitedTask {
void handleSuccess(Player player);
void handleFailure(Player player);
}

View File

@@ -1803,7 +1803,8 @@ public enum XMaterial {
*/
@SuppressWarnings("deprecation")
public int getId() {
if (this.data != 0 || (this.legacy.length != 0 && Integer.parseInt(this.legacy[0].substring(2)) >= 13)) return -1;
if (this.data != 0 || (this.legacy.length != 0 && Integer.parseInt(this.legacy[0].substring(2)) >= 13))
return -1;
Material material = this.parseMaterial();
return material == null ? -1 : material.getId();
}

View File

@@ -3,6 +3,7 @@ package com.massivecraft.factions.util.serializable;
/**
* @author Saser
*/
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

View File

@@ -3,6 +3,7 @@ package com.massivecraft.factions.util.serializable;
/**
* @author Saser
*/
import com.google.common.collect.Lists;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
@@ -10,14 +11,12 @@ import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import java.util.HashMap;
import java.util.List;
@@ -26,9 +25,9 @@ import java.util.UUID;
import java.util.function.Consumer;
public abstract class GUIMenu {
private static Map<UUID, GUIMenu> menus = new HashMap<>();
protected Inventory menu;
private Map<Integer, ClickableItemStack> menuItems = new HashMap<>();
private static Map<UUID, GUIMenu> menus = new HashMap<>();
private Consumer<InventoryCloseEvent> closeCallback;
private String name;
private int size;
@@ -44,6 +43,14 @@ public abstract class GUIMenu {
this.menu = Bukkit.createInventory(null, size, name);
}
public static int fitSlots(int size) {
return size <= 9 ? 9 : (size <= 18 ? 18 : (size <= 27 ? 27 : (size <= 36 ? 36 : (size <= 45 ? 45 : (size <= 54 ? 54 : 54)))));
}
public static Map<UUID, GUIMenu> getMenus() {
return menus;
}
public void setInventorySize(int size) {
if (this.size != size) {
int oldSize = this.size;
@@ -59,11 +66,6 @@ public abstract class GUIMenu {
}
}
public GUIMenu setPreviousMenu(GUIMenu menu) {
this.previousMenu = menu;
return this;
}
public void setItem(int slot, ClickableItemStack item) {
this.menu.setItem(slot, item);
this.menuItems.put(slot, item);
@@ -82,9 +84,9 @@ public abstract class GUIMenu {
}
public ClickableItemStack getBackButton(Material data, String name, String... lore) {
return (new ClickableItemStack(new ItemStack(data != null ? data : Material.RED_STAINED_GLASS_PANE, 1, data != null ? (short) 0 : 0 ))).setDisplayName(name != null ? name : ChatColor.RED + ChatColor.BOLD.toString() + "Back").setLore(lore != null ? Lists.newArrayList(lore) : Lists.newArrayList(ChatColor.GRAY + "Click to return to previous menu.")).setClickCallback((e) -> {
return (new ClickableItemStack(new ItemStack(data != null ? data : Material.RED_STAINED_GLASS_PANE, 1, data != null ? (short) 0 : 0))).setDisplayName(name != null ? name : ChatColor.RED + ChatColor.BOLD.toString() + "Back").setLore(lore != null ? Lists.newArrayList(lore) : Lists.newArrayList(ChatColor.GRAY + "Click to return to previous menu.")).setClickCallback((e) -> {
if (this.previousMenu != null) {
this.previousMenu.open((Player)e.getWhoClicked());
this.previousMenu.open((Player) e.getWhoClicked());
}
});
@@ -113,7 +115,7 @@ public abstract class GUIMenu {
}
public void fillEmpty(ClickableItemStack item) {
for(int i = 0; i < this.menu.getSize(); ++i) {
for (int i = 0; i < this.menu.getSize(); ++i) {
ItemStack is = this.menu.getItem(i);
if (is == null || is.getType() == Material.AIR) {
this.setItem(i, item);
@@ -122,18 +124,10 @@ public abstract class GUIMenu {
}
public static int fitSlots(int size) {
return size <= 9 ? 9 : (size <= 18 ? 18 : (size <= 27 ? 27 : (size <= 36 ? 36 : (size <= 45 ? 45 : (size <= 54 ? 54 : 54)))));
}
public Map<Integer, ClickableItemStack> getMenuItems() {
return this.menuItems;
}
public static Map<UUID, GUIMenu> getMenus() {
return menus;
}
public Consumer<InventoryCloseEvent> getCloseCallback() {
return this.closeCallback;
}
@@ -153,4 +147,9 @@ public abstract class GUIMenu {
public GUIMenu getPreviousMenu() {
return this.previousMenu;
}
public GUIMenu setPreviousMenu(GUIMenu menu) {
this.previousMenu = menu;
return this;
}
}

View File

@@ -21,7 +21,9 @@ public class InventoryItem {
this.item = original;
}
public InventoryItem(ItemBuilder original) { this(original.build()); }
public InventoryItem(ItemBuilder original) {
this(original.build());
}
public InventoryItem click(ClickType type, Runnable runnable) {
this.clickMap.put(type, runnable);

View File

@@ -190,7 +190,7 @@ public abstract class MPlugin extends JavaPlugin {
Board.getInstance().forceSave();
}
log("Disabled");
} catch (IllegalPluginAccessException e){
} catch (IllegalPluginAccessException e) {
}
}

View File

@@ -1,7 +1,5 @@
package com.massivecraft.factions.zcore.fperms;
import com.massivecraft.factions.util.XMaterial;
public class DefaultPermissions {
/**

View File

@@ -53,12 +53,12 @@ public class PermissableActionFrame {
case LEFT:
access = Access.ALLOW;
success = fplayer.getFaction().setPermission(perm, action, access);
FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS,fplayer.getName(), ChatColor.GREEN.toString() + ChatColor.BOLD + "ALLOWED", action.getName(), perm.name());
FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS, fplayer.getName(), ChatColor.GREEN.toString() + ChatColor.BOLD + "ALLOWED", action.getName(), perm.name());
break;
case RIGHT:
access = Access.DENY;
success = fplayer.getFaction().setPermission(perm, action, access);
FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS,fplayer.getName(), ChatColor.RED.toString() + ChatColor.BOLD + "DENIED", action.getName(), perm.name());
FactionsPlugin.instance.logFactionEvent(fplayer.getFaction(), FLogType.PERM_EDIT_DEFAULTS, fplayer.getName(), ChatColor.RED.toString() + ChatColor.BOLD + "DENIED", action.getName(), perm.name());
break;
case MIDDLE:
access = Access.UNDEFINED;

View File

@@ -8,6 +8,7 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.util.XMaterial;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -15,6 +16,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author Saser
@@ -26,7 +28,8 @@ public class FUpgradeFrame {
public FUpgradeFrame(Faction f) {
this.gui = new Gui(FactionsPlugin.getInstance(),
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5),
FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Title").replace("{faction}", f.getTag()));
ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(FactionsPlugin.getInstance().getConfig()
.getString("fupgrades.MainMenu.Title")).replace("{faction}", f.getTag())));
}
public void buildGUI(FPlayer fplayer) {

View File

@@ -23,6 +23,63 @@ import java.util.concurrent.ThreadLocalRandom;
public class UpgradesListener implements Listener {
@EventHandler
public static void onDamageReduction(EntityDamageByEntityEvent e) {
if (e.isCancelled()) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageReduction.DamageReductionPercent.level-" + level);
e.setDamage(damage - damage / 100.0 * increase);
}
}
@EventHandler
public static void onDamageIncrease(EntityDamageByEntityEvent e) {
if (e == null) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
if (e.getDamager().hasMetadata("NPC") || e.getEntity().hasMetadata("NPC")) return;
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if (floc == null) return;
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageIncrease.DamageIncreasePercent.level-" + level);
e.setDamage(damage + damage / 100.0 * increase);
}
}
/**
* @author Illyria Team
*/
@@ -68,70 +125,44 @@ public class UpgradesListener implements Listener {
}
@EventHandler
public void onCropGrow( BlockGrowEvent e) {
FLocation floc = new FLocation(e.getBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
public void onCropGrow(BlockGrowEvent e) {
FLocation floc = new FLocation(e.getBlock().getLocation());
Faction factionAtLoc = Board.getInstance().getFactionAt(floc);
if (!factionAtLoc.isWilderness()) {
int level = factionAtLoc.getUpgrade(UpgradeType.CROP);
int chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-" + level);
int level = factionAtLoc.getUpgrade(UpgradeType.CROP);
int chance = FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Crops.Crop-Boost.level-" + level);
if (level == 0 || chance == 0) {
return;
}
int randomNum = ThreadLocalRandom.current().nextInt(1, 101);
int randomNum = ThreadLocalRandom.current().nextInt(1, 101);
if (randomNum <= chance) {
this.growCrop(e);
}
}
}
private void growCrop( BlockGrowEvent e) {
private void growCrop(BlockGrowEvent e) {
if (e.getBlock().getType().equals(XMaterial.WHEAT.parseMaterial())) {
e.setCancelled(true);
Crops c = new Crops(CropState.RIPE);
BlockState bs = e.getBlock().getState();
Crops c = new Crops(CropState.RIPE);
BlockState bs = e.getBlock().getState();
bs.setData(c);
bs.update();
}
Block below = e.getBlock().getLocation().subtract(0.0, 1.0, 0.0).getBlock();
Block below = e.getBlock().getLocation().subtract(0.0, 1.0, 0.0).getBlock();
if (below.getType() == XMaterial.SUGAR_CANE.parseMaterial()) {
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) {
above.setType(XMaterial.SUGAR_CANE.parseMaterial());
}
}
else if (below.getType() == Material.CACTUS) {
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
} else if (below.getType() == Material.CACTUS) {
Block above = e.getBlock().getLocation().add(0.0, 1.0, 0.0).getBlock();
if (above.getType() == Material.AIR && above.getLocation().add(0.0, -2.0, 0.0).getBlock().getType() != Material.AIR) {
above.setType(Material.CACTUS);
}
}
}
@EventHandler
public static void onDamageReduction(EntityDamageByEntityEvent e) {
if (e.isCancelled()) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEDECREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageReduction.DamageReductionPercent.level-" + level);
e.setDamage(damage - damage / 100.0 * increase);
}
}
@EventHandler
public void onWaterRedstone(BlockFromToEvent e) {
List<String> unbreakable = FactionsPlugin.getInstance().getConfig().getStringList("no-water-destroy.Item-List");
@@ -152,37 +183,6 @@ public class UpgradesListener implements Listener {
}
}
@EventHandler
public static void onDamageIncrease(EntityDamageByEntityEvent e) {
if (e == null) {
return;
}
if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player)) {
return;
}
if(e.getDamager().hasMetadata("NPC") || e.getEntity().hasMetadata("NPC")) return;
FPlayer fme = FPlayers.getInstance().getByPlayer((Player) e.getEntity());
FPlayer dame = FPlayers.getInstance().getByPlayer((Player) e.getDamager());
if (fme == null || dame == null) {
return;
}
FLocation floc = new FLocation(fme.getPlayer().getLocation());
if(floc == null) return;
if (Board.getInstance().getFactionAt(floc) == fme.getFaction()) {
if (dame.getFaction() == fme.getFaction()) {
return;
}
double damage = e.getDamage();
int level = fme.getFaction().getUpgrade(UpgradeType.DAMAGEINCREASE);
double increase = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.DamageIncrease.DamageIncreasePercent.level-" + level);
e.setDamage(damage + damage / 100.0 * increase);
}
}
@EventHandler
public void onArmorDamage(PlayerItemDamageEvent e) {
if (FPlayers.getInstance().getByPlayer(e.getPlayer()) == null) {

View File

@@ -236,8 +236,10 @@ public abstract class MemoryBoard extends Board {
row.then("-").color(Conf.colorWilderness);
// Lol someone didnt add the x and z making it claim the wrong position Can i copyright this xD
if (fplayer.getPlayer().hasPermission(Permission.CLAIMAT.node)) {
row.tooltip(TL.CLAIM_CLICK_TO_CLAIM.format(dx + topLeft.getX(), dz + topLeft.getZ()))
.command(String.format("/f claimat %s %d %d", flocation.getWorldName(), dx + topLeft.getX(), dz + topLeft.getZ()));
if (Conf.enableClickToClaim) {
row.tooltip(TL.CLAIM_CLICK_TO_CLAIM.format(dx + topLeft.getX(), dz + topLeft.getZ()))
.command(String.format("/f claimat %s %d %d", flocation.getWorldName(), dx + topLeft.getX(), dz + topLeft.getZ()));
}
}
} else if (factionHere.isSafeZone()) {
row.then("+").color(Conf.colorSafezone).tooltip(oneLineToolTip(factionHere, fplayer));

View File

@@ -32,8 +32,6 @@ import org.bukkit.*;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.text.DecimalFormat;
import java.util.*;
@@ -49,8 +47,6 @@ import java.util.*;
*/
public abstract class MemoryFPlayer implements FPlayer {
public boolean inDuel = false;
public Map<Integer, ItemStack> oldInv = null;
public boolean enemiesNearby = false;
public boolean inChest = false;
public boolean discordSetup = false;
@@ -212,7 +208,7 @@ public abstract class MemoryFPlayer implements FPlayer {
oldFaction.removeFPlayer(this);
}
if (alt) faction.addAltPlayer(this);
else faction.addFPlayer(this);
else faction.addFPlayer(this);
this.factionId = faction.getId();
}
@@ -226,25 +222,29 @@ public abstract class MemoryFPlayer implements FPlayer {
return this.notificationsEnabled;
}
public boolean hasEnemiesNearby() {return this.enemiesNearby;}
public boolean hasEnemiesNearby() {
return this.enemiesNearby;
}
public void setEnemiesNearby(Boolean b) {this.enemiesNearby = b;}
public void setEnemiesNearby(Boolean b) {
this.enemiesNearby = b;
}
public Map<Integer, ItemStack> getOldInv() {return this.oldInv;}
public boolean discordSetup() {
return this.discordSetup;
}
public void setOldInv(Map<Integer, ItemStack> inv) {this.oldInv = inv;}
public String discordUserID() {
return this.discordUserID;
}
public void setInDuel(Boolean b) {this.inDuel = b;}
public void setDiscordSetup(Boolean b) {
this.discordSetup = b;
}
public boolean isInDuel() {return this.inDuel;}
public boolean discordSetup() {return this.discordSetup;}
public String discordUserID() {return this.discordUserID;}
public void setDiscordSetup(Boolean b) {this.discordSetup = b;}
public void setDiscordUserID(String s) {this.discordUserID = s;}
public void setDiscordUserID(String s) {
this.discordUserID = s;
}
public boolean hasTitlesEnabled() {
return this.titlesEnabled;
@@ -254,7 +254,9 @@ public abstract class MemoryFPlayer implements FPlayer {
this.titlesEnabled = b;
}
public User discordUser() {return Discord.jda.getUserById(this.discordUserID);}
public User discordUser() {
return Discord.jda.getUserById(this.discordUserID);
}
public String getFactionId() {
return this.factionId;
@@ -300,7 +302,9 @@ public abstract class MemoryFPlayer implements FPlayer {
} else {
this.role = event.getTo();
}
} catch (HierarchyException e) {System.out.print(e.getMessage());}
} catch (HierarchyException e) {
System.out.print(e.getMessage());
}
}
}
@@ -349,7 +353,7 @@ public abstract class MemoryFPlayer implements FPlayer {
public void setIsAutoSafeClaimEnabled(boolean enabled) {
this.autoSafeZoneEnabled = enabled;
if (enabled) this.autoClaimFor = null;
this.autoWarZoneEnabled = false;
this.autoWarZoneEnabled = false;
}
public boolean isAutoWarClaimEnabled() {
@@ -359,7 +363,7 @@ public abstract class MemoryFPlayer implements FPlayer {
public void setIsAutoWarClaimEnabled(boolean enabled) {
this.autoWarZoneEnabled = enabled;
if (enabled) this.autoClaimFor = null;
this.autoSafeZoneEnabled = false;
this.autoSafeZoneEnabled = false;
}
public boolean isAdminBypassing() {
@@ -416,11 +420,15 @@ public abstract class MemoryFPlayer implements FPlayer {
try {
if (Discord.useDiscord && this.discordSetup() && Discord.isInMainGuild(this.discordUser()) && Discord.mainGuild != null) {
Member m = Discord.mainGuild.getMember(this.discordUser());
if (Conf.leaderRoles && this.role == Role.LEADER && Discord.leader != null) Discord.mainGuild.getController().removeSingleRoleFromMember(m, Discord.leader).queue();
if (Conf.factionRoles) Discord.mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(Discord.createFactionRole(this.getFaction().getTag()))).queue();
if (Conf.leaderRoles && this.role == Role.LEADER && Discord.leader != null)
Discord.mainGuild.getController().removeSingleRoleFromMember(m, Discord.leader).queue();
if (Conf.factionRoles)
Discord.mainGuild.getController().removeSingleRoleFromMember(m, Objects.requireNonNull(Discord.createFactionRole(this.getFaction().getTag()))).queue();
if (Conf.factionDiscordTags) Discord.resetNick(this);
}
} catch (HierarchyException e) {System.out.print(e.getMessage());}
} catch (HierarchyException e) {
System.out.print(e.getMessage());
}
//End Discord
currentFaction.removeFPlayer(this);
if (currentFaction.isNormal()) currentFaction.clearClaimOwnership(this);
@@ -487,7 +495,8 @@ public abstract class MemoryFPlayer implements FPlayer {
public void setTitle(CommandSender sender, String title) {
// Check if the setter has it.
if (sender.hasPermission(Permission.TITLE_COLOR.node)) title = ChatColor.translateAlternateColorCodes('&', title);
if (sender.hasPermission(Permission.TITLE_COLOR.node))
title = ChatColor.translateAlternateColorCodes('&', title);
this.title = title;
}
@@ -616,7 +625,7 @@ public abstract class MemoryFPlayer implements FPlayer {
this.power += delta;
if (this.power > this.getPowerMax())
this.power = this.getPowerMax();
else if (this.power < this.getPowerMin())
else if (this.power < this.getPowerMin())
this.power = this.getPowerMin();
}
@@ -639,9 +648,11 @@ public abstract class MemoryFPlayer implements FPlayer {
public int getPowerMinRounded() {
return (int) Math.round(this.getPowerMin());
}
public long getMillisPassed() {
return this.millisPassed;
}
public long getLastPowerUpdateTime() {
return this.lastPowerUpdateTime;
}
@@ -659,13 +670,15 @@ public abstract class MemoryFPlayer implements FPlayer {
this.lastPowerUpdateTime = now;
Player thisPlayer = this.getPlayer();
if (thisPlayer != null && thisPlayer.isDead()) return; // don't let dead players regain power until they respawn
if (thisPlayer != null && thisPlayer.isDead())
return; // don't let dead players regain power until they respawn
PowerRegenEvent powerRegenEvent = new PowerRegenEvent(getFaction(), this);
Bukkit.getScheduler().runTask(FactionsPlugin.getInstance(), () -> Bukkit.getServer().getPluginManager().callEvent(powerRegenEvent));
if (!powerRegenEvent.isCancelled())
if (!powerRegenEvent.usingCustomPower()) this.alterPower(millisPassed * Conf.powerPerMinute / 60000); // millisPerMinute : 60 * 1000
else this.alterPower(+powerRegenEvent.getCustomPower());
if (!powerRegenEvent.usingCustomPower())
this.alterPower(millisPassed * Conf.powerPerMinute / 60000); // millisPerMinute : 60 * 1000
else this.alterPower(+powerRegenEvent.getCustomPower());
}
public void losePowerFromBeingOffline() {
@@ -717,7 +730,8 @@ public abstract class MemoryFPlayer implements FPlayer {
FScoreboard.get(this).setTemporarySidebar(new FInfoSidebar(toShow));
showChat = FactionsPlugin.getInstance().getConfig().getBoolean("scoreboard.also-send-chat", true);
}
if (showChat) this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this))));
if (showChat)
this.sendMessage(FactionsPlugin.getInstance().txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this))));
}
// -------------------------------
@@ -779,7 +793,8 @@ public abstract class MemoryFPlayer implements FPlayer {
// Am I the last one in the faction?
if (myFaction.getFPlayers().size() == 1) {
// Transfer all money
if (Econ.shouldBeUsed()) Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId()));
if (Econ.shouldBeUsed())
Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId()));
}
@@ -807,7 +822,8 @@ public abstract class MemoryFPlayer implements FPlayer {
Bukkit.getPluginManager().callEvent(disbandEvent);
Factions.getInstance().removeFaction(myFaction.getId());
if (Conf.logFactionDisband) FactionsPlugin.getInstance().log(TL.LEAVE_DISBANDEDLOG.format(myFaction.getTag(), myFaction.getId(), this.getName()));
if (Conf.logFactionDisband)
FactionsPlugin.getInstance().log(TL.LEAVE_DISBANDEDLOG.format(myFaction.getTag(), myFaction.getId(), this.getName()));
}
}
@@ -842,14 +858,12 @@ public abstract class MemoryFPlayer implements FPlayer {
return true;
} else if (currentFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
return true;
} else if (currentFaction.isWilderness() && forFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
return true;
} else if (myFaction != forFaction) {
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this));
} else if (forFaction == currentFaction) {
error = FactionsPlugin.getInstance().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 (this.getRole().value < Role.MODERATOR.value) {
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MUSTBE.toString(), Role.MODERATOR.getTranslation());
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers);
} else if (currentFaction.isSafeZone()) {
@@ -941,6 +955,9 @@ public abstract class MemoryFPlayer implements FPlayer {
}
public void setFFlying(boolean fly, boolean damage) {
if (!FactionsPlugin.getInstance().getConfig().getBoolean("enable-faction-flight"))
return;
Player player = getPlayer();
if (player == null) return;
@@ -949,7 +966,8 @@ public abstract class MemoryFPlayer implements FPlayer {
if (!damage) {
msg(TL.COMMAND_FLY_CHANGE, fly ? "enabled" : "disabled");
if (!fly) sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + ""));
if (!fly)
sendMessage(TL.COMMAND_FLY_COOLDOWN.toString().replace("{amount}", FactionsPlugin.getInstance().getConfig().getInt("fly-falldamage-cooldown", 3) + ""));
} else {
msg(TL.COMMAND_FLY_DAMAGE);
}
@@ -973,9 +991,11 @@ public abstract class MemoryFPlayer implements FPlayer {
public boolean isInFactionsChest() {
return inChest;
}
public void setInFactionsChest(boolean b) {
inChest = b;
}
public boolean isInVault() {
return inVault;
}
@@ -1238,7 +1258,8 @@ public abstract class MemoryFPlayer implements FPlayer {
Board.getInstance().setFactionAt(forFaction, flocation);
if (Conf.logLandClaims) FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag());
if (Conf.logLandClaims)
FactionsPlugin.getInstance().log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag());
return true;
}

View File

@@ -70,6 +70,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
protected Map<Permissable, Map<PermissableAction, Access>> permissions = new HashMap<>();
protected Set<BanInfo> bans = new HashSet<>();
protected String player;
protected String discord;
Inventory chest;
Map<String, Object> bannerSerialized;
private long lastDeath;
@@ -86,7 +87,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
private int warpLimit;
private double reinforcedArmor;
private List<String> completedMissions;
protected String discord;
private String factionChatChannelId;
private String wallNotifyChannelId;
private String bufferNotifyChannelId;
@@ -340,8 +340,8 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
boolean disbanderIsConsole = disbander == null;
FPlayer fdisbander = null;
if(!disbanderIsConsole){
fdisbander= FPlayers.getInstance().getByOfflinePlayer(disbander);
if (!disbanderIsConsole) {
fdisbander = FPlayers.getInstance().getByOfflinePlayer(disbander);
}
@@ -376,7 +376,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
if (Econ.shouldBeUsed() && !disbanderIsConsole) {
// Should we prevent to withdraw money if the faction was just created
if (Conf.econFactionStartingBalance != 0 && (System.currentTimeMillis() - this.foundedDate) <= (Conf.econDenyWithdrawWhenMinutesAgeLessThan * 6000)) {
msg("Your faction is too young to withdraw money like this");
msg(TL.COMMAND_DISBAND_TOO_YOUNG);
} else {
//Give all the faction's money to the disbander
double amount = Econ.getBalance(this.getAccountId());
@@ -529,10 +529,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
}
@Override
public double getReinforcedArmor() { return this.reinforcedArmor; }
public double getReinforcedArmor() {
return this.reinforcedArmor;
}
@Override
public void setReinforcedArmor(double newPercent) { reinforcedArmor = newPercent; }
public void setReinforcedArmor(double newPercent) {
reinforcedArmor = newPercent;
}
@Override
public ItemStack getBanner() {
@@ -589,11 +593,21 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.memberRoleId;
}
@Override
public void setMemberRoleId(String memberRoleId) {
this.memberRoleId = memberRoleId;
}
@Override
public String getFactionChatChannelId() {
return this.factionChatChannelId;
}
@Override
public void setFactionChatChannelId(String factionChatChannelId) {
this.factionChatChannelId = factionChatChannelId;
}
@Override
public String getWallNotifyChannelId() {
return this.wallNotifyChannelId;
@@ -644,16 +658,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
this.weeWooFormat = weeWooFormat;
}
@Override
public void setFactionChatChannelId(String factionChatChannelId) {
this.factionChatChannelId = factionChatChannelId;
}
@Override
public void setMemberRoleId(String memberRoleId) {
this.memberRoleId = memberRoleId;
}
public boolean isWeeWoo() {
return this.weeWoo;
}
@@ -718,12 +722,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.tag;
}
public void checkPerms() {
if (this.permissions == null || this.permissions.isEmpty()) {
this.resetPerms();
}
}
public void setTag(String str) {
if (Conf.factionTagForceUpperCase) {
str = str.toUpperCase();
@@ -731,6 +729,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
this.tag = str;
}
public void checkPerms() {
if (this.permissions == null || this.permissions.isEmpty()) {
this.resetPerms();
}
}
public String getTag(String prefix) {
return prefix + this.tag;
}
@@ -774,6 +778,11 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
this.home = new LazyLocation(home);
}
public void deleteHome() {
this.home = null;
}
public long getFoundedDate() {
if (this.foundedDate == 0) {
setFoundedDate(System.currentTimeMillis());
@@ -1329,7 +1338,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
}
@Override
public List<String> getCompletedMissions() {return this.completedMissions;}
public List<String> getCompletedMissions() {
return this.completedMissions;
}
public void clearAllClaimOwnership() {
claimOwnership.clear();
@@ -1429,10 +1440,4 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
public Set<FLocation> getAllClaims() {
return Board.getInstance().getAllClaims(this);
}
public void broadcast(String s) {
for (FPlayer fPlayer : getFPlayersWhereOnline(true)) {
fPlayer.sendMessage(s);
}
}
}

View File

@@ -26,7 +26,8 @@ public abstract class MemoryFactions extends Factions {
} else {
Faction faction = factions.get("0");
if (!faction.getTag().equalsIgnoreCase(TL.WILDERNESS.toString())) faction.setTag(TL.WILDERNESS.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.WILDERNESS_DESCRIPTION.toString())) faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.WILDERNESS_DESCRIPTION.toString()))
faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString());
}
// Make sure the safe zone faction exists
@@ -38,7 +39,8 @@ public abstract class MemoryFactions extends Factions {
} else {
Faction faction = factions.get("-1");
if (!faction.getTag().equalsIgnoreCase(TL.SAFEZONE.toString())) faction.setTag(TL.SAFEZONE.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.SAFEZONE_DESCRIPTION.toString())) faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.SAFEZONE_DESCRIPTION.toString()))
faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString());
// if SafeZone has old pre-1.6.0 name, rename it to remove troublesome " "
if (faction.getTag().contains(" ")) faction.setTag(TL.SAFEZONE.toString());
}
@@ -52,7 +54,8 @@ public abstract class MemoryFactions extends Factions {
} else {
Faction faction = factions.get("-2");
if (!faction.getTag().equalsIgnoreCase(TL.WARZONE.toString())) faction.setTag(TL.WARZONE.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.WARZONE_DESCRIPTION.toString())) faction.setDescription(TL.WARZONE_DESCRIPTION.toString());
if (!faction.getDescription().equalsIgnoreCase(TL.WARZONE_DESCRIPTION.toString()))
faction.setDescription(TL.WARZONE_DESCRIPTION.toString());
// if WarZone has old pre-1.6.0 name, rename it to remove troublesome " "
if (faction.getTag().contains(" ")) faction.setTag(TL.WARZONE.toString());
}
@@ -89,7 +92,7 @@ public abstract class MemoryFactions extends Factions {
if (lendiff < best || best == 0)
best = lendiff;
bestMatch = faction;
bestMatch = faction;
}
return bestMatch;
}

View File

@@ -1,6 +1,5 @@
package com.massivecraft.factions.zcore.persist.json;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

View File

@@ -47,7 +47,7 @@ public class PermUtil {
public boolean has(CommandSender me, String perm, boolean informSenderIfNot) {
if (has(me, perm))
return true;
else if (informSenderIfNot && me != null)
else if (informSenderIfNot && me != null)
me.sendMessage(this.getForbiddenMessage(perm));
return false;
}

View File

@@ -242,6 +242,14 @@ public enum TL {
COMMAND_CLAIM_DENIED("&c&l[!]&7 You &cdo not &7have &cpermission&7 to &cclaim&7 in a radius."),
COMMAND_CLAIM_DESCRIPTION("Claim land from where you are standing"),
COMMAND_CLAIMFILL_DESCRIPTION("Claim land filling in a gap in claims"),
COMMAND_CLAIMFILL_ABOVEMAX("&cThe maximum limit for claim fill is %s."),
COMMAND_CLAIMFILL_ALREADYCLAIMED("&cCannot claim fill using already claimed land!"),
COMMAND_CLAIMFILL_TOOFAR("&cThis fill would exceed the maximum distance of %.2f"),
COMMAND_CLAIMFILL_PASTLIMIT("&cThis claim would exceed the limit!"),
COMMAND_CLAIMFILL_NOTENOUGHLANDLEFT("%s &cdoes not have enough land left to make %d claims"),
COMMAND_CLAIMFILL_TOOMUCHFAIL("&cAborting claim fill after %d failures"),
COMMAND_CLAIMLINE_INVALIDRADIUS("&c&l[!]&7 If you &cspecify&7 a distance, it must be at least &c1&7."),
COMMAND_CLAIMLINE_DENIED("&c&l[!]&7 You &cdo not &7have&c permission&7 to claim in a line."),
COMMAND_CLAIMLINE_DESCRIPTION("Claim land in a straight line."),
@@ -298,6 +306,11 @@ public enum TL {
COMMAND_CREATE_CREATEDLOG(" created a new faction: "),
COMMAND_CREATE_DESCRIPTION("Create a new faction"),
COMMAND_DELHOME_SUCCESS("%1$s has deleted your faction home"),
COMMAND_DELHOME_DESCRIPTION("delete home of your faction"),
COMMAND_CHECK_DESCRIPTION("manage your factions check system!"),
CHECK_BUFFERS_CHECK("\n &c&lFaction Walls&7 » &bCheck Your Buffers! \n"),
CHECK_WALLS_CHECK("\n &c&lFaction Walls&7 » &bCheck Your Walls! \n"),
@@ -355,12 +368,6 @@ public enum TL {
DISCORD_CODE_INVALID_KEY("That code is invalid, verify the code is correct."),
DISCORD_CODE_INVALID_FORMAT("If you are submitting a code please only type the code. Example message: 0000"),
//Duels
DUEL_REQUEST_REJECTED_FACTION("&c&l[!]&7 %1$s has rejected your duel request"),
DUEL_REQUEST_REJECTED_PLAYER("&c&l[!]&7 %1$s has exited the duel queue"),
DUEL_REQUEST_ACCEPTED_FACTION("&c&l[!]&7 %1$s has accepted your duel request"),
DUEL_REQUEST_ACCEPTED_PLAYER("&c&l[!]&7 %1$s has entered the duel queue"),
COMMAND_DEINVITE_CANDEINVITE("&c&l[!]&7 Players you can &cdeinvite: "),
COMMAND_DEINVITE_CLICKTODEINVITE("&c&l[!]&7 Click to &crevoke&7 invite for &c%1$s"),
@@ -383,6 +390,7 @@ public enum TL {
COMMAND_DESCRIPTION_DESCRIPTION("Change the faction description"),
COMMAND_DISBAND_IMMUTABLE("&c&l[!]&7 &7You &ccannot&7 disband &2Wilderness&7,&e SafeZone&7, or &4WarZone."),
COMMAND_DISBAND_TOO_YOUNG("&c&l[!] &7Your Faction is too young to withdraw money like this!"),
COMMAND_DISBAND_MARKEDPERMANENT("&c&l[!]&7 This faction is designated as&c permanent&7, so you cannot disband it."),
COMMAND_DISBAND_BROADCAST_YOURS("&c&l[!]&7 &c%1$s&7 disbanded your &cfaction."),
COMMAND_DISBAND_BROADCAST_GENERIC("&c&l[!]&7 The Faction &c%1$s&7 was disbanded."),
@@ -1097,7 +1105,7 @@ public enum TL {
GENERIC_YOUMUSTBE("&cYour must be atleast %1$s to do this!"),
GENERIC_MEMBERONLY("&cYou must be in a faction to do this!"),
// MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"),
// MISSION_CREATED_COOLDOWN("&c&l[!] &7Due to your immediate faction creation, you may not start missions for &b%1$s minutes&7!"),
MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"),
MISSION_ALREAD_COMPLETED("&c&l[!] &7You may not restart a mission you have already completed"),
MISSION_MISSION_ACTIVE("&c&l[!] &7This mission is currently active!"),

View File

@@ -171,6 +171,7 @@ scoreboard:
- " &8» &cYour Balance&7: &f{balance}"
- "&7&m---------------------------"
#Formatted ONLY When A User is NOT in a Faction
factionless-enabled: true
factionless:
- "&7&m--------------------------"
@@ -260,6 +261,7 @@ hcf:
buffer-zone: 0
stuck:
Enabled: false
delay: 30
radius: 10
@@ -403,6 +405,7 @@ help:
- '&c/f points &8- &7Check your factions points.'
- '&c/f invsee &8- &7Check a faction members inventory.'
- '&c/f stealth &8- &7Go into stealth mode to not disable enemies flight.'
- '&7&m--------------------&r &e/f help &7&m-----------------------'
############################################################
# +------------------------------------------------------+ #
# | F Permission GUI | #
@@ -593,8 +596,8 @@ fwarp-gui:
# | Faction Creation/Disband Broadcast | #
# +------------------------------------------------------+ #
############################################################
faction-creation-broadcast: true
faction-disband-broadcast: true
faction-creation-broadcast: true #Disabling this will not make faction creation broadcasts appear in chat.
faction-disband-broadcast: true #Disabling this will not make faction disband broadcasts appear in chat.
############################################################
# +------------------------------------------------------+ #
@@ -603,7 +606,7 @@ faction-disband-broadcast: true
############################################################
#Everything else from display names to lores, is managed by lang.yml, so edit it there
f-check:
gui-rows: 3
gui-rows: 3 #Rows for the check gui
wall-check:
Type: COBBLESTONE
slot: 10
@@ -619,13 +622,16 @@ f-check:
# | Faction Invisibility | #
# +------------------------------------------------------+ #
############################################################
See-Invisible-Faction-Members: false
#This option is to see if another faction member can see their faction members that have the invisible potion effect
See-Invisible-Faction-Members: false #ONLY WHEN SCOREBOARD IS ENABLED
############################################################
# +------------------------------------------------------+ #
# | Faction Inventory See | #
# +------------------------------------------------------+ #
############################################################
#This option is the ability to see other faction members inventories
f-inventory-see:
Enabled: true
############################################################
@@ -633,6 +639,7 @@ f-inventory-see:
# | Faction Alt Accounts | #
# +------------------------------------------------------+ #
############################################################
#Faction Alts for extra power, sand printing, afking spawners
f-alts:
Enabled: true
@@ -657,6 +664,7 @@ frules:
# | Faction TNT Bank | #
# +------------------------------------------------------+ #
############################################################
#Faction Tnt Resolved Around A Virtual TNT Bank With Upgrades If Enabled
ftnt:
Enabled: true
Bank-Limit: 250000
@@ -666,6 +674,7 @@ ftnt:
# | Faction Discord | #
# +------------------------------------------------------+ #
############################################################
#This option allows factions to set their discord link to their specific faction
fdiscord:
Enabled: true
@@ -674,6 +683,7 @@ fdiscord:
# | Faction PayPal | #
# +------------------------------------------------------+ #
############################################################
#This option allows factions to set their paypal link to their specific faction
fpaypal:
Enabled: true
@@ -682,6 +692,7 @@ fpaypal:
# | Faction Checkpoints | #
# +------------------------------------------------------+ #
############################################################
#This option is for a quick fast and in a hurry teleport to raids etc.
checkpoints:
Enabled: true
@@ -690,6 +701,7 @@ checkpoints:
# | Faction Near | #
# +------------------------------------------------------+ #
############################################################
#This option is to allow faction members to be seen via /f near
fnear:
Enabled: true
Radius: 50
@@ -699,6 +711,7 @@ fnear:
# | Faction Shop | #
# +------------------------------------------------------+ #
############################################################
#Faction Shop is 100% configurable (See More in shop.yml)
F-Shop:
Enabled: true
GUI:
@@ -763,6 +776,7 @@ f-disband-gui:
# | Faction GracePeriod | #
# +------------------------------------------------------+ #
############################################################
#This option will deny all explosions
f-grace:
Enabled: true
@@ -894,6 +908,8 @@ ffocus:
# | Faction Vault | #
# +------------------------------------------------------+ #
############################################################
#Faction Vaults are a placeable chest that can be accessed
#While maintaining that factor it can still be raided by other factions.
fvault:
Enabled: true
No-Hoppers-near-vault: true
@@ -912,6 +928,8 @@ fvault:
# | Faction Chest | #
# +------------------------------------------------------+ #
############################################################
#Faction Chests are a virtual chest based system that cannot be raided
#Used for storing items that equate to high value of the faction.
fchest:
Enabled: true
Default-Size: 1 #In Rows
@@ -1061,7 +1079,7 @@ fupgrades:
- '&c&lDecreased Spawner Delay'
- '&4&l* &cLevel 1: &f0.10%'
- '&4&l* &cLevel 2: &f0.20%'
- '&4&l* &cLevel 3: &f0.30'
- '&4&l* &cLevel 3: &f0.30%'
- '&f'
- '&c&lCosts'
- '&4&l* &cLevel 1: &f$1,000,000'
@@ -1374,6 +1392,7 @@ Tntfill:
enabled: true
max-radius: 32
max-amount: 64
Wild:
Enabled: true
# Time to wait in seconds #
@@ -1439,61 +1458,6 @@ Wild:
SpawnAboveBlocks: 10
Effects:
- 'NIGHT_VISION'
Duels:
Enabled: true
# Cooldown before a faction can request another faction to duel after dueling
Cooldown: 0
# In minutes
Time: 3
# After individual players receive the request for the duel how long should it take to start in seconds
WaitTime: 60
Broadcast:
BroadcastKill:
Enabled: true
# {team1_remaining} {team2_remaining} {team1_eliminated} {team2_eliminated} {team1_tag} {team2_tag} {eliminated_name}
Format: '&c&lFaction Duels&r &7{eliminated} has been eliminated. {team1_tag} &d{team1_remaining} &7| {team2_tag} &d{team2_remaining}'
BroadcastResult:
Enabled: true
# These placeholders are all for the winning team unless specified otherwise
# {remaining} {tag} {losers_tag}
Format: '&c&lFaction Duels&r &d{tag}&7 has defeated &d{losers_tag}&7 with {remaining} players remaining'
FormatTie: '&c&lFaction Duels&r &d{team1_tag} &7has tied with &d{team2_tag}'
SpawnPoints:
# Please change these to your arena
Team1:
# Make sure each player has somewhere to spawn if max faction size is 10 you need 10 spawn points for each team!
# SpawnPoint format: World,X,Y,Z
1: Duel,0,60,0
2: Duel,5,60,5
3: Duel,10,60,10
Team2:
1: Duel,50,50,50
2: Duel,55,50,55
3: Duel,60,50,60
GUI:
# Responses #
# Accepted: This player is queued for the duel, GUI closes
# Rejected: This player is not included in the duel, GUI closes
# Ignored: This player remains in GUI and no action is taken on their entry in the duel
# This happens when the click type is not left click
FallbackResponse: Ignored
Fill-Item:
Material: GRAY_STAINED_GLASS_PANE
Response: Ignored
Items:
12:
Material: GREEN_STAINED_GLASS_PANE
Name: '&2Accept'
Lore:
- '&2Join your faction''s duel'
Response: Accepted
13:
Material: RED_STAINED_GLASS_PANE
Name: '&cReject'
Lore:
- '&cLeave your faction''s duels'
Response: Rejected
############################################################
# +------------------------------------------------------+ #

View File

@@ -66,7 +66,6 @@ permissions:
factions.kit.halfplayer:
description: Can do all but create factions.
children:
factions.check: true
factions.audit: true
factions.drain: true
factions.wild: true