F map autoupdate during flying fixed.
This commit is contained in:
parent
2426142664
commit
143daad9e6
@ -11,11 +11,6 @@ import java.util.Set;
|
||||
public abstract class Board {
|
||||
protected static Board instance = getBoardImpl();
|
||||
|
||||
//----------------------------------------------//
|
||||
// Get and Set
|
||||
//----------------------------------------------//
|
||||
public abstract String getIdAt(FLocation flocation);
|
||||
|
||||
private static Board getBoardImpl() {
|
||||
switch (Conf.backEnd) {
|
||||
case JSON:
|
||||
@ -28,6 +23,11 @@ public abstract class Board {
|
||||
return instance;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Get and Set
|
||||
//----------------------------------------------//
|
||||
public abstract String getIdAt(FLocation flocation);
|
||||
|
||||
public abstract Faction getFactionAt(FLocation flocation);
|
||||
|
||||
public abstract void setIdAt(String id, FLocation flocation);
|
||||
|
@ -10,21 +10,26 @@ import java.util.*;
|
||||
|
||||
public class Conf {
|
||||
|
||||
// Region Style
|
||||
public static final transient String DYNMAP_STYLE_LINE_COLOR = "#00FF00";
|
||||
public static final transient double DYNMAP_STYLE_LINE_OPACITY = 0.8D;
|
||||
public static final transient int DYNMAP_STYLE_LINE_WEIGHT = 3;
|
||||
public static final transient String DYNMAP_STYLE_FILL_COLOR = "#00FF00";
|
||||
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<>();
|
||||
public static boolean allowNoSlashCommand = true;
|
||||
|
||||
// Colors
|
||||
public static ChatColor colorMember = ChatColor.GREEN;
|
||||
public static ChatColor colorAlly = ChatColor.LIGHT_PURPLE;
|
||||
public static ChatColor colorTruce = ChatColor.DARK_PURPLE;
|
||||
public static ChatColor colorNeutral = ChatColor.WHITE;
|
||||
public static ChatColor colorEnemy = ChatColor.RED;
|
||||
|
||||
public static ChatColor colorPeaceful = ChatColor.GOLD;
|
||||
public static ChatColor colorWilderness = ChatColor.GRAY;
|
||||
public static ChatColor colorSafezone = ChatColor.GOLD;
|
||||
public static ChatColor colorWar = ChatColor.DARK_RED;
|
||||
|
||||
// Power
|
||||
public static double powerPlayerMax = 10.0;
|
||||
public static double powerPlayerMin = -10.0;
|
||||
@ -35,32 +40,24 @@ public class Conf {
|
||||
public static double powerOfflineLossPerDay = 0.0; // players will lose this much power per day offline
|
||||
public static double powerOfflineLossLimit = 0.0; // players will no longer lose power from being offline once their power drops to this amount or less
|
||||
public static double powerFactionMax = 0.0; // if greater than 0, the cap on how much power a faction can have (additional power from players beyond that will act as a "buffer" of sorts)
|
||||
|
||||
public static String prefixAdmin = "***";
|
||||
public static String prefixCoLeader = "**";
|
||||
public static String prefixMod = "*";
|
||||
public static String prefixRecruit = "-";
|
||||
public static String prefixNormal = "+";
|
||||
|
||||
public static int factionTagLengthMin = 3;
|
||||
public static int factionTagLengthMax = 10;
|
||||
public static boolean factionTagForceUpperCase = false;
|
||||
|
||||
public static boolean newFactionsDefaultOpen = false;
|
||||
|
||||
// when faction membership hits this limit, players will no longer be able to join using /f join; default is 0, no limit
|
||||
public static int factionMemberLimit = 0;
|
||||
|
||||
// what faction ID to start new players in when they first join the server; default is 0, "no faction"
|
||||
public static String newPlayerStartingFactionID = "0";
|
||||
|
||||
public static boolean showMapFactionKey = true;
|
||||
public static boolean showNeutralFactionsOnMap = true;
|
||||
public static boolean showEnemyFactionsOnMap = true;
|
||||
|
||||
// Disallow joining/leaving/kicking while power is negative
|
||||
public static boolean canLeaveWithNegativePower = true;
|
||||
|
||||
// Configuration for faction-only chat
|
||||
public static boolean factionOnlyChat = true;
|
||||
// Configuration on the Faction tag in chat messages.
|
||||
@ -78,24 +75,18 @@ public class Conf {
|
||||
public static String allianceChatFormat = ChatColor.LIGHT_PURPLE + "%s:" + ChatColor.WHITE + " %s";
|
||||
public static String truceChatFormat = ChatColor.DARK_PURPLE + "%s:" + ChatColor.WHITE + " %s";
|
||||
public static String modChatFormat = ChatColor.RED + "%s:" + ChatColor.WHITE + " %s";
|
||||
|
||||
public static int enemyFlyCheckRadius = 16;
|
||||
public static boolean noEnderpearlsInFly = false;
|
||||
|
||||
public static boolean broadcastDescriptionChanges = false;
|
||||
public static boolean broadcastTagChanges = false;
|
||||
|
||||
public static double saveToFileEveryXMinutes = 30.0;
|
||||
|
||||
public static double autoLeaveAfterDaysOfInactivity = 10.0;
|
||||
public static double autoLeaveRoutineRunsEveryXMinutes = 5.0;
|
||||
public static int autoLeaveRoutineMaxMillisecondsPerTick = 5; // 1 server tick is roughly 50ms, so default max 10% of a tick
|
||||
public static boolean removePlayerDataWhenBanned = true;
|
||||
public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction.
|
||||
|
||||
public static boolean worldGuardChecking = false;
|
||||
public static boolean worldGuardBuildPriority = false;
|
||||
|
||||
// server logging options
|
||||
public static boolean logFactionCreate = true;
|
||||
public static boolean logFactionDisband = true;
|
||||
@ -106,14 +97,12 @@ public class Conf {
|
||||
public static boolean logLandUnclaims = true;
|
||||
public static boolean logMoneyTransactions = true;
|
||||
public static boolean logPlayerCommands = true;
|
||||
|
||||
// prevent some potential exploits
|
||||
public static boolean handleExploitObsidianGenerators = true;
|
||||
public static boolean handleExploitEnderPearlClipping = true;
|
||||
public static boolean handleExploitInteractionSpam = true;
|
||||
public static boolean handleExploitTNTWaterlog = false;
|
||||
public static boolean handleExploitLiquidFlow = false;
|
||||
|
||||
public static boolean homesEnabled = true;
|
||||
public static boolean homesMustBeInClaimedTerritory = true;
|
||||
public static boolean homesTeleportToOnDeath = true;
|
||||
@ -126,43 +115,32 @@ public class Conf {
|
||||
public static boolean homesTeleportAllowedFromDifferentWorld = true;
|
||||
public static double homesTeleportAllowedEnemyDistance = 32.0;
|
||||
public static boolean homesTeleportIgnoreEnemiesIfInOwnTerritory = true;
|
||||
|
||||
public static boolean disablePVPBetweenNeutralFactions = false;
|
||||
public static boolean disablePVPForFactionlessPlayers = false;
|
||||
public static boolean enablePVPAgainstFactionlessInAttackersLand = false;
|
||||
|
||||
public static int noPVPDamageToOthersForXSecondsAfterLogin = 3;
|
||||
|
||||
public static boolean peacefulTerritoryDisablePVP = true;
|
||||
public static boolean peacefulTerritoryDisableMonsters = false;
|
||||
public static boolean peacefulTerritoryDisableBoom = false;
|
||||
public static boolean peacefulMembersDisablePowerLoss = true;
|
||||
|
||||
public static boolean permanentFactionsDisableLeaderPromotion = false;
|
||||
|
||||
public static boolean claimsMustBeConnected = false;
|
||||
public static boolean claimsCanBeUnconnectedIfOwnedByOtherFaction = true;
|
||||
public static int claimsRequireMinFactionMembers = 1;
|
||||
public static int claimedLandsMax = 0;
|
||||
public static int lineClaimLimit = 5;
|
||||
|
||||
// if someone is doing a radius claim and the process fails to claim land this many times in a row, it will exit
|
||||
public static int radiusClaimFailureLimit = 9;
|
||||
|
||||
public static double considerFactionsReallyOfflineAfterXMinutes = 0.0;
|
||||
|
||||
public static int actionDeniedPainAmount = 1;
|
||||
|
||||
// commands which will be prevented if the player is a member of a permanent faction
|
||||
public static Set<String> permanentFactionMemberDenyCommands = new LinkedHashSet<>();
|
||||
|
||||
// commands which will be prevented when in claimed territory of another faction
|
||||
public static Set<String> territoryNeutralDenyCommands = new LinkedHashSet<>();
|
||||
public static Set<String> territoryEnemyDenyCommands = new LinkedHashSet<>();
|
||||
public static Set<String> territoryAllyDenyCommands = new LinkedHashSet<>();
|
||||
public static Set<String> warzoneDenyCommands = new LinkedHashSet<>();
|
||||
public static Set<String> wildernessDenyCommands = new LinkedHashSet<>();
|
||||
|
||||
public static boolean territoryDenyBuild = true;
|
||||
public static boolean territoryDenyBuildWhenOffline = true;
|
||||
public static boolean territoryPainBuild = false;
|
||||
@ -194,13 +172,11 @@ public class Conf {
|
||||
public static boolean territoryBlockTNTWhenOffline = false;
|
||||
public static boolean territoryDenyEndermanBlocks = true;
|
||||
public static boolean territoryDenyEndermanBlocksWhenOffline = true;
|
||||
|
||||
public static boolean safeZoneDenyBuild = true;
|
||||
public static boolean safeZoneDenyUseage = true;
|
||||
public static boolean safeZoneBlockTNT = true;
|
||||
public static boolean safeZonePreventAllDamageToPlayers = false;
|
||||
public static boolean safeZoneDenyEndermanBlocks = true;
|
||||
|
||||
public static boolean warZoneDenyBuild = true;
|
||||
public static boolean warZoneDenyUseage = true;
|
||||
public static boolean warZoneBlockCreepers = false;
|
||||
@ -209,7 +185,6 @@ public class Conf {
|
||||
public static boolean warZonePowerLoss = true;
|
||||
public static boolean warZoneFriendlyFire = false;
|
||||
public static boolean warZoneDenyEndermanBlocks = true;
|
||||
|
||||
public static boolean wildernessDenyBuild = false;
|
||||
public static boolean wildernessDenyUseage = false;
|
||||
public static boolean wildernessBlockCreepers = false;
|
||||
@ -217,7 +192,6 @@ public class Conf {
|
||||
public static boolean wildernessBlockTNT = false;
|
||||
public static boolean wildernessPowerLoss = true;
|
||||
public static boolean wildernessDenyEndermanBlocks = false;
|
||||
|
||||
// for claimed areas where further faction-member ownership can be defined
|
||||
public static boolean ownedAreasEnabled = true;
|
||||
public static int ownedAreasLimitPerFaction = 0;
|
||||
@ -227,18 +201,14 @@ public class Conf {
|
||||
public static boolean ownedAreaPainBuild = false;
|
||||
public static boolean ownedAreaProtectMaterials = true;
|
||||
public static boolean ownedAreaDenyUseage = true;
|
||||
|
||||
public static boolean ownedMessageOnBorder = true;
|
||||
public static boolean ownedMessageInsideTerritory = true;
|
||||
public static boolean ownedMessageByChunk = false;
|
||||
|
||||
public static boolean pistonProtectionThroughDenyBuild = true;
|
||||
|
||||
public static Set<Material> territoryProtectedMaterials = EnumSet.noneOf(Material.class);
|
||||
public static Set<Material> territoryDenyUseageMaterials = EnumSet.noneOf(Material.class);
|
||||
public static Set<Material> territoryProtectedMaterialsWhenOffline = EnumSet.noneOf(Material.class);
|
||||
public static Set<Material> territoryDenyUseageMaterialsWhenOffline = EnumSet.noneOf(Material.class);
|
||||
|
||||
public static transient Set<EntityType> safeZoneNerfedCreatureTypes = EnumSet.noneOf(EntityType.class);
|
||||
// Economy settings
|
||||
public static boolean econEnabled = false;
|
||||
@ -264,6 +234,11 @@ public class Conf {
|
||||
public static double econCostMap = 0.0;
|
||||
public static double econCostPower = 0.0;
|
||||
public static double econCostShow = 0.0;
|
||||
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INTEGRATION: DYNMAP
|
||||
// -------------------------------------------- //
|
||||
public static double econCostStuck = 0.0;
|
||||
public static double econCostOpen = 0.0;
|
||||
public static double econCostAlly = 0.0;
|
||||
@ -271,27 +246,16 @@ public class Conf {
|
||||
public static double econCostEnemy = 0.0;
|
||||
public static double econCostNeutral = 0.0;
|
||||
public static double econCostNoBoom = 0.0;
|
||||
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INTEGRATION: DYNMAP
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Should the dynmap intagration be used?
|
||||
public static boolean dynmapUse = false;
|
||||
|
||||
// Name of the Factions layer
|
||||
public static String dynmapLayerName = "Factions";
|
||||
|
||||
// Should the layer be visible per default
|
||||
public static boolean dynmapLayerVisible = true;
|
||||
|
||||
// Ordering priority in layer menu (low goes before high - default is 0)
|
||||
public static int dynmapLayerPriority = 2;
|
||||
|
||||
// (optional) set minimum zoom level before layer is visible (0 = default, always visible)
|
||||
public static int dynmapLayerMinimumZoom = 0;
|
||||
|
||||
// Format for popup - substitute values for macros
|
||||
public static String dynmapDescription =
|
||||
"<div class=\"infowindow\">\n"
|
||||
@ -307,33 +271,19 @@ public class Conf {
|
||||
+ "<span style=\"font-weight: bold;\">Bank:</span> %money%<br>\n"
|
||||
+ "<br>\n"
|
||||
+ "</div>";
|
||||
|
||||
// Enable the %money% macro. Only do this if you know your economy manager is thread-safe.
|
||||
public static boolean dynmapDescriptionMoney = false;
|
||||
|
||||
// Allow players in faction to see one another on Dynmap (only relevant if Dynmap has 'player-info-protected' enabled)
|
||||
public static boolean dynmapVisibilityByFaction = true;
|
||||
|
||||
// Optional setting to limit which regions to show.
|
||||
// If empty all regions are shown.
|
||||
// Specify Faction either by name or UUID.
|
||||
// To show all regions on a given world, add 'world:<worldname>' to the list.
|
||||
public static Set<String> dynmapVisibleFactions = new HashSet<>();
|
||||
|
||||
// Optional setting to hide specific Factions.
|
||||
// Specify Faction either by name or UUID.
|
||||
// To hide all regions on a given world, add 'world:<worldname>' to the list.
|
||||
public static Set<String> dynmapHiddenFactions = new HashSet<>();
|
||||
|
||||
// Region Style
|
||||
public static final transient String DYNMAP_STYLE_LINE_COLOR = "#00FF00";
|
||||
public static final transient double DYNMAP_STYLE_LINE_OPACITY = 0.8D;
|
||||
public static final transient int DYNMAP_STYLE_LINE_WEIGHT = 3;
|
||||
public static final transient String DYNMAP_STYLE_FILL_COLOR = "#00FF00";
|
||||
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 DynmapStyle dynmapDefaultStyle = new DynmapStyle()
|
||||
.setStrokeColor(DYNMAP_STYLE_LINE_COLOR)
|
||||
.setLineOpacity(DYNMAP_STYLE_LINE_OPACITY)
|
||||
@ -375,6 +325,10 @@ public class Conf {
|
||||
public static int mapHeight = 17;
|
||||
public static int mapWidth = 49;
|
||||
public static transient char[] mapKeyChrs = "\\/#$%=&^ABCDEFGHJKLMNOPQRSTUVWXYZ1234567890abcdeghjmnopqrsuvwxyz?".toCharArray();
|
||||
// -------------------------------------------- //
|
||||
// Persistance
|
||||
// -------------------------------------------- //
|
||||
private static transient Conf i = new Conf();
|
||||
|
||||
static {
|
||||
baseCommandAliases.add("f");
|
||||
@ -455,11 +409,6 @@ public class Conf {
|
||||
safeZoneNerfedCreatureTypes.add(EntityType.ZOMBIE);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Persistance
|
||||
// -------------------------------------------- //
|
||||
private static transient Conf i = new Conf();
|
||||
|
||||
public static void load() {
|
||||
P.p.persist.loadOrSaveDefault(i, Conf.class, "conf");
|
||||
}
|
||||
|
@ -13,9 +13,6 @@ import java.util.Set;
|
||||
public class FLocation implements Serializable {
|
||||
private static final long serialVersionUID = -8292915234027387983L;
|
||||
private static final boolean worldBorderSupport;
|
||||
private String worldName = "world";
|
||||
private int x = 0;
|
||||
private int z = 0;
|
||||
|
||||
static {
|
||||
boolean worldBorderClassPresent = false;
|
||||
@ -28,6 +25,10 @@ public class FLocation implements Serializable {
|
||||
worldBorderSupport = worldBorderClassPresent;
|
||||
}
|
||||
|
||||
private String worldName = "world";
|
||||
private int x = 0;
|
||||
private int z = 0;
|
||||
|
||||
//----------------------------------------------//
|
||||
// Constructors
|
||||
//----------------------------------------------//
|
||||
@ -62,43 +63,6 @@ public class FLocation implements Serializable {
|
||||
// Getters and Setters
|
||||
//----------------------------------------------//
|
||||
|
||||
public String getWorldName() {
|
||||
return worldName;
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return Bukkit.getWorld(worldName);
|
||||
}
|
||||
|
||||
public void setWorldName(String worldName) {
|
||||
this.worldName = worldName;
|
||||
}
|
||||
|
||||
public long getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public long getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public void setZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public String getCoordString() {
|
||||
return "" + x + "," + z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[" + this.getWorldName() + "," + this.getCoordString() + "]";
|
||||
}
|
||||
|
||||
public static FLocation fromString(String string) {
|
||||
int index = string.indexOf(",", 0);
|
||||
int start = 1;
|
||||
@ -110,10 +74,6 @@ public class FLocation implements Serializable {
|
||||
return new FLocation(worldName, x, y);
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Block/Chunk/Region Value Transformation
|
||||
//----------------------------------------------//
|
||||
|
||||
// bit-shifting is used because it's much faster than standard division and multiplication
|
||||
public static int blockToChunk(int blockVal) { // 1 chunk is 16x16 blocks
|
||||
return blockVal >> 4; // ">> 4" == "/ 16"
|
||||
@ -139,10 +99,63 @@ public class FLocation implements Serializable {
|
||||
return regionVal << 5; // "<< 5" == "* 32"
|
||||
}
|
||||
|
||||
public static HashSet<FLocation> getArea(FLocation from, FLocation to) {
|
||||
HashSet<FLocation> ret = new HashSet<>();
|
||||
|
||||
for (long x : MiscUtil.range(from.getX(), to.getX())) {
|
||||
for (long z : MiscUtil.range(from.getZ(), to.getZ())) {
|
||||
ret.add(new FLocation(from.getWorldName(), (int) x, (int) z));
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public String getWorldName() {
|
||||
return worldName;
|
||||
}
|
||||
|
||||
public void setWorldName(String worldName) {
|
||||
this.worldName = worldName;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Block/Chunk/Region Value Transformation
|
||||
//----------------------------------------------//
|
||||
|
||||
public World getWorld() {
|
||||
return Bukkit.getWorld(worldName);
|
||||
}
|
||||
|
||||
public long getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public long getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public void setZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public String getCoordString() {
|
||||
return "" + x + "," + z;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Misc Geometry
|
||||
//----------------------------------------------//
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[" + this.getWorldName() + "," + this.getCoordString() + "]";
|
||||
}
|
||||
|
||||
public FLocation getRelative(int dx, int dz) {
|
||||
return new FLocation(this.worldName, this.x + dx, this.z + dz);
|
||||
}
|
||||
@ -215,18 +228,6 @@ public class FLocation implements Serializable {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static HashSet<FLocation> getArea(FLocation from, FLocation to) {
|
||||
HashSet<FLocation> ret = new HashSet<>();
|
||||
|
||||
for (long x : MiscUtil.range(from.getX(), to.getX())) {
|
||||
for (long z : MiscUtil.range(from.getZ(), to.getZ())) {
|
||||
ret.add(new FLocation(from.getWorldName(), (int) x, (int) z));
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Comparison
|
||||
//----------------------------------------------//
|
||||
|
@ -332,7 +332,4 @@ public interface FPlayer extends EconomyParticipator {
|
||||
void clearWarmup();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -9,8 +9,6 @@ import java.util.Collection;
|
||||
public abstract class FPlayers {
|
||||
protected static FPlayers instance = getFPlayersImpl();
|
||||
|
||||
public abstract void clean();
|
||||
|
||||
public static FPlayers getInstance() {
|
||||
return instance;
|
||||
}
|
||||
@ -23,6 +21,8 @@ public abstract class FPlayers {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract void clean();
|
||||
|
||||
public abstract Collection<FPlayer> getOnlinePlayers();
|
||||
|
||||
public abstract FPlayer getByPlayer(Player player);
|
||||
|
@ -8,6 +8,18 @@ import java.util.Set;
|
||||
public abstract class Factions {
|
||||
protected static Factions instance = getFactionsImpl();
|
||||
|
||||
public static Factions getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private static Factions getFactionsImpl() {
|
||||
switch (Conf.backEnd) {
|
||||
case JSON:
|
||||
return new JSONFactions();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract Faction getFactionById(String id);
|
||||
|
||||
public abstract Faction getByTag(String str);
|
||||
@ -39,17 +51,5 @@ public abstract class Factions {
|
||||
|
||||
public abstract void forceSave(boolean sync);
|
||||
|
||||
public static Factions getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private static Factions getFactionsImpl() {
|
||||
switch (Conf.backEnd) {
|
||||
case JSON:
|
||||
return new JSONFactions();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract void load();
|
||||
}
|
||||
|
@ -49,13 +49,24 @@ public class P extends MPlugin {
|
||||
public static Permission perms = null;
|
||||
|
||||
|
||||
|
||||
public boolean PlaceholderApi;
|
||||
|
||||
|
||||
// Commands
|
||||
public FCmdRoot cmdBase;
|
||||
public CmdAutoHelp cmdAutoHelp;
|
||||
public boolean mc17 = false;
|
||||
public boolean mc18 = false;
|
||||
public boolean factionsFlight = false;
|
||||
ItemStack item = new ItemStack(Material.CAKE);
|
||||
// Persistence related
|
||||
private boolean locked = false;
|
||||
private Integer AutoLeaveTask = null;
|
||||
private boolean hookedPlayervaults;
|
||||
private ClipPlaceholderAPIManager clipPlaceholderAPIManager;
|
||||
private boolean mvdwPlaceholderAPIManager = false;
|
||||
|
||||
public P() {
|
||||
p = this;
|
||||
}
|
||||
|
||||
public boolean getLocked() {
|
||||
return this.locked;
|
||||
@ -66,7 +77,6 @@ public class P extends MPlugin {
|
||||
this.setAutoSave(val);
|
||||
}
|
||||
|
||||
private Integer AutoLeaveTask = null;
|
||||
public void playSoundForAll(String sound) {
|
||||
for (Player pl : Bukkit.getOnlinePlayers()) {
|
||||
playSound(pl, sound);
|
||||
@ -90,22 +100,6 @@ public class P extends MPlugin {
|
||||
sound = sound.split(":")[0];
|
||||
p.playSound(p.getLocation(), Sound.valueOf(sound), pitch, 5.0F);
|
||||
}
|
||||
// Commands
|
||||
public FCmdRoot cmdBase;
|
||||
public CmdAutoHelp cmdAutoHelp;
|
||||
|
||||
private boolean hookedPlayervaults;
|
||||
private ClipPlaceholderAPIManager clipPlaceholderAPIManager;
|
||||
private boolean mvdwPlaceholderAPIManager = false;
|
||||
|
||||
public P() {
|
||||
p = this;
|
||||
}
|
||||
|
||||
public boolean mc17 = false;
|
||||
public boolean mc18 = false;
|
||||
public boolean factionsFlight = false;
|
||||
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
@ -183,9 +177,6 @@ public class P extends MPlugin {
|
||||
this.getCommand(this.refCommand).setExecutor(this);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
setupPlaceholderAPI();
|
||||
postEnable();
|
||||
this.loadSuccessful = true;
|
||||
@ -245,7 +236,8 @@ public class P extends MPlugin {
|
||||
Type accessTypeAdatper = new TypeToken<Map<Permissable, Map<PermissableAction, Access>>>() {
|
||||
}.getType();
|
||||
|
||||
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().enableComplexMapKeySerialization().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE).registerTypeAdapter(accessTypeAdatper, new PermissionsMapTypeAdapter()).registerTypeAdapter(LazyLocation.class, new MyLocationTypeAdapter()).registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter()).registerTypeAdapterFactory(EnumTypeAdapter.ENUM_FACTORY); }
|
||||
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().enableComplexMapKeySerialization().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE).registerTypeAdapter(accessTypeAdatper, new PermissionsMapTypeAdapter()).registerTypeAdapter(LazyLocation.class, new MyLocationTypeAdapter()).registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter()).registerTypeAdapterFactory(EnumTypeAdapter.ENUM_FACTORY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
@ -280,6 +272,7 @@ public class P extends MPlugin {
|
||||
//Board.getInstance().forceSave(); Not sure why this was there as it's called after the board is already saved.
|
||||
Conf.save();
|
||||
}
|
||||
|
||||
public ItemStack createItem(Material material, int amount, short datavalue, String name, List<String> lore) {
|
||||
ItemStack item = new ItemStack(material, amount, datavalue);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
@ -303,6 +296,7 @@ public class P extends MPlugin {
|
||||
Economy econ = rsp.getProvider();
|
||||
return econ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean logPlayerCommands() {
|
||||
return Conf.logPlayerCommands;
|
||||
|
@ -75,7 +75,6 @@ public class CmdBan extends FCommand {
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Ban the user.
|
||||
myFaction.ban(target, fme);
|
||||
myFaction.deinvite(target); // can't hurt
|
||||
|
@ -4,7 +4,6 @@ import com.massivecraft.factions.Conf;
|
||||
import com.massivecraft.factions.struct.ChatMode;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class CmdChat extends FCommand {
|
||||
|
||||
@ -56,8 +55,7 @@ public class CmdChat extends FCommand {
|
||||
|
||||
fme.setChatMode(modeTarget);
|
||||
|
||||
if (fme.getChatMode() == ChatMode.MOD)
|
||||
{
|
||||
if (fme.getChatMode() == ChatMode.MOD) {
|
||||
msg(TL.COMMAND_CHAT_MODE_MOD);
|
||||
} else if (fme.getChatMode() == ChatMode.PUBLIC) {
|
||||
msg(TL.COMMAND_CHAT_MODE_PUBLIC);
|
||||
|
@ -50,8 +50,8 @@ public class CmdClaim extends FCommand {
|
||||
}
|
||||
|
||||
new SpiralTask(new FLocation(me), radius) {
|
||||
private int failCount = 0;
|
||||
private final int limit = Conf.radiusClaimFailureLimit - 1;
|
||||
private int failCount = 0;
|
||||
|
||||
@Override
|
||||
public boolean work() {
|
||||
|
@ -4,7 +4,6 @@ import com.massivecraft.factions.FPlayer;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class CmdCoords extends FCommand {
|
||||
|
||||
|
@ -24,6 +24,7 @@ public class CmdFly extends FCommand {
|
||||
public static ConcurrentHashMap<String, Boolean> flyMap = new ConcurrentHashMap<String, Boolean>();
|
||||
public static int id = -1;
|
||||
public static int flyid = -1;
|
||||
|
||||
public CmdFly() {
|
||||
super();
|
||||
this.aliases.add("fly");
|
||||
@ -139,16 +140,23 @@ public class CmdFly extends FCommand {
|
||||
return ((player.hasPermission("factions.fly.neutral") || access == Access.ALLOW) && toFac.getRelationTo(fplayer.getFaction()) == Relation.NEUTRAL && !isSystemFaction(toFac));
|
||||
}
|
||||
|
||||
public boolean isInFlightChecker(Player player) {
|
||||
return flyMap.containsKey(player.getName());
|
||||
}
|
||||
|
||||
public static Boolean isSystemFaction(Faction faction) {
|
||||
return faction.isSafeZone() ||
|
||||
faction.isWarZone() ||
|
||||
faction.isWilderness();
|
||||
}
|
||||
|
||||
public static void checkTaskState() {
|
||||
if (flyMap.keySet().size() == 0) {
|
||||
Bukkit.getScheduler().cancelTask(flyid);
|
||||
flyid = -1;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isInFlightChecker(Player player) {
|
||||
return flyMap.containsKey(player.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void perform() {
|
||||
// Disabled by default.
|
||||
@ -193,16 +201,12 @@ public class CmdFly extends FCommand {
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<Entity> entities = me.getNearbyEntities(16, 256, 16);
|
||||
for (int i = 0; i <= entities.size() -1;i++)
|
||||
{
|
||||
if (entities.get(i) instanceof Player)
|
||||
{
|
||||
for (int i = 0; i <= entities.size() - 1; i++) {
|
||||
if (entities.get(i) instanceof Player) {
|
||||
Player eplayer = (Player) entities.get(i);
|
||||
FPlayer efplayer = FPlayers.getInstance().getByPlayer(eplayer);
|
||||
if (efplayer.getRelationTo(fme) == Relation.ENEMY)
|
||||
{
|
||||
if (efplayer.getRelationTo(fme) == Relation.ENEMY) {
|
||||
fme.msg(TL.COMMAND_FLY_CHECK_ENEMY);
|
||||
return;
|
||||
}
|
||||
@ -217,13 +221,6 @@ public class CmdFly extends FCommand {
|
||||
}
|
||||
}
|
||||
|
||||
public static void checkTaskState() {
|
||||
if (flyMap.keySet().size() == 0) {
|
||||
Bukkit.getScheduler().cancelTask(flyid);
|
||||
flyid = -1;
|
||||
}
|
||||
}
|
||||
|
||||
private void toggleFlight(final boolean toggle, final Player player) {
|
||||
if (!toggle) {
|
||||
fme.setFlying(false);
|
||||
|
@ -13,6 +13,8 @@ import java.util.List;
|
||||
|
||||
public class CmdHelp extends FCommand {
|
||||
|
||||
public ArrayList<ArrayList<String>> helpPages;
|
||||
|
||||
public CmdHelp() {
|
||||
super();
|
||||
this.aliases.add("help");
|
||||
@ -32,6 +34,10 @@ public class CmdHelp extends FCommand {
|
||||
senderMustBeAdmin = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Build the help pages
|
||||
//----------------------------------------------//
|
||||
|
||||
@Override
|
||||
public void perform() {
|
||||
if (P.p.getConfig().getBoolean("use-old-help", true)) {
|
||||
@ -70,12 +76,6 @@ public class CmdHelp extends FCommand {
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Build the help pages
|
||||
//----------------------------------------------//
|
||||
|
||||
public ArrayList<ArrayList<String>> helpPages;
|
||||
|
||||
public void updateHelp() {
|
||||
helpPages = new ArrayList<>();
|
||||
ArrayList<String> pageLines;
|
||||
|
@ -3,8 +3,7 @@ package com.massivecraft.factions.cmd;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
|
||||
public class CmdInspect extends FCommand
|
||||
{
|
||||
public class CmdInspect extends FCommand {
|
||||
public CmdInspect() {
|
||||
super();
|
||||
this.aliases.add("inspect");
|
||||
|
@ -2,7 +2,6 @@ package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.massivecraft.factions.Conf;
|
||||
import com.massivecraft.factions.FPlayer;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
|
||||
public class CmdLowPower extends FCommand {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.earth2me.essentials.Console;
|
||||
import com.massivecraft.factions.Faction;
|
||||
import com.massivecraft.factions.integration.Econ;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.massivecraft.factions.P;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.struct.Relation;
|
||||
import com.massivecraft.factions.struct.Role;
|
||||
import com.massivecraft.factions.zcore.fperms.Access;
|
||||
|
@ -20,17 +20,15 @@ import java.util.List;
|
||||
|
||||
public class CmdSeeChunk extends FCommand {
|
||||
|
||||
private boolean useParticles;
|
||||
private int length;
|
||||
|
||||
private ParticleEffect effect;
|
||||
//Used a hashmap cuz imma make a particle selection gui later, will store it where the boolean is rn.
|
||||
public static HashMap<String, Boolean> seeChunkMap = new HashMap<>();
|
||||
Long interval = 10L;
|
||||
private boolean useParticles;
|
||||
private int length;
|
||||
private ParticleEffect effect;
|
||||
private int taskID = -1;
|
||||
|
||||
|
||||
|
||||
//I remade it cause of people getting mad that I had the same seechunk as drtshock
|
||||
|
||||
|
||||
|
@ -3,15 +3,8 @@ package com.massivecraft.factions.cmd;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
import com.massivecraft.factions.FLocation;
|
||||
import com.massivecraft.factions.Faction;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.World;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class CmdShowClaims extends FCommand {
|
||||
|
||||
@ -54,10 +47,6 @@ public class CmdShowClaims extends FCommand{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -6,10 +6,8 @@ import com.massivecraft.factions.struct.Role;
|
||||
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.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Dispenser;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
@ -42,7 +40,6 @@ public class CmdTntFill extends FCommand {
|
||||
}
|
||||
|
||||
|
||||
|
||||
msg(TL.COMMAND_TNTFILL_HEADER);
|
||||
int radius = argAsInt(0, 16);
|
||||
int amount = argAsInt(1, 16);
|
||||
@ -121,9 +118,6 @@ public class CmdTntFill extends FCommand {
|
||||
me.updateInventory();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void removeFromBank(int amount) {
|
||||
|
@ -49,8 +49,8 @@ public class CmdUnclaim extends FCommand {
|
||||
}
|
||||
|
||||
new SpiralTask(new FLocation(me), radius) {
|
||||
private int failCount = 0;
|
||||
private final int limit = Conf.radiusClaimFailureLimit - 1;
|
||||
private int failCount = 0;
|
||||
|
||||
@Override
|
||||
public boolean work() {
|
||||
|
@ -1,25 +1,15 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.drtshock.playervaults.PlayerVaults;
|
||||
import com.drtshock.playervaults.translations.Lang;
|
||||
import com.drtshock.playervaults.vaultmanagement.UUIDVaultManager;
|
||||
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
|
||||
import com.drtshock.playervaults.vaultmanagement.VaultViewInfo;
|
||||
import com.massivecraft.factions.Board;
|
||||
import com.massivecraft.factions.Conf;
|
||||
import com.massivecraft.factions.FLocation;
|
||||
import com.massivecraft.factions.P;
|
||||
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.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class CmdVault extends FCommand {
|
||||
@ -79,7 +69,6 @@ public class CmdVault extends FCommand {
|
||||
me.openInventory(chestInv);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,7 +111,6 @@ public abstract class FCommand extends MCommand<P> {
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -266,13 +265,10 @@ public abstract class FCommand extends MCommand<P> {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (you.getRole().equals(Role.ADMIN))
|
||||
{
|
||||
if (you.getRole().equals(Role.ADMIN)) {
|
||||
i.sendMessage(p.txt.parse("<b>Only the faction admin can do that."));
|
||||
|
||||
}
|
||||
else if ((you.getRole().equals(Role.COLEADER)))
|
||||
{
|
||||
} else if ((you.getRole().equals(Role.COLEADER))) {
|
||||
if (i == you) {
|
||||
return true;
|
||||
} else {
|
||||
|
@ -12,10 +12,6 @@ public class FPlayerJoinEvent extends FactionPlayerEvent implements Cancellable
|
||||
PlayerJoinReason reason;
|
||||
boolean cancelled = false;
|
||||
|
||||
public enum PlayerJoinReason {
|
||||
CREATE, LEADER, COMMAND
|
||||
}
|
||||
|
||||
public FPlayerJoinEvent(FPlayer fp, Faction f, PlayerJoinReason r) {
|
||||
super(f, fp);
|
||||
reason = r;
|
||||
@ -39,4 +35,8 @@ public class FPlayerJoinEvent extends FactionPlayerEvent implements Cancellable
|
||||
public void setCancelled(boolean c) {
|
||||
cancelled = c;
|
||||
}
|
||||
|
||||
public enum PlayerJoinReason {
|
||||
CREATE, LEADER, COMMAND
|
||||
}
|
||||
}
|
@ -6,12 +6,8 @@ import org.bukkit.event.Cancellable;
|
||||
|
||||
public class FPlayerLeaveEvent extends FactionPlayerEvent implements Cancellable {
|
||||
|
||||
private PlayerLeaveReason reason;
|
||||
boolean cancelled = false;
|
||||
|
||||
public enum PlayerLeaveReason {
|
||||
KICKED, DISBAND, RESET, JOINOTHER, LEAVE, BANNED
|
||||
}
|
||||
private PlayerLeaveReason reason;
|
||||
|
||||
public FPlayerLeaveEvent(FPlayer p, Faction f, PlayerLeaveReason r) {
|
||||
super(f, p);
|
||||
@ -37,4 +33,8 @@ public class FPlayerLeaveEvent extends FactionPlayerEvent implements Cancellable
|
||||
// Don't let them cancel factions disbanding.
|
||||
cancelled = reason != PlayerLeaveReason.DISBAND && reason != PlayerLeaveReason.RESET && c;
|
||||
}
|
||||
|
||||
public enum PlayerLeaveReason {
|
||||
KICKED, DISBAND, RESET, JOINOTHER, LEAVE, BANNED
|
||||
}
|
||||
}
|
@ -24,6 +24,10 @@ public class FactionCreateEvent extends Event implements Cancellable {
|
||||
this.cancelled = false;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public FPlayer getFPlayer() {
|
||||
return FPlayers.getInstance().getByPlayer(sender);
|
||||
}
|
||||
@ -36,10 +40,6 @@ public class FactionCreateEvent extends Event implements Cancellable {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
|
@ -16,6 +16,10 @@ public class FactionEvent extends Event {
|
||||
this.faction = faction;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Faction involved in the event.
|
||||
*
|
||||
@ -29,8 +33,4 @@ public class FactionEvent extends Event {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,11 +24,11 @@ public class FactionRelationEvent extends Event {
|
||||
frel = rel;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers() {
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ import java.util.logging.Level;
|
||||
|
||||
public class Econ {
|
||||
|
||||
private static final DecimalFormat format = new DecimalFormat(TL.ECON_FORMAT.toString());
|
||||
private static Economy econ = null;
|
||||
|
||||
public static void setup() {
|
||||
@ -61,7 +62,6 @@ public class Econ {
|
||||
return econ != null;
|
||||
}
|
||||
|
||||
|
||||
public static void modifyUniverseMoney(double delta) {
|
||||
if (!shouldBeUsed()) {
|
||||
return;
|
||||
@ -369,16 +369,16 @@ public class Econ {
|
||||
return amount;
|
||||
}
|
||||
|
||||
// calculate refund amount for all owned land
|
||||
public static double calculateTotalLandRefund(int ownedLand) {
|
||||
return calculateTotalLandValue(ownedLand) * Conf.econClaimRefundMultiplier;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Standard account management methods
|
||||
// -------------------------------------------- //
|
||||
|
||||
// calculate refund amount for all owned land
|
||||
public static double calculateTotalLandRefund(int ownedLand) {
|
||||
return calculateTotalLandValue(ownedLand) * Conf.econClaimRefundMultiplier;
|
||||
}
|
||||
|
||||
public static boolean hasAccount(String name) {
|
||||
return econ.hasAccount(name);
|
||||
}
|
||||
@ -387,8 +387,6 @@ public class Econ {
|
||||
return econ.getBalance(account);
|
||||
}
|
||||
|
||||
private static final DecimalFormat format = new DecimalFormat(TL.ECON_FORMAT.toString());
|
||||
|
||||
public static String getFriendlyBalance(UUID uuid) {
|
||||
OfflinePlayer offline = Bukkit.getOfflinePlayer(uuid);
|
||||
if (offline.getName() == null) {
|
||||
|
@ -8,89 +8,16 @@ public class DynmapStyle {
|
||||
// -------------------------------------------- //
|
||||
|
||||
public String lineColor = null;
|
||||
|
||||
public int getLineColor() {
|
||||
return getColor(coalesce(this.lineColor, Conf.dynmapDefaultStyle.lineColor, Conf.DYNMAP_STYLE_LINE_COLOR));
|
||||
}
|
||||
|
||||
public DynmapStyle setStrokeColor(String strokeColor) {
|
||||
this.lineColor = strokeColor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Double lineOpacity = null;
|
||||
|
||||
public double getLineOpacity() {
|
||||
return coalesce(this.lineOpacity, Conf.dynmapDefaultStyle.lineOpacity, Conf.DYNMAP_STYLE_LINE_OPACITY);
|
||||
}
|
||||
|
||||
public DynmapStyle setLineOpacity(Double strokeOpacity) {
|
||||
this.lineOpacity = strokeOpacity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer lineWeight = null;
|
||||
|
||||
public int getLineWeight() {
|
||||
return coalesce(this.lineWeight, Conf.dynmapDefaultStyle.lineWeight, Conf.DYNMAP_STYLE_LINE_WEIGHT);
|
||||
}
|
||||
|
||||
public DynmapStyle setLineWeight(Integer strokeWeight) {
|
||||
this.lineWeight = strokeWeight;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String fillColor = null;
|
||||
|
||||
public int getFillColor() {
|
||||
return getColor(coalesce(this.fillColor, Conf.dynmapDefaultStyle.fillColor, Conf.DYNMAP_STYLE_FILL_COLOR));
|
||||
}
|
||||
|
||||
public DynmapStyle setFillColor(String fillColor) {
|
||||
this.fillColor = fillColor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Double fillOpacity = null;
|
||||
|
||||
public double getFillOpacity() {
|
||||
return coalesce(this.fillOpacity, Conf.dynmapDefaultStyle.fillOpacity, Conf.DYNMAP_STYLE_FILL_OPACITY);
|
||||
}
|
||||
|
||||
public DynmapStyle setFillOpacity(Double fillOpacity) {
|
||||
this.fillOpacity = fillOpacity;
|
||||
return this;
|
||||
}
|
||||
|
||||
// NOTE: We just return the string here. We do not return the resolved Dynmap MarkerIcon object.
|
||||
// The reason is we use this class in the MConf. For serialization to work Dynmap would have to be loaded and we can't require that.
|
||||
// Using dynmap is optional.
|
||||
public String homeMarker = null;
|
||||
|
||||
public String getHomeMarker() {
|
||||
return coalesce(this.homeMarker, Conf.dynmapDefaultStyle.homeMarker, Conf.DYNMAP_STYLE_HOME_MARKER);
|
||||
}
|
||||
|
||||
public DynmapStyle setHomeMarker(String homeMarker) {
|
||||
this.homeMarker = homeMarker;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Boolean boost = null;
|
||||
|
||||
public boolean getBoost() {
|
||||
return coalesce(this.boost, Conf.dynmapDefaultStyle.boost, Conf.DYNMAP_STYLE_BOOST);
|
||||
}
|
||||
|
||||
public DynmapStyle setBoost(Boolean boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
@SafeVarargs
|
||||
public static <T> T coalesce(T... items) {
|
||||
for (T item : items) {
|
||||
@ -110,4 +37,71 @@ public class DynmapStyle {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int getLineColor() {
|
||||
return getColor(coalesce(this.lineColor, Conf.dynmapDefaultStyle.lineColor, Conf.DYNMAP_STYLE_LINE_COLOR));
|
||||
}
|
||||
|
||||
public DynmapStyle setStrokeColor(String strokeColor) {
|
||||
this.lineColor = strokeColor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public double getLineOpacity() {
|
||||
return coalesce(this.lineOpacity, Conf.dynmapDefaultStyle.lineOpacity, Conf.DYNMAP_STYLE_LINE_OPACITY);
|
||||
}
|
||||
|
||||
public DynmapStyle setLineOpacity(Double strokeOpacity) {
|
||||
this.lineOpacity = strokeOpacity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getLineWeight() {
|
||||
return coalesce(this.lineWeight, Conf.dynmapDefaultStyle.lineWeight, Conf.DYNMAP_STYLE_LINE_WEIGHT);
|
||||
}
|
||||
|
||||
public DynmapStyle setLineWeight(Integer strokeWeight) {
|
||||
this.lineWeight = strokeWeight;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getFillColor() {
|
||||
return getColor(coalesce(this.fillColor, Conf.dynmapDefaultStyle.fillColor, Conf.DYNMAP_STYLE_FILL_COLOR));
|
||||
}
|
||||
|
||||
public DynmapStyle setFillColor(String fillColor) {
|
||||
this.fillColor = fillColor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public double getFillOpacity() {
|
||||
return coalesce(this.fillOpacity, Conf.dynmapDefaultStyle.fillOpacity, Conf.DYNMAP_STYLE_FILL_OPACITY);
|
||||
}
|
||||
|
||||
public DynmapStyle setFillOpacity(Double fillOpacity) {
|
||||
this.fillOpacity = fillOpacity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getHomeMarker() {
|
||||
return coalesce(this.homeMarker, Conf.dynmapDefaultStyle.homeMarker, Conf.DYNMAP_STYLE_HOME_MARKER);
|
||||
}
|
||||
|
||||
public DynmapStyle setHomeMarker(String homeMarker) {
|
||||
this.homeMarker = homeMarker;
|
||||
return this;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public boolean getBoost() {
|
||||
return coalesce(this.boost, Conf.dynmapDefaultStyle.boost, Conf.DYNMAP_STYLE_BOOST);
|
||||
}
|
||||
|
||||
public DynmapStyle setBoost(Boolean boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -41,17 +41,64 @@ public class EngineDynmap {
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static EngineDynmap i = new EngineDynmap();
|
||||
public DynmapAPI dynmapApi;
|
||||
public MarkerAPI markerApi;
|
||||
public MarkerSet markerset;
|
||||
private EngineDynmap() {
|
||||
}
|
||||
|
||||
public static EngineDynmap getInstance() {
|
||||
return i;
|
||||
}
|
||||
|
||||
private EngineDynmap() {
|
||||
public static String getHtmlPlayerString(Collection<FPlayer> playersOfficersList) {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (FPlayer fplayer : playersOfficersList) {
|
||||
if (ret.length() > 0) {
|
||||
ret.append(", ");
|
||||
}
|
||||
ret.append(getHtmlPlayerName(fplayer));
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public DynmapAPI dynmapApi;
|
||||
public MarkerAPI markerApi;
|
||||
public MarkerSet markerset;
|
||||
public static String getHtmlPlayerName(FPlayer fplayer) {
|
||||
if (fplayer == null) {
|
||||
return "none";
|
||||
}
|
||||
return escapeHtml(fplayer.getName());
|
||||
}
|
||||
|
||||
public static String escapeHtml(String string) {
|
||||
StringBuilder out = new StringBuilder(Math.max(16, string.length()));
|
||||
for (int i = 0; i < string.length(); i++) {
|
||||
char c = string.charAt(i);
|
||||
if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&') {
|
||||
out.append("&#");
|
||||
out.append((int) c);
|
||||
out.append(';');
|
||||
} else {
|
||||
out.append(c);
|
||||
}
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public static void info(String msg) {
|
||||
String message = DYNMAP_INTEGRATION + msg;
|
||||
System.out.println(message);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE: HOMES
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public static void severe(String msg) {
|
||||
String message = DYNMAP_INTEGRATION + ChatColor.RED.toString() + msg;
|
||||
System.out.println(message);
|
||||
}
|
||||
|
||||
public void init() {
|
||||
Plugin dynmap = Bukkit.getServer().getPluginManager().getPlugin("dynmap");
|
||||
@ -94,6 +141,10 @@ public class EngineDynmap {
|
||||
}, 100L, 100L);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE: AREAS
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe / Asynchronous: No
|
||||
public boolean updateCore() {
|
||||
// Get DynmapAPI
|
||||
@ -138,10 +189,6 @@ public class EngineDynmap {
|
||||
return true;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE: HOMES
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public Map<String, TempMarker> createHomes() {
|
||||
Map<String, TempMarker> ret = new HashMap<>();
|
||||
@ -208,7 +255,7 @@ public class EngineDynmap {
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE: AREAS
|
||||
// UPDATE: PLAYERSET
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe: YES
|
||||
@ -449,6 +496,10 @@ public class EngineDynmap {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL & SHARED
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe: NO
|
||||
public void updateAreas(Map<String, TempAreaMarker> areas) {
|
||||
// Map Current
|
||||
@ -482,10 +533,6 @@ public class EngineDynmap {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE: PLAYERSET
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public String createPlayersetId(Faction faction) {
|
||||
if (faction == null) {
|
||||
@ -589,10 +636,6 @@ public class EngineDynmap {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL & SHARED
|
||||
// -------------------------------------------- //
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
private String getDescription(Faction faction) {
|
||||
String ret = "<div class=\"regioninfo\">" + Conf.dynmapDescription + "</div>";
|
||||
@ -653,39 +696,6 @@ public class EngineDynmap {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static String getHtmlPlayerString(Collection<FPlayer> playersOfficersList) {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (FPlayer fplayer : playersOfficersList) {
|
||||
if (ret.length() > 0) {
|
||||
ret.append(", ");
|
||||
}
|
||||
ret.append(getHtmlPlayerName(fplayer));
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public static String getHtmlPlayerName(FPlayer fplayer) {
|
||||
if (fplayer == null) {
|
||||
return "none";
|
||||
}
|
||||
return escapeHtml(fplayer.getName());
|
||||
}
|
||||
|
||||
public static String escapeHtml(String string) {
|
||||
StringBuilder out = new StringBuilder(Math.max(16, string.length()));
|
||||
for (int i = 0; i < string.length(); i++) {
|
||||
char c = string.charAt(i);
|
||||
if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&') {
|
||||
out.append("&#");
|
||||
out.append((int) c);
|
||||
out.append(';');
|
||||
} else {
|
||||
out.append(c);
|
||||
}
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
private boolean isVisible(Faction faction, String world) {
|
||||
if (faction == null) {
|
||||
@ -727,22 +737,6 @@ public class EngineDynmap {
|
||||
return Conf.dynmapDefaultStyle;
|
||||
}
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public static void info(String msg) {
|
||||
String message = DYNMAP_INTEGRATION + msg;
|
||||
System.out.println(message);
|
||||
}
|
||||
|
||||
// Thread Safe / Asynchronous: Yes
|
||||
public static void severe(String msg) {
|
||||
String message = DYNMAP_INTEGRATION + ChatColor.RED.toString() + msg;
|
||||
System.out.println(message);
|
||||
}
|
||||
|
||||
enum Direction {
|
||||
XPLUS, ZPLUS, XMINUS, ZMINUS
|
||||
}
|
||||
|
||||
// Find all contiguous blocks, set in target and clear in source
|
||||
private int floodFillTarget(TileFlags source, TileFlags destination, int x, int y) {
|
||||
int cnt = 0;
|
||||
@ -773,4 +767,8 @@ public class EngineDynmap {
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
enum Direction {
|
||||
XPLUS, ZPLUS, XMINUS, ZMINUS
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,32 @@ public class TempAreaMarker {
|
||||
// CREATE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static boolean equals(AreaMarker marker, double x[], double z[]) {
|
||||
int length = marker.getCornerCount();
|
||||
|
||||
if (x.length != length) {
|
||||
return false;
|
||||
}
|
||||
if (z.length != length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (marker.getCornerX(i) != x[i]) {
|
||||
return false;
|
||||
}
|
||||
if (marker.getCornerZ(i) != z[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public AreaMarker create(MarkerSet markerset, String markerId) {
|
||||
AreaMarker ret = markerset.createAreaMarker(markerId, this.label, false, this.world, this.x, this.z, false // not persistent
|
||||
);
|
||||
@ -51,7 +77,7 @@ public class TempAreaMarker {
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public void update(AreaMarker marker) {
|
||||
@ -87,30 +113,4 @@ public class TempAreaMarker {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static boolean equals(AreaMarker marker, double x[], double z[]) {
|
||||
int length = marker.getCornerCount();
|
||||
|
||||
if (x.length != length) {
|
||||
return false;
|
||||
}
|
||||
if (z.length != length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (marker.getCornerX(i) != x[i]) {
|
||||
return false;
|
||||
}
|
||||
if (marker.getCornerZ(i) != z[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,6 +23,18 @@ public class TempMarker {
|
||||
// CREATE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static MarkerIcon getMarkerIcon(MarkerAPI markerApi, String name) {
|
||||
MarkerIcon ret = markerApi.getMarkerIcon(name);
|
||||
if (ret == null) {
|
||||
ret = markerApi.getMarkerIcon(Conf.DYNMAP_STYLE_HOME_MARKER);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public Marker create(MarkerAPI markerApi, MarkerSet markerset, String markerId) {
|
||||
Marker ret = markerset.createMarker(markerId, this.label, this.world, this.x, this.y, this.z, getMarkerIcon(markerApi, this.iconName), false // not persistent
|
||||
);
|
||||
@ -37,7 +49,7 @@ public class TempMarker {
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UPDATE
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public void update(MarkerAPI markerApi, Marker marker) {
|
||||
@ -59,16 +71,4 @@ public class TempMarker {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// UTIL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static MarkerIcon getMarkerIcon(MarkerAPI markerApi, String name) {
|
||||
MarkerIcon ret = markerApi.getMarkerIcon(name);
|
||||
if (ret == null) {
|
||||
ret = markerApi.getMarkerIcon(Conf.DYNMAP_STYLE_HOME_MARKER);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -26,6 +26,123 @@ public class FactionsBlockListener implements Listener {
|
||||
this.p = p;
|
||||
}
|
||||
|
||||
public static boolean playerCanBuildDestroyBlock(Player player, Location location, String action, boolean justCheck) {
|
||||
String name = player.getName();
|
||||
if (Conf.playersWhoBypassAllProtection.contains(name)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FPlayer me = FPlayers.getInstance().getById(player.getUniqueId().toString());
|
||||
if (me.isAdminBypassing()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FLocation loc = new FLocation(location);
|
||||
Faction otherFaction = Board.getInstance().getFactionAt(loc);
|
||||
|
||||
if (otherFaction.isWilderness()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.wildernessDenyBuild || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) {
|
||||
return true; // This is not faction territory. Use whatever you like here.
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in the wilderness.");
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (otherFaction.isSafeZone()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.safeZoneDenyBuild || Permission.MANAGE_SAFE_ZONE.has(player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in a safe zone.");
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (otherFaction.isWarZone()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.warZoneDenyBuild || Permission.MANAGE_WAR_ZONE.has(player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in a war zone.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
if (P.p.getConfig().getBoolean("hcf.raidable", false) && otherFaction.getLandRounded() >= otherFaction.getPowerRounded()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Faction myFaction = me.getFaction();
|
||||
Relation rel = myFaction.getRelationTo(otherFaction);
|
||||
boolean online = otherFaction.hasPlayersOnline();
|
||||
boolean pain = !justCheck && rel.confPainBuild(online);
|
||||
boolean deny = rel.confDenyBuild(online);
|
||||
|
||||
// hurt the player for building/destroying in other territory?
|
||||
if (pain) {
|
||||
player.damage(Conf.actionDeniedPainAmount);
|
||||
|
||||
if (!deny) {
|
||||
me.msg("<b>It is painful to try to " + action + " in the territory of " + otherFaction.getTag(myFaction));
|
||||
}
|
||||
}
|
||||
|
||||
Access access = otherFaction.getAccess(me, PermissableAction.fromString(action));
|
||||
if (access != null && access != Access.UNDEFINED) {
|
||||
// TODO: Update this once new access values are added other than just allow / deny.
|
||||
if (access == Access.DENY) {
|
||||
me.msg(TL.GENERIC_NOPERMISSION, action);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true; // has to be allow
|
||||
}
|
||||
|
||||
// cancel building/destroying in other territory?
|
||||
if (deny) {
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in the territory of " + otherFaction.getTag(myFaction));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Also cancel and/or cause pain if player doesn't have ownership rights for this claim
|
||||
if (Conf.ownedAreasEnabled && (Conf.ownedAreaDenyBuild || Conf.ownedAreaPainBuild) && !otherFaction.playerHasOwnershipRights(me, loc)) {
|
||||
if (!pain && Conf.ownedAreaPainBuild && !justCheck) {
|
||||
player.damage(Conf.actionDeniedPainAmount);
|
||||
|
||||
if (!Conf.ownedAreaDenyBuild) {
|
||||
me.msg("<b>It is painful to try to " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
|
||||
}
|
||||
}
|
||||
if (Conf.ownedAreaDenyBuild) {
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (!event.canBuild()) {
|
||||
@ -189,121 +306,4 @@ public class FactionsBlockListener implements Listener {
|
||||
|
||||
return !rel.confDenyBuild(otherFaction.hasPlayersOnline());
|
||||
}
|
||||
|
||||
public static boolean playerCanBuildDestroyBlock(Player player, Location location, String action, boolean justCheck) {
|
||||
String name = player.getName();
|
||||
if (Conf.playersWhoBypassAllProtection.contains(name)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FPlayer me = FPlayers.getInstance().getById(player.getUniqueId().toString());
|
||||
if (me.isAdminBypassing()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FLocation loc = new FLocation(location);
|
||||
Faction otherFaction = Board.getInstance().getFactionAt(loc);
|
||||
|
||||
if (otherFaction.isWilderness()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.wildernessDenyBuild || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) {
|
||||
return true; // This is not faction territory. Use whatever you like here.
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in the wilderness.");
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (otherFaction.isSafeZone()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.safeZoneDenyBuild || Permission.MANAGE_SAFE_ZONE.has(player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in a safe zone.");
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (otherFaction.isWarZone()) {
|
||||
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Conf.warZoneDenyBuild || Permission.MANAGE_WAR_ZONE.has(player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in a war zone.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
if (P.p.getConfig().getBoolean("hcf.raidable", false) && otherFaction.getLandRounded() >= otherFaction.getPowerRounded()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Faction myFaction = me.getFaction();
|
||||
Relation rel = myFaction.getRelationTo(otherFaction);
|
||||
boolean online = otherFaction.hasPlayersOnline();
|
||||
boolean pain = !justCheck && rel.confPainBuild(online);
|
||||
boolean deny = rel.confDenyBuild(online);
|
||||
|
||||
// hurt the player for building/destroying in other territory?
|
||||
if (pain) {
|
||||
player.damage(Conf.actionDeniedPainAmount);
|
||||
|
||||
if (!deny) {
|
||||
me.msg("<b>It is painful to try to " + action + " in the territory of " + otherFaction.getTag(myFaction));
|
||||
}
|
||||
}
|
||||
|
||||
Access access = otherFaction.getAccess(me, PermissableAction.fromString(action));
|
||||
if (access != null && access != Access.UNDEFINED) {
|
||||
// TODO: Update this once new access values are added other than just allow / deny.
|
||||
if (access == Access.DENY) {
|
||||
me.msg(TL.GENERIC_NOPERMISSION, action);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true; // has to be allow
|
||||
}
|
||||
|
||||
// cancel building/destroying in other territory?
|
||||
if (deny) {
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in the territory of " + otherFaction.getTag(myFaction));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Also cancel and/or cause pain if player doesn't have ownership rights for this claim
|
||||
if (Conf.ownedAreasEnabled && (Conf.ownedAreaDenyBuild || Conf.ownedAreaPainBuild) && !otherFaction.playerHasOwnershipRights(me, loc)) {
|
||||
if (!pain && Conf.ownedAreaPainBuild && !justCheck) {
|
||||
player.damage(Conf.actionDeniedPainAmount);
|
||||
|
||||
if (!Conf.ownedAreaDenyBuild) {
|
||||
me.msg("<b>It is painful to try to " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
|
||||
}
|
||||
}
|
||||
if (Conf.ownedAreaDenyBuild) {
|
||||
if (!justCheck) {
|
||||
me.msg("<b>You can't " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ import java.util.*;
|
||||
|
||||
public class FactionsEntityListener implements Listener {
|
||||
|
||||
private static final Set<PotionEffectType> badPotionEffects = new LinkedHashSet<>(Arrays.asList(PotionEffectType.BLINDNESS, PotionEffectType.CONFUSION, PotionEffectType.HARM, PotionEffectType.HUNGER, PotionEffectType.POISON, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WEAKNESS, PotionEffectType.WITHER));
|
||||
public P p;
|
||||
|
||||
public FactionsEntityListener(P p) {
|
||||
@ -288,7 +289,6 @@ public class FactionsEntityListener implements Listener {
|
||||
// No condition retained, destroy the block!
|
||||
}
|
||||
|
||||
|
||||
// mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
||||
@ -298,8 +298,6 @@ public class FactionsEntityListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
private static final Set<PotionEffectType> badPotionEffects = new LinkedHashSet<>(Arrays.asList(PotionEffectType.BLINDNESS, PotionEffectType.CONFUSION, PotionEffectType.HARM, PotionEffectType.HUNGER, PotionEffectType.POISON, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WEAKNESS, PotionEffectType.WITHER));
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onPotionSplashEvent(PotionSplashEvent event) {
|
||||
// see if the potion has a harmful effect
|
||||
|
@ -13,6 +13,10 @@ import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
public class FactionsExploitListener implements Listener {
|
||||
|
||||
public static boolean clippingThrough(Location target, Location from, double thickness) {
|
||||
return ((from.getX() > target.getX() && (from.getX() - target.getX() < thickness)) || (target.getX() > from.getX() && (target.getX() - from.getX() < thickness)) || (from.getZ() > target.getZ() && (from.getZ() - target.getZ() < thickness)) || (target.getZ() > from.getZ() && (target.getZ() - from.getZ() < thickness)));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void obsidianGenerator(BlockFromToEvent event) {
|
||||
if (!Conf.handleExploitObsidianGenerators) {
|
||||
@ -54,8 +58,4 @@ public class FactionsExploitListener implements Listener {
|
||||
event.setTo(target);
|
||||
|
||||
}
|
||||
|
||||
public static boolean clippingThrough(Location target, Location from, double thickness) {
|
||||
return ((from.getX() > target.getX() && (from.getX() - target.getX() < thickness)) || (target.getX() > from.getX() && (target.getX() - from.getX() < thickness)) || (from.getZ() > target.getZ() && (from.getZ() - target.getZ() < thickness)) || (target.getZ() > from.getZ() && (target.getZ() - from.getZ() < thickness)));
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -14,20 +14,6 @@ public class BufferedObjective {
|
||||
private static final Method addEntryMethod;
|
||||
private static final int MAX_LINE_LENGTH;
|
||||
|
||||
private final Scoreboard scoreboard;
|
||||
private final String baseName;
|
||||
|
||||
private Objective current;
|
||||
private List<Team> currentTeams = new ArrayList<>();
|
||||
private String title;
|
||||
private DisplaySlot displaySlot;
|
||||
|
||||
private int objPtr;
|
||||
private int teamPtr;
|
||||
private boolean requiresUpdate = false;
|
||||
|
||||
private final Map<Integer, String> contents = new HashMap<>();
|
||||
|
||||
static {
|
||||
// Check for long line support.
|
||||
// We require use of Spigot's `addEntry(String)` method on
|
||||
@ -48,6 +34,17 @@ public class BufferedObjective {
|
||||
}
|
||||
}
|
||||
|
||||
private final Scoreboard scoreboard;
|
||||
private final String baseName;
|
||||
private final Map<Integer, String> contents = new HashMap<>();
|
||||
private Objective current;
|
||||
private List<Team> currentTeams = new ArrayList<>();
|
||||
private String title;
|
||||
private DisplaySlot displaySlot;
|
||||
private int objPtr;
|
||||
private int teamPtr;
|
||||
private boolean requiresUpdate = false;
|
||||
|
||||
public BufferedObjective(Scoreboard scoreboard) {
|
||||
this.scoreboard = scoreboard;
|
||||
this.baseName = createBaseName();
|
||||
|
@ -22,6 +22,20 @@ public class FScoreboard {
|
||||
private FSidebarProvider temporaryProvider;
|
||||
private boolean removed = false;
|
||||
|
||||
private FScoreboard(FPlayer fplayer) {
|
||||
this.fplayer = fplayer;
|
||||
|
||||
if (isSupportedByServer()) {
|
||||
this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||
this.bufferedObjective = new BufferedObjective(scoreboard);
|
||||
|
||||
fplayer.getPlayer().setScoreboard(scoreboard);
|
||||
} else {
|
||||
this.scoreboard = null;
|
||||
this.bufferedObjective = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Glowstone doesn't support scoreboards.
|
||||
// All references to this and related workarounds can be safely
|
||||
// removed when scoreboards are supported.
|
||||
@ -56,20 +70,6 @@ public class FScoreboard {
|
||||
return fscoreboards.get(FPlayers.getInstance().getByPlayer(player));
|
||||
}
|
||||
|
||||
private FScoreboard(FPlayer fplayer) {
|
||||
this.fplayer = fplayer;
|
||||
|
||||
if (isSupportedByServer()) {
|
||||
this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||
this.bufferedObjective = new BufferedObjective(scoreboard);
|
||||
|
||||
fplayer.getPlayer().setScoreboard(scoreboard);
|
||||
} else {
|
||||
this.scoreboard = null;
|
||||
this.bufferedObjective = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected FPlayer getFPlayer() {
|
||||
return fplayer;
|
||||
}
|
||||
|
@ -13,14 +13,22 @@ import java.util.*;
|
||||
public class FTeamWrapper {
|
||||
private static final Map<Faction, FTeamWrapper> wrappers = new HashMap<>();
|
||||
private static final List<FScoreboard> tracking = new ArrayList<>();
|
||||
private static int factionTeamPtr;
|
||||
private static final Set<Faction> updating = new HashSet<>();
|
||||
|
||||
private static int factionTeamPtr;
|
||||
private final Map<FScoreboard, Team> teams = new HashMap<>();
|
||||
private final String teamName;
|
||||
private final Faction faction;
|
||||
private final Set<OfflinePlayer> members = new HashSet<>();
|
||||
|
||||
private FTeamWrapper(Faction faction) {
|
||||
this.teamName = "faction_" + (factionTeamPtr++);
|
||||
this.faction = faction;
|
||||
|
||||
for (FScoreboard fboard : tracking) {
|
||||
add(fboard);
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyUpdatesLater(final Faction faction) {
|
||||
if (!FScoreboard.isSupportedByServer()) {
|
||||
return;
|
||||
@ -130,16 +138,6 @@ public class FTeamWrapper {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private FTeamWrapper(Faction faction) {
|
||||
this.teamName = "faction_" + (factionTeamPtr++);
|
||||
this.faction = faction;
|
||||
|
||||
for (FScoreboard fboard : tracking) {
|
||||
add(fboard);
|
||||
}
|
||||
}
|
||||
|
||||
private void add(FScoreboard fboard) {
|
||||
Scoreboard board = fboard.getScoreboard();
|
||||
Team team = board.registerNewTeam(teamName);
|
||||
|
@ -32,14 +32,6 @@ public enum Role implements Permissable {
|
||||
this.translation = translation;
|
||||
}
|
||||
|
||||
public boolean isAtLeast(Role role) {
|
||||
return this.value >= role.value;
|
||||
}
|
||||
|
||||
public boolean isAtMost(Role role) {
|
||||
return this.value <= role.value;
|
||||
}
|
||||
|
||||
public static Role getRelative(Role role, int relative) {
|
||||
return Role.getByValue(role.value + relative);
|
||||
}
|
||||
@ -81,6 +73,14 @@ public enum Role implements Permissable {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isAtLeast(Role role) {
|
||||
return this.value >= role.value;
|
||||
}
|
||||
|
||||
public boolean isAtMost(Role role) {
|
||||
return this.value <= role.value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.nicename;
|
||||
|
@ -7,49 +7,6 @@ import java.util.ArrayList;
|
||||
|
||||
public class AsciiCompass {
|
||||
|
||||
public enum Point {
|
||||
|
||||
N('N'),
|
||||
NE('/'),
|
||||
E('E'),
|
||||
SE('\\'),
|
||||
S('S'),
|
||||
SW('/'),
|
||||
W('W'),
|
||||
NW('\\');
|
||||
|
||||
public final char asciiChar;
|
||||
|
||||
Point(final char asciiChar) {
|
||||
this.asciiChar = asciiChar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.valueOf(this.asciiChar);
|
||||
}
|
||||
|
||||
public String getTranslation() {
|
||||
if (this == N) {
|
||||
return TL.COMPASS_SHORT_NORTH.toString();
|
||||
}
|
||||
if (this == E) {
|
||||
return TL.COMPASS_SHORT_EAST.toString();
|
||||
}
|
||||
if (this == S) {
|
||||
return TL.COMPASS_SHORT_SOUTH.toString();
|
||||
}
|
||||
if (this == W) {
|
||||
return TL.COMPASS_SHORT_WEST.toString();
|
||||
}
|
||||
return toString();
|
||||
}
|
||||
|
||||
public String toString(boolean isActive, ChatColor colorActive, String colorDefault) {
|
||||
return (isActive ? colorActive : colorDefault) + getTranslation();
|
||||
}
|
||||
}
|
||||
|
||||
public static Point getCompassPointForDirection(double inDegrees) {
|
||||
double degrees = (inDegrees - 180) % 360;
|
||||
if (degrees < 0) {
|
||||
@ -107,4 +64,47 @@ public class AsciiCompass {
|
||||
public static ArrayList<String> getAsciiCompass(double inDegrees, ChatColor colorActive, String colorDefault) {
|
||||
return getAsciiCompass(getCompassPointForDirection(inDegrees), colorActive, colorDefault);
|
||||
}
|
||||
|
||||
public enum Point {
|
||||
|
||||
N('N'),
|
||||
NE('/'),
|
||||
E('E'),
|
||||
SE('\\'),
|
||||
S('S'),
|
||||
SW('/'),
|
||||
W('W'),
|
||||
NW('\\');
|
||||
|
||||
public final char asciiChar;
|
||||
|
||||
Point(final char asciiChar) {
|
||||
this.asciiChar = asciiChar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.valueOf(this.asciiChar);
|
||||
}
|
||||
|
||||
public String getTranslation() {
|
||||
if (this == N) {
|
||||
return TL.COMPASS_SHORT_NORTH.toString();
|
||||
}
|
||||
if (this == E) {
|
||||
return TL.COMPASS_SHORT_EAST.toString();
|
||||
}
|
||||
if (this == S) {
|
||||
return TL.COMPASS_SHORT_SOUTH.toString();
|
||||
}
|
||||
if (this == W) {
|
||||
return TL.COMPASS_SHORT_WEST.toString();
|
||||
}
|
||||
return toString();
|
||||
}
|
||||
|
||||
public String toString(boolean isActive, ChatColor colorActive, String colorDefault) {
|
||||
return (isActive ? colorActive : colorDefault) + getTranslation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,8 +39,6 @@ public class ClipPlaceholderAPIManager extends PlaceholderExpansion implements R
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Relational placeholders
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player p1, Player p2, String placeholder) {
|
||||
|
@ -15,6 +15,7 @@ import java.util.Map;
|
||||
|
||||
public final class EnumTypeAdapter<T extends Enum<T>> extends TypeAdapter<T> {
|
||||
|
||||
public static final TypeAdapterFactory ENUM_FACTORY = newEnumTypeHierarchyFactory();
|
||||
private final Map<String, T> nameToConstant = new HashMap<>();
|
||||
private final Map<T, String> constantToName = new HashMap<>();
|
||||
|
||||
@ -34,20 +35,6 @@ public final class EnumTypeAdapter<T extends Enum<T>> extends TypeAdapter<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public T read(JsonReader in) throws IOException {
|
||||
if (in.peek() == JsonToken.NULL) {
|
||||
in.nextNull();
|
||||
return null;
|
||||
}
|
||||
return nameToConstant.get(in.nextString());
|
||||
}
|
||||
|
||||
public void write(JsonWriter out, T value) throws IOException {
|
||||
out.value(value == null ? null : constantToName.get(value));
|
||||
}
|
||||
|
||||
public static final TypeAdapterFactory ENUM_FACTORY = newEnumTypeHierarchyFactory();
|
||||
|
||||
public static <TT> TypeAdapterFactory newEnumTypeHierarchyFactory() {
|
||||
return new TypeAdapterFactory() {
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
@ -64,4 +51,16 @@ public final class EnumTypeAdapter<T extends Enum<T>> extends TypeAdapter<T> {
|
||||
};
|
||||
}
|
||||
|
||||
public T read(JsonReader in) throws IOException {
|
||||
if (in.peek() == JsonToken.NULL) {
|
||||
in.nextNull();
|
||||
return null;
|
||||
}
|
||||
return nameToConstant.get(in.nextString());
|
||||
}
|
||||
|
||||
public void write(JsonWriter out, T value) throws IOException {
|
||||
out.value(value == null ? null : constantToName.get(value));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,12 +1,6 @@
|
||||
package com.massivecraft.factions.util;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.io.BukkitObjectInputStream;
|
||||
import org.bukkit.util.io.BukkitObjectOutputStream;
|
||||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||
@ -14,7 +8,6 @@ import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
public class InventoryUtil {
|
||||
|
||||
|
@ -18,6 +18,9 @@ import java.util.logging.Level;
|
||||
|
||||
public class MiscUtil {
|
||||
|
||||
/// TODO create tag whitelist!!
|
||||
public static HashSet<String> substanceChars = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"));
|
||||
|
||||
public static EntityType creatureTypeFromEntity(Entity entity) {
|
||||
if (!(entity instanceof Creature)) {
|
||||
return null;
|
||||
@ -46,9 +49,6 @@ public class MiscUtil {
|
||||
return values;
|
||||
}
|
||||
|
||||
/// TODO create tag whitelist!!
|
||||
public static HashSet<String> substanceChars = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"));
|
||||
|
||||
public static String getComparisonString(String str) {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
|
||||
|
@ -15,8 +15,6 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static com.massivecraft.factions.zcore.util.TL.ROLE_NORMAL;
|
||||
|
||||
public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Permissable, Map<PermissableAction, Access>>> {
|
||||
|
||||
@Override
|
||||
|
@ -59,6 +59,10 @@ public abstract class SpiralTask implements Runnable {
|
||||
this.setTaskID(Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(P.p, this, 2, 2));
|
||||
}
|
||||
|
||||
private static long now() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
/*
|
||||
* This is where the necessary work is done; you'll need to override this method with whatever you want
|
||||
* done at each chunk in the spiral pattern.
|
||||
@ -88,16 +92,16 @@ public abstract class SpiralTask implements Runnable {
|
||||
return x;
|
||||
}
|
||||
|
||||
public final int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Below are the guts of the class, which you normally wouldn't need to mess with.
|
||||
*/
|
||||
|
||||
public final int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public final void setTaskID(int ID) {
|
||||
if (ID == -1) {
|
||||
this.stop();
|
||||
@ -202,8 +206,4 @@ public abstract class SpiralTask implements Runnable {
|
||||
public final boolean valid() {
|
||||
return taskID != -1;
|
||||
}
|
||||
|
||||
private static long now() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
@ -24,18 +24,14 @@ import java.util.logging.Level;
|
||||
|
||||
public class WarpGUI implements InventoryHolder, FactionGUI {
|
||||
|
||||
private final ConfigurationSection section;
|
||||
int guiSize;
|
||||
private Inventory warpGUI;
|
||||
private FPlayer fme;
|
||||
|
||||
int guiSize;
|
||||
|
||||
private HashMap<Integer, String> warpSlots = new HashMap<>();
|
||||
private int maxWarps;
|
||||
|
||||
private List<Integer> dummySlots = new ArrayList<>();
|
||||
|
||||
private final ConfigurationSection section;
|
||||
|
||||
public WarpGUI(FPlayer fme) {
|
||||
this.fme = fme;
|
||||
this.section = P.p.getConfig().getConfigurationSection("fwarp-gui");
|
||||
|
@ -26,55 +26,28 @@ public abstract class MCommand<T extends MPlugin> {
|
||||
|
||||
// The sub-commands to this command
|
||||
public List<MCommand<?>> subCommands;
|
||||
|
||||
public void addSubCommand(MCommand<?> subCommand) {
|
||||
subCommand.commandChain.addAll(this.commandChain);
|
||||
subCommand.commandChain.add(this);
|
||||
this.subCommands.add(subCommand);
|
||||
}
|
||||
|
||||
// The different names this commands will react to
|
||||
public List<String> aliases;
|
||||
public boolean allowNoSlashAccess;
|
||||
|
||||
// Information on the args
|
||||
public List<String> requiredArgs;
|
||||
public LinkedHashMap<String, String> optionalArgs;
|
||||
public boolean errorOnToManyArgs = true;
|
||||
|
||||
// FIELD: Help Short
|
||||
// This field may be left blank and will in such case be loaded from the permissions node instead.
|
||||
// Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff".
|
||||
private String helpShort;
|
||||
|
||||
public void setHelpShort(String val) {
|
||||
this.helpShort = val;
|
||||
}
|
||||
|
||||
public String getHelpShort() {
|
||||
if (this.helpShort == null) {
|
||||
return getUsageTranslation().toString();
|
||||
}
|
||||
|
||||
return this.helpShort;
|
||||
}
|
||||
|
||||
public abstract TL getUsageTranslation();
|
||||
|
||||
public List<String> helpLong;
|
||||
public CommandVisibility visibility;
|
||||
|
||||
// Some information on permissions
|
||||
public boolean senderMustBePlayer;
|
||||
public String permission;
|
||||
|
||||
// Information available on execution of the command
|
||||
public CommandSender sender; // Will always be set
|
||||
public Player me; // Will only be set when the sender is a player
|
||||
public boolean senderIsConsole;
|
||||
public List<String> args; // Will contain the arguments, or and empty list if there are none.
|
||||
public List<MCommand<?>> commandChain = new ArrayList<>(); // The command chain used to execute this command
|
||||
|
||||
// FIELD: Help Short
|
||||
// This field may be left blank and will in such case be loaded from the permissions node instead.
|
||||
// Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff".
|
||||
private String helpShort;
|
||||
public MCommand(T p) {
|
||||
this.p = p;
|
||||
|
||||
@ -93,6 +66,26 @@ public abstract class MCommand<T extends MPlugin> {
|
||||
this.visibility = CommandVisibility.VISIBLE;
|
||||
}
|
||||
|
||||
public void addSubCommand(MCommand<?> subCommand) {
|
||||
subCommand.commandChain.addAll(this.commandChain);
|
||||
subCommand.commandChain.add(this);
|
||||
this.subCommands.add(subCommand);
|
||||
}
|
||||
|
||||
public String getHelpShort() {
|
||||
if (this.helpShort == null) {
|
||||
return getUsageTranslation().toString();
|
||||
}
|
||||
|
||||
return this.helpShort;
|
||||
}
|
||||
|
||||
public void setHelpShort(String val) {
|
||||
this.helpShort = val;
|
||||
}
|
||||
|
||||
public abstract TL getUsageTranslation();
|
||||
|
||||
// The commandChain is a list of the parent command chain used to get to this command.
|
||||
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain) {
|
||||
// Set the execution-time specific variables
|
||||
|
@ -27,16 +27,32 @@ import java.util.logging.Level;
|
||||
|
||||
public abstract class MPlugin extends JavaPlugin {
|
||||
|
||||
// Persist related
|
||||
public final Gson gson = this.getGsonBuilder().create();
|
||||
// Some utils
|
||||
public Persist persist;
|
||||
public TextUtil txt;
|
||||
public PermUtil perm;
|
||||
|
||||
// Persist related
|
||||
public final Gson gson = this.getGsonBuilder().create();
|
||||
public String refCommand = "";
|
||||
//holds f stuck taskids
|
||||
public Map<UUID, Integer> stuckMap = new HashMap<>();
|
||||
// These are not supposed to be used directly.
|
||||
// They are loaded and used through the TextUtil instance for the plugin.
|
||||
public Map<String, String> rawTags = new LinkedHashMap<>();
|
||||
protected boolean loadSuccessful = false;
|
||||
private Integer saveTask = null;
|
||||
private boolean autoSave = true;
|
||||
protected boolean loadSuccessful = false;
|
||||
// Listeners
|
||||
private MPluginSecretPlayerListener mPluginSecretPlayerListener;
|
||||
|
||||
// Our stored base commands
|
||||
private List<MCommand<?>> baseCommands = new ArrayList<>();
|
||||
// holds f stuck start times
|
||||
private Map<UUID, Long> timers = new HashMap<>();
|
||||
// -------------------------------------------- //
|
||||
// ENABLE
|
||||
// -------------------------------------------- //
|
||||
private long timeEnableStart;
|
||||
|
||||
public boolean getAutoSave() {
|
||||
return this.autoSave;
|
||||
@ -46,29 +62,10 @@ public abstract class MPlugin extends JavaPlugin {
|
||||
this.autoSave = val;
|
||||
}
|
||||
|
||||
public String refCommand = "";
|
||||
|
||||
// Listeners
|
||||
private MPluginSecretPlayerListener mPluginSecretPlayerListener;
|
||||
|
||||
// Our stored base commands
|
||||
private List<MCommand<?>> baseCommands = new ArrayList<>();
|
||||
|
||||
public List<MCommand<?>> getBaseCommands() {
|
||||
return this.baseCommands;
|
||||
}
|
||||
|
||||
// holds f stuck start times
|
||||
private Map<UUID, Long> timers = new HashMap<>();
|
||||
|
||||
//holds f stuck taskids
|
||||
public Map<UUID, Integer> stuckMap = new HashMap<>();
|
||||
|
||||
// -------------------------------------------- //
|
||||
// ENABLE
|
||||
// -------------------------------------------- //
|
||||
private long timeEnableStart;
|
||||
|
||||
public boolean preEnable() {
|
||||
log("=== ENABLE START ===");
|
||||
timeEnableStart = System.currentTimeMillis();
|
||||
@ -193,28 +190,24 @@ public abstract class MPlugin extends JavaPlugin {
|
||||
log("Disabled");
|
||||
}
|
||||
|
||||
public void suicide() {
|
||||
log("Now I suicide!");
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Some inits...
|
||||
// You are supposed to override these in the plugin if you aren't satisfied with the defaults
|
||||
// The goal is that you always will be satisfied though.
|
||||
// -------------------------------------------- //
|
||||
|
||||
public GsonBuilder getGsonBuilder() {
|
||||
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE);
|
||||
public void suicide() {
|
||||
log("Now I suicide!");
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// LANG AND TAGS
|
||||
// -------------------------------------------- //
|
||||
|
||||
// These are not supposed to be used directly.
|
||||
// They are loaded and used through the TextUtil instance for the plugin.
|
||||
public Map<String, String> rawTags = new LinkedHashMap<>();
|
||||
public GsonBuilder getGsonBuilder() {
|
||||
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE);
|
||||
}
|
||||
|
||||
public void addRawTags() {
|
||||
this.rawTags.put("l", "<green>"); // logo
|
||||
|
@ -39,7 +39,8 @@ public enum PermissableAction {
|
||||
TNTFILL("tntfill"),
|
||||
WITHDRAW("withdraw"),
|
||||
CHEST("chest"),
|
||||
SPAWNER("spawner");
|
||||
SPAWNER("spawner"),
|
||||
CLAIM("claim");
|
||||
|
||||
private String name;
|
||||
|
||||
@ -47,15 +48,6 @@ public enum PermissableAction {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the friendly name of this action. Used for editing in commands.
|
||||
*
|
||||
* @return friendly name of the action as a String.
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Case insensitive check for action.
|
||||
*
|
||||
@ -72,6 +64,15 @@ public enum PermissableAction {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the friendly name of this action. Used for editing in commands.
|
||||
*
|
||||
* @return friendly name of the action as a String.
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
|
@ -24,19 +24,15 @@ import java.util.logging.Level;
|
||||
|
||||
public class PermissableActionGUI implements InventoryHolder, FactionGUI {
|
||||
|
||||
private final ConfigurationSection section;
|
||||
private Inventory actionGUI;
|
||||
private FPlayer fme;
|
||||
|
||||
private int guiSize;
|
||||
|
||||
private Permissable permissable;
|
||||
|
||||
private HashMap<Integer, PermissableAction> actionSlots = new HashMap<>();
|
||||
private HashMap<Integer, SpecialItem> specialSlots = new HashMap<>();
|
||||
private ArrayList<Integer> usedDummySlots = new ArrayList<>();
|
||||
|
||||
private final ConfigurationSection section;
|
||||
|
||||
public PermissableActionGUI(FPlayer fme, Permissable permissable) {
|
||||
this.fme = fme;
|
||||
this.permissable = permissable;
|
||||
|
@ -26,15 +26,12 @@ import java.util.logging.Level;
|
||||
|
||||
public class PermissableRelationGUI implements InventoryHolder, FactionGUI {
|
||||
|
||||
private final ConfigurationSection section;
|
||||
private Inventory relationGUI;
|
||||
private FPlayer fme;
|
||||
|
||||
private int guiSize;
|
||||
|
||||
private HashMap<Integer, Permissable> relationSlots = new HashMap<>();
|
||||
|
||||
private final ConfigurationSection section;
|
||||
|
||||
|
||||
public PermissableRelationGUI(FPlayer fme) {
|
||||
this.fme = fme;
|
||||
|
@ -209,7 +209,6 @@ public class FUpgradesGUI implements Listener {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void closeChests(Faction faction) {
|
||||
@ -237,7 +236,9 @@ public class FUpgradesGUI implements Listener {
|
||||
ItemStack expItem = P.p.createItem(expMaterial, expAmt, expData, expName, expLore);
|
||||
if (expLevel >= 1) {
|
||||
ItemMeta itemMeta = expItem.getItemMeta();
|
||||
if (!P.p.mc17) { itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); }
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
expItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -275,7 +276,9 @@ public class FUpgradesGUI implements Listener {
|
||||
cropItem.getItemMeta().setLore(cropLore);
|
||||
if (cropLevel >= 1) {
|
||||
ItemMeta itemMeta = cropItem.getItemMeta();
|
||||
if (!P.p.mc17) { itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); }
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
cropItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -288,7 +291,9 @@ public class FUpgradesGUI implements Listener {
|
||||
spawnerItem.getItemMeta().setLore(spawnerLore);
|
||||
if (spawnerLevel >= 1) {
|
||||
ItemMeta itemMeta = spawnerItem.getItemMeta();
|
||||
if (!P.p.mc17) { itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); }
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
spawnerItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -314,7 +319,9 @@ public class FUpgradesGUI implements Listener {
|
||||
|
||||
if (chestlevel >= 1) {
|
||||
ItemMeta itemMeta = chestItem.getItemMeta();
|
||||
if (!P.p.mc17) { itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); }
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
chestItem.setItemMeta(itemMeta);
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.massivecraft.factions.zcore.nbtapi;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.MinecraftVersion;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
public class NBTCompound {
|
||||
|
||||
|
@ -11,6 +11,14 @@ public class NBTItem extends NBTCompound {
|
||||
bukkitItem = item.clone();
|
||||
}
|
||||
|
||||
public static NBTContainer convertItemtoNBT(ItemStack item) {
|
||||
return NBTReflectionUtil.convertNMSItemtoNBTCompound(NBTReflectionUtil.getNMSItemStack(item));
|
||||
}
|
||||
|
||||
public static ItemStack convertNBTtoItem(NBTCompound comp) {
|
||||
return NBTReflectionUtil.getBukkitItemStack(NBTReflectionUtil.convertNBTCompoundtoNMSItem(comp));
|
||||
}
|
||||
|
||||
protected Object getCompound() {
|
||||
return NBTReflectionUtil.getItemRootNBTTagCompound(NBTReflectionUtil.getNMSItemStack(bukkitItem));
|
||||
}
|
||||
@ -27,12 +35,4 @@ public class NBTItem extends NBTCompound {
|
||||
bukkitItem = item;
|
||||
}
|
||||
|
||||
public static NBTContainer convertItemtoNBT(ItemStack item){
|
||||
return NBTReflectionUtil.convertNMSItemtoNBTCompound(NBTReflectionUtil.getNMSItemStack(item));
|
||||
}
|
||||
|
||||
public static ItemStack convertNBTtoItem(NBTCompound comp){
|
||||
return NBTReflectionUtil.getBukkitItemStack(NBTReflectionUtil.convertNBTCompoundtoNMSItem(comp));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,13 @@
|
||||
package com.massivecraft.factions.zcore.nbtapi;
|
||||
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.GsonWrapper;
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.MethodNames;
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.MinecraftVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
@ -8,15 +16,6 @@ import java.lang.reflect.Method;
|
||||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.GsonWrapper;
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.MethodNames;
|
||||
import com.massivecraft.factions.zcore.nbtapi.utils.MinecraftVersion;
|
||||
|
||||
// TODO: finish codestyle cleanup -sgdc3
|
||||
public class NBTReflectionUtil {
|
||||
|
||||
|
@ -14,14 +14,10 @@ public enum NBTType {
|
||||
NBTTagList(9),
|
||||
NBTTagCompound(10);
|
||||
|
||||
NBTType(int i) {
|
||||
id = i;
|
||||
}
|
||||
|
||||
private final int id;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
NBTType(int i) {
|
||||
id = i;
|
||||
}
|
||||
|
||||
public static NBTType valueOf(int id) {
|
||||
@ -31,4 +27,8 @@ public enum NBTType {
|
||||
return NBTType.NBTTagEnd;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,10 +21,6 @@ public enum MinecraftVersion {
|
||||
this.versionId = versionId;
|
||||
}
|
||||
|
||||
public int getVersionId() {
|
||||
return versionId;
|
||||
}
|
||||
|
||||
public static MinecraftVersion getVersion() {
|
||||
if (version != null) {
|
||||
return version;
|
||||
@ -57,4 +53,8 @@ public enum MinecraftVersion {
|
||||
return hasGsonSupport;
|
||||
}
|
||||
|
||||
public int getVersionId() {
|
||||
return versionId;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,51 +20,6 @@ import java.util.Map.Entry;
|
||||
|
||||
public abstract class MemoryBoard extends Board {
|
||||
|
||||
public class MemoryBoardMap extends HashMap<FLocation, String> {
|
||||
private static final long serialVersionUID = -6689617828610585368L;
|
||||
|
||||
Multimap<String, FLocation> factionToLandMap = HashMultimap.create();
|
||||
|
||||
@Override
|
||||
public String put(FLocation floc, String factionId) {
|
||||
String previousValue = super.put(floc, factionId);
|
||||
if (previousValue != null) {
|
||||
factionToLandMap.remove(previousValue, floc);
|
||||
}
|
||||
|
||||
factionToLandMap.put(factionId, floc);
|
||||
return previousValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String remove(Object key) {
|
||||
String result = super.remove(key);
|
||||
if (result != null) {
|
||||
FLocation floc = (FLocation) key;
|
||||
factionToLandMap.remove(result, floc);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
super.clear();
|
||||
factionToLandMap.clear();
|
||||
}
|
||||
|
||||
public int getOwnedLandCount(String factionId) {
|
||||
return factionToLandMap.get(factionId).size();
|
||||
}
|
||||
|
||||
public void removeFaction(String factionId) {
|
||||
Collection<FLocation> flocations = factionToLandMap.removeAll(factionId);
|
||||
for (FLocation floc : flocations) {
|
||||
super.remove(floc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MemoryBoardMap flocationIds = new MemoryBoardMap();
|
||||
|
||||
//----------------------------------------------//
|
||||
@ -198,11 +153,6 @@ public abstract class MemoryBoard extends Board {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------//
|
||||
// Cleaner. Remove orphaned foreign keys
|
||||
//----------------------------------------------//
|
||||
|
||||
public void clean() {
|
||||
Iterator<Entry<FLocation, String>> iter = flocationIds.entrySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
@ -214,14 +164,19 @@ public abstract class MemoryBoard extends Board {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------//
|
||||
// Coord count
|
||||
// Cleaner. Remove orphaned foreign keys
|
||||
//----------------------------------------------//
|
||||
|
||||
public int getFactionCoordCount(String factionId) {
|
||||
return flocationIds.getOwnedLandCount(factionId);
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Coord count
|
||||
//----------------------------------------------//
|
||||
|
||||
public int getFactionCoordCount(Faction faction) {
|
||||
return getFactionCoordCount(faction.getId());
|
||||
}
|
||||
@ -237,10 +192,6 @@ public abstract class MemoryBoard extends Board {
|
||||
return ret;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Map generation
|
||||
//----------------------------------------------//
|
||||
|
||||
/**
|
||||
* The map is relative to a coord and a faction north is in the direction of decreasing x east is in the direction
|
||||
* of decreasing z
|
||||
@ -329,6 +280,10 @@ public abstract class MemoryBoard extends Board {
|
||||
return ret;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Map generation
|
||||
//----------------------------------------------//
|
||||
|
||||
private List<String> oneLineToolTip(Faction faction, FPlayer to) {
|
||||
return Arrays.asList(faction.describeTo(to));
|
||||
}
|
||||
@ -386,4 +341,49 @@ public abstract class MemoryBoard extends Board {
|
||||
}
|
||||
|
||||
public abstract void convertFrom(MemoryBoard old);
|
||||
|
||||
public class MemoryBoardMap extends HashMap<FLocation, String> {
|
||||
private static final long serialVersionUID = -6689617828610585368L;
|
||||
|
||||
Multimap<String, FLocation> factionToLandMap = HashMultimap.create();
|
||||
|
||||
@Override
|
||||
public String put(FLocation floc, String factionId) {
|
||||
String previousValue = super.put(floc, factionId);
|
||||
if (previousValue != null) {
|
||||
factionToLandMap.remove(previousValue, floc);
|
||||
}
|
||||
|
||||
factionToLandMap.put(factionId, floc);
|
||||
return previousValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String remove(Object key) {
|
||||
String result = super.remove(key);
|
||||
if (result != null) {
|
||||
FLocation floc = (FLocation) key;
|
||||
factionToLandMap.remove(result, floc);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
super.clear();
|
||||
factionToLandMap.clear();
|
||||
}
|
||||
|
||||
public int getOwnedLandCount(String factionId) {
|
||||
return factionToLandMap.get(factionId).size();
|
||||
}
|
||||
|
||||
public void removeFaction(String factionId) {
|
||||
Collection<FLocation> flocations = factionToLandMap.removeAll(factionId);
|
||||
for (FLocation floc : flocations) {
|
||||
super.remove(floc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ import java.util.UUID;
|
||||
|
||||
public abstract class MemoryFPlayer implements FPlayer {
|
||||
|
||||
public boolean inVault = false;
|
||||
protected String factionId;
|
||||
protected Role role;
|
||||
protected String title;
|
||||
@ -70,7 +71,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
protected boolean isFlying = false;
|
||||
protected boolean enteringPassword = false;
|
||||
protected String enteringPasswordWarp = "";
|
||||
|
||||
protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
|
||||
protected transient boolean mapAutoUpdating;
|
||||
protected transient Faction autoClaimFor;
|
||||
@ -79,6 +79,56 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
protected transient boolean loginPvpDisabled;
|
||||
protected transient long lastFrostwalkerMessage;
|
||||
protected transient boolean shouldTakeFallDamage = true;
|
||||
boolean playerAlerts = false;
|
||||
boolean inspectMode = false;
|
||||
|
||||
public MemoryFPlayer() {
|
||||
}
|
||||
|
||||
public MemoryFPlayer(String id) {
|
||||
this.id = id;
|
||||
this.resetFactionData(false);
|
||||
this.power = Conf.powerPlayerStarting;
|
||||
this.lastPowerUpdateTime = System.currentTimeMillis();
|
||||
this.lastLoginTime = System.currentTimeMillis();
|
||||
this.mapAutoUpdating = false;
|
||||
this.autoClaimFor = null;
|
||||
this.autoSafeZoneEnabled = false;
|
||||
this.autoWarZoneEnabled = false;
|
||||
this.loginPvpDisabled = Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0;
|
||||
this.powerBoost = 0.0;
|
||||
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", false);
|
||||
this.kills = 0;
|
||||
this.deaths = 0;
|
||||
this.mapHeight = Conf.mapHeight;
|
||||
|
||||
if (!Conf.newPlayerStartingFactionID.equals("0") && Factions.getInstance().isValidFactionId(Conf.newPlayerStartingFactionID)) {
|
||||
this.factionId = Conf.newPlayerStartingFactionID;
|
||||
}
|
||||
}
|
||||
|
||||
public MemoryFPlayer(MemoryFPlayer other) {
|
||||
this.factionId = other.factionId;
|
||||
this.id = other.id;
|
||||
this.power = other.power;
|
||||
this.lastLoginTime = other.lastLoginTime;
|
||||
this.mapAutoUpdating = other.mapAutoUpdating;
|
||||
this.autoClaimFor = other.autoClaimFor;
|
||||
this.autoSafeZoneEnabled = other.autoSafeZoneEnabled;
|
||||
this.autoWarZoneEnabled = other.autoWarZoneEnabled;
|
||||
this.loginPvpDisabled = other.loginPvpDisabled;
|
||||
this.powerBoost = other.powerBoost;
|
||||
this.role = other.role;
|
||||
this.title = other.title;
|
||||
this.chatMode = other.chatMode;
|
||||
this.spyingChat = other.spyingChat;
|
||||
this.lastStoodAt = other.lastStoodAt;
|
||||
this.isAdminBypassing = other.isAdminBypassing;
|
||||
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", true);
|
||||
this.kills = other.kills;
|
||||
this.deaths = other.deaths;
|
||||
this.mapHeight = Conf.mapHeight;
|
||||
}
|
||||
|
||||
public void login() {
|
||||
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
|
||||
@ -97,14 +147,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return Factions.getInstance().getFactionById(this.factionId);
|
||||
}
|
||||
|
||||
public String getFactionId() {
|
||||
return this.factionId;
|
||||
}
|
||||
|
||||
public boolean hasFaction() {
|
||||
return !factionId.equals("0");
|
||||
}
|
||||
|
||||
public void setFaction(Faction faction) {
|
||||
Faction oldFaction = this.getFaction();
|
||||
if (oldFaction != null) {
|
||||
@ -114,6 +156,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.factionId = faction.getId();
|
||||
}
|
||||
|
||||
public String getFactionId() {
|
||||
return this.factionId;
|
||||
}
|
||||
|
||||
public boolean hasFaction() {
|
||||
return !factionId.equals("0");
|
||||
}
|
||||
|
||||
public void setMonitorJoins(boolean monitor) {
|
||||
this.monitorJoins = monitor;
|
||||
}
|
||||
@ -209,10 +259,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.isAdminBypassing = val;
|
||||
}
|
||||
|
||||
public void setChatMode(ChatMode chatMode) {
|
||||
this.chatMode = chatMode;
|
||||
}
|
||||
|
||||
public ChatMode getChatMode() {
|
||||
if (this.factionId.equals("0") || !Conf.factionOnlyChat) {
|
||||
this.chatMode = ChatMode.PUBLIC;
|
||||
@ -220,75 +266,35 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return chatMode;
|
||||
}
|
||||
|
||||
public void setIgnoreAllianceChat(boolean ignore) {
|
||||
this.ignoreAllianceChat = ignore;
|
||||
public void setChatMode(ChatMode chatMode) {
|
||||
this.chatMode = chatMode;
|
||||
}
|
||||
|
||||
public boolean isIgnoreAllianceChat() {
|
||||
return ignoreAllianceChat;
|
||||
}
|
||||
|
||||
public void setSpyingChat(boolean chatSpying) {
|
||||
this.spyingChat = chatSpying;
|
||||
public void setIgnoreAllianceChat(boolean ignore) {
|
||||
this.ignoreAllianceChat = ignore;
|
||||
}
|
||||
|
||||
public boolean isSpyingChat() {
|
||||
return spyingChat;
|
||||
}
|
||||
|
||||
public void setSpyingChat(boolean chatSpying) {
|
||||
this.spyingChat = chatSpying;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Getters And Setters
|
||||
// -------------------------------------------- //
|
||||
|
||||
// FIELD: account
|
||||
public String getAccountId() {
|
||||
return this.getId();
|
||||
}
|
||||
|
||||
public MemoryFPlayer() {
|
||||
}
|
||||
|
||||
public MemoryFPlayer(String id) {
|
||||
this.id = id;
|
||||
this.resetFactionData(false);
|
||||
this.power = Conf.powerPlayerStarting;
|
||||
this.lastPowerUpdateTime = System.currentTimeMillis();
|
||||
this.lastLoginTime = System.currentTimeMillis();
|
||||
this.mapAutoUpdating = false;
|
||||
this.autoClaimFor = null;
|
||||
this.autoSafeZoneEnabled = false;
|
||||
this.autoWarZoneEnabled = false;
|
||||
this.loginPvpDisabled = Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0;
|
||||
this.powerBoost = 0.0;
|
||||
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", false);
|
||||
this.kills = 0;
|
||||
this.deaths = 0;
|
||||
this.mapHeight = Conf.mapHeight;
|
||||
|
||||
if (!Conf.newPlayerStartingFactionID.equals("0") && Factions.getInstance().isValidFactionId(Conf.newPlayerStartingFactionID)) {
|
||||
this.factionId = Conf.newPlayerStartingFactionID;
|
||||
}
|
||||
}
|
||||
|
||||
public MemoryFPlayer(MemoryFPlayer other) {
|
||||
this.factionId = other.factionId;
|
||||
this.id = other.id;
|
||||
this.power = other.power;
|
||||
this.lastLoginTime = other.lastLoginTime;
|
||||
this.mapAutoUpdating = other.mapAutoUpdating;
|
||||
this.autoClaimFor = other.autoClaimFor;
|
||||
this.autoSafeZoneEnabled = other.autoSafeZoneEnabled;
|
||||
this.autoWarZoneEnabled = other.autoWarZoneEnabled;
|
||||
this.loginPvpDisabled = other.loginPvpDisabled;
|
||||
this.powerBoost = other.powerBoost;
|
||||
this.role = other.role;
|
||||
this.title = other.title;
|
||||
this.chatMode = other.chatMode;
|
||||
this.spyingChat = other.spyingChat;
|
||||
this.lastStoodAt = other.lastStoodAt;
|
||||
this.isAdminBypassing = other.isAdminBypassing;
|
||||
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", true);
|
||||
this.kills = other.kills;
|
||||
this.deaths = other.deaths;
|
||||
this.mapHeight = Conf.mapHeight;
|
||||
}
|
||||
|
||||
public void resetFactionData(boolean doSpoutUpdate) {
|
||||
// clean up any territory ownership in old faction, if there is one
|
||||
if (factionId != null && Factions.getInstance().isValidFactionId(this.getFactionId())) {
|
||||
@ -310,11 +316,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.resetFactionData(true);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Getters And Setters
|
||||
// -------------------------------------------- //
|
||||
|
||||
|
||||
public long getLastLoginTime() {
|
||||
return lastLoginTime;
|
||||
}
|
||||
@ -336,6 +337,12 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.mapAutoUpdating = mapAutoUpdating;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Title, Name, Faction Tag and Chat
|
||||
//----------------------------------------------//
|
||||
|
||||
// Base:
|
||||
|
||||
public boolean hasLoginPvpDisabled() {
|
||||
if (!loginPvpDisabled) {
|
||||
return false;
|
||||
@ -355,12 +362,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.lastStoodAt = flocation;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// Title, Name, Faction Tag and Chat
|
||||
//----------------------------------------------//
|
||||
|
||||
// Base:
|
||||
|
||||
public String getTitle() {
|
||||
return this.hasFaction() ? title : TL.NOFACTION_PREFIX.toString();
|
||||
}
|
||||
@ -374,6 +375,8 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
// Base concatenations:
|
||||
|
||||
public String getName() {
|
||||
if (this.name == null) {
|
||||
// Older versions of FactionsUUID don't save the name,
|
||||
@ -393,7 +396,8 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return this.hasFaction() ? this.getFaction().getTag() : "";
|
||||
}
|
||||
|
||||
// Base concatenations:
|
||||
// Colored concatenations:
|
||||
// These are used in information messages
|
||||
|
||||
public String getNameAndSomething(String something) {
|
||||
String ret = this.role.getPrefix();
|
||||
@ -408,13 +412,13 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return this.getNameAndSomething(this.getTitle());
|
||||
}
|
||||
|
||||
// Chat Tag:
|
||||
// These are injected into the format of global chat messages.
|
||||
|
||||
public String getNameAndTag() {
|
||||
return this.getNameAndSomething(this.getTag());
|
||||
}
|
||||
|
||||
// Colored concatenations:
|
||||
// These are used in information messages
|
||||
|
||||
public String getNameAndTitle(Faction faction) {
|
||||
return this.getColorTo(faction) + this.getNameAndTitle();
|
||||
}
|
||||
@ -423,9 +427,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return this.getColorTo(fplayer) + this.getNameAndTitle();
|
||||
}
|
||||
|
||||
// Chat Tag:
|
||||
// These are injected into the format of global chat messages.
|
||||
|
||||
public String getChatTag() {
|
||||
return this.hasFaction() ? String.format(Conf.chatTagFormat, this.getRole().getPrefix() + this.getTag()) : TL.NOFACTION_PREFIX.toString();
|
||||
}
|
||||
@ -435,6 +436,10 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return this.hasFaction() ? this.getRelationTo(faction).getColor() + getChatTag() : "";
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
// Relation and relation colors
|
||||
// -------------------------------
|
||||
|
||||
public String getChatTag(MemoryFPlayer fplayer) {
|
||||
return this.hasFaction() ? this.getColorTo(fplayer) + getChatTag() : "";
|
||||
}
|
||||
@ -448,10 +453,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
// Relation and relation colors
|
||||
// -------------------------------
|
||||
|
||||
@Override
|
||||
public String describeTo(RelationParticipator that, boolean ucfirst) {
|
||||
return RelationUtil.describeThatToMe(this, that, ucfirst);
|
||||
@ -492,7 +493,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
player.setHealth(player.getHealth() + amnt);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------//
|
||||
// Power
|
||||
//----------------------------------------------//
|
||||
@ -610,6 +610,10 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
// Actions
|
||||
// -------------------------------
|
||||
|
||||
/**
|
||||
* Check if the scoreboard should be shown. Simple method to be used by above method.
|
||||
*
|
||||
@ -630,10 +634,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
this.showScoreboard = show;
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
// Actions
|
||||
// -------------------------------
|
||||
|
||||
public void leave(boolean makePay) {
|
||||
Faction myFaction = this.getFaction();
|
||||
makePay = makePay && Econ.shouldBeUsed() && !this.isAdminBypassing();
|
||||
@ -726,8 +726,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
error = P.p.txt.parse(TL.CLAIM_PROTECTED.toString());
|
||||
} else if (flocation.isOutsideWorldBorder(P.p.getConfig().getInt("world-border.buffer", 0))) {
|
||||
error = P.p.txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString());
|
||||
}
|
||||
else if (Conf.worldsNoClaiming.contains(flocation.getWorldName())) {
|
||||
} else if (Conf.worldsNoClaiming.contains(flocation.getWorldName())) {
|
||||
error = P.p.txt.parse(TL.CLAIM_DISABLED.toString());
|
||||
} else if (this.isAdminBypassing()) {
|
||||
return true;
|
||||
@ -794,8 +793,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return attemptClaim(forFaction, new FLocation(location), notifyFailure);
|
||||
}
|
||||
|
||||
boolean playerAlerts = false;
|
||||
|
||||
public boolean shouldBeSaved() {
|
||||
return this.hasFaction() || (this.getPowerRounded() != this.getPowerMaxRounded() && this.getPowerRounded() != (int) Math.round(Conf.powerPlayerStarting));
|
||||
}
|
||||
@ -873,15 +870,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
isFlying = fly;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public boolean inVault = false;
|
||||
|
||||
public boolean isInVault() {
|
||||
return inVault;
|
||||
}
|
||||
@ -921,14 +909,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
enteringPasswordWarp = warp;
|
||||
}
|
||||
|
||||
public String getEnteringWarp() {
|
||||
return enteringPasswordWarp;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Message Sending Helpers
|
||||
// -------------------------------------------- //
|
||||
|
||||
public String getEnteringWarp() {
|
||||
return enteringPasswordWarp;
|
||||
}
|
||||
|
||||
public void sendMessage(String msg) {
|
||||
if (msg.contains("{null}")) {
|
||||
return; // user wants this message to not send
|
||||
@ -963,7 +951,7 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
|
||||
public void sendFancyMessage(List<FancyMessage> messages) {
|
||||
Player player = getPlayer();
|
||||
if (player == null || !player.isOnGround()) {
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -998,13 +986,13 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
return id;
|
||||
}
|
||||
|
||||
public abstract void remove();
|
||||
|
||||
@Override
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public abstract void remove();
|
||||
|
||||
@Override
|
||||
public void clearWarmup() {
|
||||
if (warmup != null) {
|
||||
@ -1042,12 +1030,18 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
Player me = this.getPlayer();
|
||||
int radius = Conf.enemyFlyCheckRadius;
|
||||
for (Entity e : me.getNearbyEntities(radius, 255, radius)) {
|
||||
if (e == null) { continue; }
|
||||
if (e == null) {
|
||||
continue;
|
||||
}
|
||||
if (e instanceof Player) {
|
||||
Player eplayer = (((Player) e).getPlayer());
|
||||
if (eplayer == null) { continue; }
|
||||
if (eplayer == null) {
|
||||
continue;
|
||||
}
|
||||
FPlayer efplayer = FPlayers.getInstance().getByPlayer(eplayer);
|
||||
if (efplayer == null) { continue; }
|
||||
if (efplayer == null) {
|
||||
continue;
|
||||
}
|
||||
if (this.getRelationTo(efplayer).equals(Relation.ENEMY)) {
|
||||
|
||||
this.setFlying(false);
|
||||
@ -1071,7 +1065,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean canflyinSafezone() {
|
||||
return getPlayer().hasPermission("factions.fly.safezone");
|
||||
@ -1102,8 +1095,6 @@ public abstract class MemoryFPlayer implements FPlayer {
|
||||
|
||||
}
|
||||
|
||||
boolean inspectMode = false;
|
||||
|
||||
@Override
|
||||
public boolean isInspectMode() {
|
||||
return inspectMode;
|
||||
|
@ -33,6 +33,11 @@ import static com.massivecraft.factions.util.InventoryUtil.InventoryToString;
|
||||
import static com.massivecraft.factions.util.InventoryUtil.StringToInventory;
|
||||
|
||||
public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
public HashMap<Integer, String> rules = new HashMap<Integer, String>();
|
||||
public int tnt;
|
||||
public Location checkpoint;
|
||||
public LazyLocation vault;
|
||||
public HashMap<String, Integer> upgrades = new HashMap<>();
|
||||
protected String id = null;
|
||||
protected boolean peacefulExplosionsEnabled;
|
||||
protected boolean permanent;
|
||||
@ -53,11 +58,61 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
protected HashMap<String, List<String>> announcements = new HashMap<>();
|
||||
protected ConcurrentHashMap<String, LazyLocation> warps = new ConcurrentHashMap<>();
|
||||
protected ConcurrentHashMap<String, String> warpPasswords = new ConcurrentHashMap<>();
|
||||
private long lastDeath;
|
||||
protected int maxVaults;
|
||||
protected Role defaultRole;
|
||||
protected Map<Permissable, Map<PermissableAction, Access>> permissions = new HashMap<>();
|
||||
protected Set<BanInfo> bans = new HashSet<>();
|
||||
String chestSerialized = null;
|
||||
Map<String, Object> bannerSerialized;
|
||||
private long lastDeath;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Construct
|
||||
// -------------------------------------------- //
|
||||
public MemoryFaction() {
|
||||
}
|
||||
|
||||
public MemoryFaction(String id) {
|
||||
this.id = id;
|
||||
this.open = Conf.newFactionsDefaultOpen;
|
||||
this.tag = "???";
|
||||
this.description = TL.GENERIC_DEFAULTDESCRIPTION.toString();
|
||||
this.lastPlayerLoggedOffTime = 0;
|
||||
this.peaceful = false;
|
||||
this.peacefulExplosionsEnabled = false;
|
||||
this.permanent = false;
|
||||
this.money = 0.0;
|
||||
this.powerBoost = 0.0;
|
||||
this.foundedDate = System.currentTimeMillis();
|
||||
this.maxVaults = Conf.defaultMaxVaults;
|
||||
this.defaultRole = Role.RECRUIT;
|
||||
|
||||
resetPerms(); // Reset on new Faction so it has default values.
|
||||
}
|
||||
|
||||
public MemoryFaction(MemoryFaction old) {
|
||||
id = old.id;
|
||||
peacefulExplosionsEnabled = old.peacefulExplosionsEnabled;
|
||||
permanent = old.permanent;
|
||||
tag = old.tag;
|
||||
description = old.description;
|
||||
open = old.open;
|
||||
foundedDate = old.foundedDate;
|
||||
peaceful = old.peaceful;
|
||||
permanentPower = old.permanentPower;
|
||||
home = old.home;
|
||||
lastPlayerLoggedOffTime = old.lastPlayerLoggedOffTime;
|
||||
money = old.money;
|
||||
powerBoost = old.powerBoost;
|
||||
relationWish = old.relationWish;
|
||||
claimOwnership = old.claimOwnership;
|
||||
fplayers = new HashSet<>();
|
||||
invites = old.invites;
|
||||
announcements = old.announcements;
|
||||
this.defaultRole = Role.NORMAL;
|
||||
|
||||
resetPerms(); // Reset on new Faction so it has default values.
|
||||
}
|
||||
|
||||
public HashMap<String, List<String>> getAnnouncements() {
|
||||
return this.announcements;
|
||||
@ -184,8 +239,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return this.bans;
|
||||
}
|
||||
|
||||
public HashMap<Integer,String> rules = new HashMap<Integer, String>();
|
||||
|
||||
public String getRule(int index) {
|
||||
if (rules.size() == 0) return null;
|
||||
return rules.get(index);
|
||||
@ -205,8 +258,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
rules = newRule;
|
||||
}
|
||||
|
||||
public int tnt;
|
||||
|
||||
public void addTnt(int amt) {
|
||||
tnt += amt;
|
||||
}
|
||||
@ -215,11 +266,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
tnt -= amt;
|
||||
}
|
||||
|
||||
public int getTnt() { return tnt; }
|
||||
|
||||
public Location checkpoint;
|
||||
|
||||
public LazyLocation vault;
|
||||
public int getTnt() {
|
||||
return tnt;
|
||||
}
|
||||
|
||||
public Location getVault() {
|
||||
if (vault == null) {
|
||||
@ -227,6 +276,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
}
|
||||
return vault.getLocation();
|
||||
}
|
||||
|
||||
public void setVault(Location vaultLocation) {
|
||||
if (vaultLocation == null) {
|
||||
vault = null;
|
||||
@ -236,16 +286,13 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
vault = newlocation;
|
||||
}
|
||||
|
||||
public HashMap<String,Integer> upgrades = new HashMap<>();
|
||||
|
||||
public int getUpgrade(String key) {
|
||||
if (upgrades.keySet().contains(key)) { return upgrades.get(key);}
|
||||
if (upgrades.keySet().contains(key)) {
|
||||
return upgrades.get(key);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
String chestSerialized = null;
|
||||
Map<String, Object> bannerSerialized;
|
||||
|
||||
@Override
|
||||
public Inventory getChest() {
|
||||
int level = getUpgrade("Chest");
|
||||
@ -278,8 +325,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
chestSerialized = InventoryToString(inventory.getContents());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void setBannerPattern(ItemStack banner) {
|
||||
bannerSerialized = banner.serialize();
|
||||
@ -293,16 +338,17 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return ItemStack.deserialize(bannerSerialized);
|
||||
}
|
||||
|
||||
public void setUpgrades(String key,int level){ upgrades.put(key,level); }
|
||||
|
||||
|
||||
public void setCheckpoint(Location location){
|
||||
checkpoint = location;
|
||||
public void setUpgrades(String key, int level) {
|
||||
upgrades.put(key, level);
|
||||
}
|
||||
|
||||
public Location getCheckpoint() {
|
||||
return checkpoint;
|
||||
}
|
||||
|
||||
public void setCheckpoint(Location location) {
|
||||
checkpoint = location;
|
||||
}
|
||||
|
||||
public void clearRules() {
|
||||
rules.clear();
|
||||
@ -328,14 +374,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
this.peaceful = isPeaceful;
|
||||
}
|
||||
|
||||
public void setPeacefulExplosionsEnabled(boolean val) {
|
||||
peacefulExplosionsEnabled = val;
|
||||
}
|
||||
|
||||
public boolean getPeacefulExplosionsEnabled() {
|
||||
return this.peacefulExplosionsEnabled;
|
||||
}
|
||||
|
||||
public void setPeacefulExplosionsEnabled(boolean val) {
|
||||
peacefulExplosionsEnabled = val;
|
||||
}
|
||||
|
||||
public boolean noExplosionsInTerritory() {
|
||||
return this.peaceful && !peacefulExplosionsEnabled;
|
||||
}
|
||||
@ -352,6 +398,13 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return this.tag;
|
||||
}
|
||||
|
||||
public void setTag(String str) {
|
||||
if (Conf.factionTagForceUpperCase) {
|
||||
str = str.toUpperCase();
|
||||
}
|
||||
this.tag = str;
|
||||
}
|
||||
|
||||
public String getTag(String prefix) {
|
||||
return prefix + this.tag;
|
||||
}
|
||||
@ -370,14 +423,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return this.getTag(this.getColorTo(otherFplayer).toString());
|
||||
}
|
||||
|
||||
public void setTag(String str) {
|
||||
if (Conf.factionTagForceUpperCase) {
|
||||
str = str.toUpperCase();
|
||||
}
|
||||
this.tag = str;
|
||||
}
|
||||
|
||||
|
||||
public String getComparisonTag() {
|
||||
return MiscUtil.getComparisonString(this.tag);
|
||||
}
|
||||
@ -390,10 +435,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
this.description = value;
|
||||
}
|
||||
|
||||
public void setHome(Location home) {
|
||||
this.home = new LazyLocation(home);
|
||||
}
|
||||
|
||||
public boolean hasHome() {
|
||||
return this.getHome() != null;
|
||||
}
|
||||
@ -403,6 +444,10 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return (this.home != null) ? this.home.getLocation() : null;
|
||||
}
|
||||
|
||||
public void setHome(Location home) {
|
||||
this.home = new LazyLocation(home);
|
||||
}
|
||||
|
||||
public long getFoundedDate() {
|
||||
if (this.foundedDate == 0) {
|
||||
setFoundedDate(System.currentTimeMillis());
|
||||
@ -434,7 +479,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return aid;
|
||||
}
|
||||
|
||||
|
||||
public Integer getPermanentPower() {
|
||||
return this.permanentPower;
|
||||
}
|
||||
@ -461,14 +505,18 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
|
||||
}
|
||||
|
||||
public void setLastDeath(long time) {
|
||||
this.lastDeath = time;
|
||||
}
|
||||
|
||||
public long getLastDeath() {
|
||||
return this.lastDeath;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// F Permissions stuff
|
||||
// -------------------------------------------- //
|
||||
|
||||
public void setLastDeath(long time) {
|
||||
this.lastDeath = time;
|
||||
}
|
||||
|
||||
public int getKills() {
|
||||
int kills = 0;
|
||||
for (FPlayer fp : getFPlayers()) {
|
||||
@ -487,11 +535,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return deaths;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// F Permissions stuff
|
||||
// -------------------------------------------- //
|
||||
|
||||
|
||||
public Access getAccess(Permissable permissable, PermissableAction permissableAction) {
|
||||
if (permissable == null || permissableAction == null) {
|
||||
return Access.UNDEFINED;
|
||||
@ -533,8 +576,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return Access.UNDEFINED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setPermission(Permissable permissable, PermissableAction permissableAction, Access access) {
|
||||
Map<PermissableAction, Access> accessMap = permissions.get(permissable);
|
||||
if (accessMap == null) {
|
||||
@ -587,54 +628,6 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
this.defaultRole = role;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Construct
|
||||
// -------------------------------------------- //
|
||||
public MemoryFaction() {
|
||||
}
|
||||
|
||||
public MemoryFaction(String id) {
|
||||
this.id = id;
|
||||
this.open = Conf.newFactionsDefaultOpen;
|
||||
this.tag = "???";
|
||||
this.description = TL.GENERIC_DEFAULTDESCRIPTION.toString();
|
||||
this.lastPlayerLoggedOffTime = 0;
|
||||
this.peaceful = false;
|
||||
this.peacefulExplosionsEnabled = false;
|
||||
this.permanent = false;
|
||||
this.money = 0.0;
|
||||
this.powerBoost = 0.0;
|
||||
this.foundedDate = System.currentTimeMillis();
|
||||
this.maxVaults = Conf.defaultMaxVaults;
|
||||
this.defaultRole = Role.RECRUIT;
|
||||
|
||||
resetPerms(); // Reset on new Faction so it has default values.
|
||||
}
|
||||
|
||||
public MemoryFaction(MemoryFaction old) {
|
||||
id = old.id;
|
||||
peacefulExplosionsEnabled = old.peacefulExplosionsEnabled;
|
||||
permanent = old.permanent;
|
||||
tag = old.tag;
|
||||
description = old.description;
|
||||
open = old.open;
|
||||
foundedDate = old.foundedDate;
|
||||
peaceful = old.peaceful;
|
||||
permanentPower = old.permanentPower;
|
||||
home = old.home;
|
||||
lastPlayerLoggedOffTime = old.lastPlayerLoggedOffTime;
|
||||
money = old.money;
|
||||
powerBoost = old.powerBoost;
|
||||
relationWish = old.relationWish;
|
||||
claimOwnership = old.claimOwnership;
|
||||
fplayers = new HashSet<>();
|
||||
invites = old.invites;
|
||||
announcements = old.announcements;
|
||||
this.defaultRole = Role.NORMAL;
|
||||
|
||||
resetPerms(); // Reset on new Faction so it has default values.
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Extra Getters And Setters
|
||||
// -------------------------------------------- //
|
||||
|
@ -23,6 +23,12 @@ import java.util.logging.Level;
|
||||
public class JSONFPlayers extends MemoryFPlayers {
|
||||
// Info on how to persist
|
||||
private Gson gson;
|
||||
private File file;
|
||||
|
||||
public JSONFPlayers() {
|
||||
file = new File(P.p.getDataFolder(), "players.json");
|
||||
gson = P.p.gson;
|
||||
}
|
||||
|
||||
public Gson getGson() {
|
||||
return gson;
|
||||
@ -32,13 +38,6 @@ public class JSONFPlayers extends MemoryFPlayers {
|
||||
this.gson = gson;
|
||||
}
|
||||
|
||||
private File file;
|
||||
|
||||
public JSONFPlayers() {
|
||||
file = new File(P.p.getDataFolder(), "players.json");
|
||||
gson = P.p.gson;
|
||||
}
|
||||
|
||||
public void convertFrom(MemoryFPlayers old) {
|
||||
this.fPlayers.putAll(Maps.transformValues(old.fPlayers, new Function<FPlayer, JSONFPlayer>() {
|
||||
@Override
|
||||
|
@ -23,25 +23,24 @@ import java.util.logging.Level;
|
||||
public class JSONFactions extends MemoryFactions {
|
||||
// Info on how to persist
|
||||
private final Gson gson;
|
||||
private final File file;
|
||||
|
||||
public JSONFactions() {
|
||||
this.file = new File(P.p.getDataFolder(), "factions.json");
|
||||
this.gson = P.p.gson;
|
||||
this.nextId = 1;
|
||||
}
|
||||
|
||||
public Gson getGson() {
|
||||
return gson;
|
||||
}
|
||||
|
||||
private final File file;
|
||||
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCTORS
|
||||
// -------------------------------------------- //
|
||||
|
||||
public JSONFactions() {
|
||||
this.file = new File(P.p.getDataFolder(), "factions.json");
|
||||
this.gson = P.p.gson;
|
||||
this.nextId = 1;
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
public void forceSave() {
|
||||
|
@ -20,7 +20,7 @@ public class DiscUtil {
|
||||
// -------------------------------------------- //
|
||||
// BYTE
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static HashMap<String, Lock> locks = new HashMap<>();
|
||||
|
||||
public static byte[] readBytes(File file) throws IOException {
|
||||
int length = (int) file.length();
|
||||
@ -34,29 +34,27 @@ public class DiscUtil {
|
||||
return output;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// STRING
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void writeBytes(File file, byte[] bytes) throws IOException {
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
out.write(bytes);
|
||||
out.close();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// STRING
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void write(File file, String content) throws IOException {
|
||||
writeBytes(file, utf8(content));
|
||||
}
|
||||
|
||||
public static String read(File file) throws IOException {
|
||||
return utf8(readBytes(file));
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CATCH
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static HashMap<String, Lock> locks = new HashMap<>();
|
||||
public static String read(File file) throws IOException {
|
||||
return utf8(readBytes(file));
|
||||
}
|
||||
|
||||
public static boolean writeCatch(final File file, final String content, boolean sync) {
|
||||
String name = file.getName();
|
||||
|
@ -730,7 +730,6 @@ public enum TL {
|
||||
COMMAND_RULES_CLEAR_SUCCESS("&cRule cleared successfully!"),
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Leaving - This is accessed through a command, and so it MAY need a COMMAND_* slug :s
|
||||
*/
|
||||
@ -811,7 +810,6 @@ public enum TL {
|
||||
GENERIC_PLACEHOLDER("<This is a placeholder for a message you should not see>"),
|
||||
|
||||
|
||||
|
||||
WARBANNER_NOFACTION("&cYou need a faction to use a warbanner!"),
|
||||
WARBANNER_COOLDOWN("&cThe warbanner is on cooldown for your faction!"),
|
||||
WARBANNER_INVALIDLOC("&cYou can only use warbanners in enemy land or the warzone"),
|
||||
@ -945,10 +943,10 @@ public enum TL {
|
||||
WARMUPS_ALREADY("&cYou are already warming up."),
|
||||
WARMUPS_CANCELLED("&cYou have cancelled your warmup.");
|
||||
|
||||
public static SimpleDateFormat sdf;
|
||||
private static YamlConfiguration LANG;
|
||||
private String path;
|
||||
private String def;
|
||||
private static YamlConfiguration LANG;
|
||||
public static SimpleDateFormat sdf;
|
||||
|
||||
/**
|
||||
* Lang enum constructor.
|
||||
|
@ -86,20 +86,31 @@ public enum TagReplacer {
|
||||
private TagType type;
|
||||
private String tag;
|
||||
|
||||
protected enum TagType {
|
||||
FANCY(0), PLAYER(1), FACTION(2), GENERAL(3);
|
||||
public int id;
|
||||
|
||||
TagType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
TagReplacer(TagType type, String tag) {
|
||||
this.type = type;
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all the variables we can use for this type<br>
|
||||
*
|
||||
* @param type the type we want
|
||||
* @return a list of all the variables with this type
|
||||
*/
|
||||
protected static List<TagReplacer> getByType(TagType type) {
|
||||
List<TagReplacer> tagReplacers = new ArrayList<>();
|
||||
for (TagReplacer tagReplacer : TagReplacer.values()) {
|
||||
if (type == TagType.FANCY) {
|
||||
if (tagReplacer.type == TagType.FANCY) {
|
||||
tagReplacers.add(tagReplacer);
|
||||
}
|
||||
} else if (tagReplacer.type.id >= type.id) {
|
||||
tagReplacers.add(tagReplacer);
|
||||
}
|
||||
}
|
||||
return tagReplacers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected access to this generic server related variable
|
||||
*
|
||||
@ -245,26 +256,6 @@ public enum TagReplacer {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all the variables we can use for this type<br>
|
||||
*
|
||||
* @param type the type we want
|
||||
* @return a list of all the variables with this type
|
||||
*/
|
||||
protected static List<TagReplacer> getByType(TagType type) {
|
||||
List<TagReplacer> tagReplacers = new ArrayList<>();
|
||||
for (TagReplacer tagReplacer : TagReplacer.values()) {
|
||||
if (type == TagType.FANCY) {
|
||||
if (tagReplacer.type == TagType.FANCY) {
|
||||
tagReplacers.add(tagReplacer);
|
||||
}
|
||||
} else if (tagReplacer.type.id >= type.id) {
|
||||
tagReplacers.add(tagReplacer);
|
||||
}
|
||||
}
|
||||
return tagReplacers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param original raw line with variables
|
||||
* @param value what to replace var in raw line with
|
||||
@ -293,4 +284,13 @@ public enum TagReplacer {
|
||||
public String getTag() {
|
||||
return this.tag;
|
||||
}
|
||||
|
||||
protected enum TagType {
|
||||
FANCY(0), PLAYER(1), FACTION(2), GENERAL(3);
|
||||
public int id;
|
||||
|
||||
TagType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,34 +10,23 @@ import java.util.regex.Pattern;
|
||||
|
||||
public class TextUtil {
|
||||
|
||||
public Map<String, String> tags;
|
||||
|
||||
public TextUtil() {
|
||||
this.tags = new HashMap<>();
|
||||
}
|
||||
public static final transient Pattern patternTag = Pattern.compile("<([a-zA-Z0-9_]*)>");
|
||||
private final static String titleizeLine = repeat("-", 52);
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Top-level parsing functions.
|
||||
// -------------------------------------------- //
|
||||
|
||||
public String parse(String str, Object... args) {
|
||||
return String.format(this.parse(str), args);
|
||||
}
|
||||
|
||||
public String parse(String str) {
|
||||
return this.parseTags(parseColor(str));
|
||||
}
|
||||
private final static int titleizeBalance = -1;
|
||||
public Map<String, String> tags;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Tag parsing
|
||||
// -------------------------------------------- //
|
||||
|
||||
public String parseTags(String str) {
|
||||
return replaceTags(str, this.tags);
|
||||
public TextUtil() {
|
||||
this.tags = new HashMap<>();
|
||||
}
|
||||
|
||||
public static final transient Pattern patternTag = Pattern.compile("<([a-zA-Z0-9_]*)>");
|
||||
|
||||
public static String replaceTags(String str, Map<String, String> tags) {
|
||||
StringBuffer ret = new StringBuffer();
|
||||
Matcher matcher = patternTag.matcher(str);
|
||||
@ -54,14 +43,6 @@ public class TextUtil {
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Fancy parsing
|
||||
// -------------------------------------------- //
|
||||
|
||||
public FancyMessage parseFancy(String prefix) {
|
||||
return toFancy(parse(prefix));
|
||||
}
|
||||
|
||||
public static FancyMessage toFancy(String first) {
|
||||
String text = "";
|
||||
FancyMessage message = new FancyMessage(text);
|
||||
@ -101,7 +82,7 @@ public class TextUtil {
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Color parsing
|
||||
// Fancy parsing
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String parseColor(String string) {
|
||||
@ -118,6 +99,10 @@ public class TextUtil {
|
||||
return string;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Color parsing
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String parseColorAcc(String string) {
|
||||
return string.replace("`e", "").replace("`r", ChatColor.RED.toString()).replace("`R", ChatColor.DARK_RED.toString()).replace("`y", ChatColor.YELLOW.toString()).replace("`Y", ChatColor.GOLD.toString()).replace("`g", ChatColor.GREEN.toString()).replace("`G", ChatColor.DARK_GREEN.toString()).replace("`a", ChatColor.AQUA.toString()).replace("`A", ChatColor.DARK_AQUA.toString()).replace("`b", ChatColor.BLUE.toString()).replace("`B", ChatColor.DARK_BLUE.toString()).replace("`p", ChatColor.LIGHT_PURPLE.toString()).replace("`P", ChatColor.DARK_PURPLE.toString()).replace("`k", ChatColor.BLACK.toString()).replace("`s", ChatColor.GRAY.toString()).replace("`S", ChatColor.DARK_GRAY.toString()).replace("`w", ChatColor.WHITE.toString());
|
||||
}
|
||||
@ -126,10 +111,6 @@ public class TextUtil {
|
||||
return string.replace("<empty>", "").replace("<black>", "\u00A70").replace("<navy>", "\u00A71").replace("<green>", "\u00A72").replace("<teal>", "\u00A73").replace("<red>", "\u00A74").replace("<purple>", "\u00A75").replace("<gold>", "\u00A76").replace("<silver>", "\u00A77").replace("<gray>", "\u00A78").replace("<blue>", "\u00A79").replace("<lime>", "\u00A7a").replace("<aqua>", "\u00A7b").replace("<rose>", "\u00A7c").replace("<pink>", "\u00A7d").replace("<yellow>", "\u00A7e").replace("<white>", "\u00A7f");
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Standard utils like UCFirst, implode and repeat.
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String upperCaseFirst(String string) {
|
||||
return string.substring(0, 1).toUpperCase() + string.substring(1);
|
||||
}
|
||||
@ -145,6 +126,10 @@ public class TextUtil {
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Standard utils like UCFirst, implode and repeat.
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String repeat(String s, int times) {
|
||||
if (times <= 0) {
|
||||
return "";
|
||||
@ -153,10 +138,6 @@ public class TextUtil {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Material name tools
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String getMaterialName(Material material) {
|
||||
return material.toString().replace('_', ' ').toLowerCase();
|
||||
}
|
||||
@ -165,12 +146,56 @@ public class TextUtil {
|
||||
return getMaterialName(Material.getMaterial(materialId));
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Material name tools
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String getBestStartWithCI(Collection<String> candidates, String start) {
|
||||
String ret = null;
|
||||
int best = 0;
|
||||
|
||||
start = start.toLowerCase();
|
||||
int minlength = start.length();
|
||||
for (String candidate : candidates) {
|
||||
if (candidate.length() < minlength) {
|
||||
continue;
|
||||
}
|
||||
if (!candidate.toLowerCase().startsWith(start)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// The closer to zero the better
|
||||
int lendiff = candidate.length() - minlength;
|
||||
if (lendiff == 0) {
|
||||
return candidate;
|
||||
}
|
||||
if (lendiff < best || best == 0) {
|
||||
best = lendiff;
|
||||
ret = candidate;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public String parse(String str, Object... args) {
|
||||
return String.format(this.parse(str), args);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// Paging and chrome-tools like titleize
|
||||
// -------------------------------------------- //
|
||||
|
||||
private final static String titleizeLine = repeat("-", 52);
|
||||
private final static int titleizeBalance = -1;
|
||||
public String parse(String str) {
|
||||
return this.parseTags(parseColor(str));
|
||||
}
|
||||
|
||||
public String parseTags(String str) {
|
||||
return replaceTags(str, this.tags);
|
||||
}
|
||||
|
||||
public FancyMessage parseFancy(String prefix) {
|
||||
return toFancy(parse(prefix));
|
||||
}
|
||||
|
||||
public String titleize(String str) {
|
||||
String center = ChatColor.DARK_GRAY + "< " + parseTags("<l>") + str + parseTags("<a>") + ChatColor.DARK_GRAY + " >";
|
||||
@ -212,31 +237,4 @@ public class TextUtil {
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static String getBestStartWithCI(Collection<String> candidates, String start) {
|
||||
String ret = null;
|
||||
int best = 0;
|
||||
|
||||
start = start.toLowerCase();
|
||||
int minlength = start.length();
|
||||
for (String candidate : candidates) {
|
||||
if (candidate.length() < minlength) {
|
||||
continue;
|
||||
}
|
||||
if (!candidate.toLowerCase().startsWith(start)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// The closer to zero the better
|
||||
int lendiff = candidate.length() - minlength;
|
||||
if (lendiff == 0) {
|
||||
return candidate;
|
||||
}
|
||||
if (lendiff < best || best == 0) {
|
||||
best = lendiff;
|
||||
ret = candidate;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
@ -33,28 +33,6 @@ public class UUIDFetcher implements Callable<Map<String, UUID>> {
|
||||
this(names, true);
|
||||
}
|
||||
|
||||
public Map<String, UUID> call() throws Exception {
|
||||
Map<String, UUID> uuidMap = new HashMap<>();
|
||||
int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
|
||||
for (int i = 0; i < requests; i++) {
|
||||
HttpURLConnection connection = createConnection();
|
||||
String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size())));
|
||||
writeBody(connection, body);
|
||||
JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||
for (Object profile : array) {
|
||||
JSONObject jsonProfile = (JSONObject) profile;
|
||||
String id = (String) jsonProfile.get("id");
|
||||
String name = (String) jsonProfile.get("name");
|
||||
UUID uuid = UUIDFetcher.getUUID(id);
|
||||
uuidMap.put(name, uuid);
|
||||
}
|
||||
if (rateLimiting && i != requests - 1) {
|
||||
Thread.sleep(100L);
|
||||
}
|
||||
}
|
||||
return uuidMap;
|
||||
}
|
||||
|
||||
private static void writeBody(HttpURLConnection connection, String body) throws Exception {
|
||||
OutputStream stream = connection.getOutputStream();
|
||||
stream.write(body.getBytes());
|
||||
@ -97,4 +75,26 @@ public class UUIDFetcher implements Callable<Map<String, UUID>> {
|
||||
public static UUID getUUIDOf(String name) throws Exception {
|
||||
return new UUIDFetcher(Collections.singletonList(name)).call().get(name);
|
||||
}
|
||||
|
||||
public Map<String, UUID> call() throws Exception {
|
||||
Map<String, UUID> uuidMap = new HashMap<>();
|
||||
int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
|
||||
for (int i = 0; i < requests; i++) {
|
||||
HttpURLConnection connection = createConnection();
|
||||
String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size())));
|
||||
writeBody(connection, body);
|
||||
JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||
for (Object profile : array) {
|
||||
JSONObject jsonProfile = (JSONObject) profile;
|
||||
String id = (String) jsonProfile.get("id");
|
||||
String name = (String) jsonProfile.get("name");
|
||||
UUID uuid = UUIDFetcher.getUUID(id);
|
||||
uuidMap.put(name, uuid);
|
||||
}
|
||||
if (rateLimiting && i != requests - 1) {
|
||||
Thread.sleep(100L);
|
||||
}
|
||||
}
|
||||
return uuidMap;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user