diff --git a/src/main/java/com/massivecraft/factions/SavageFactions.java b/src/main/java/com/massivecraft/factions/SavageFactions.java index 617acb38..73cde51f 100644 --- a/src/main/java/com/massivecraft/factions/SavageFactions.java +++ b/src/main/java/com/massivecraft/factions/SavageFactions.java @@ -42,6 +42,7 @@ import java.io.*; import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; import java.util.stream.Collectors; @@ -58,8 +59,6 @@ public class SavageFactions extends MPlugin { public static boolean startupFinished = false; - // Persistence related - public static ArrayList playersFlying = new ArrayList(); public boolean PlaceholderApi; // Commands @@ -68,6 +67,7 @@ public class SavageFactions extends MPlugin { public boolean mc17 = false; public boolean mc18 = false; public boolean mc113 = false; + public boolean mc114 = false; public boolean useNonPacketParticles = false; public boolean factionsFlight = false; //multiversion material fields @@ -134,16 +134,25 @@ public class SavageFactions extends MPlugin { } int version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]); - if (version == 7) { - SavageFactions.plugin.log("Minecraft Version 1.7 found, disabling banners, itemflags inside GUIs, and Titles."); - mc17 = true; - } else if (version == 8) { - SavageFactions.plugin.log("Minecraft Version 1.8 found, Title Fadeouttime etc will not be configurable."); - mc18 = true; - } else if (version == 13) { - SavageFactions.plugin.log("Minecraft Version 1.13 found, New Items will be used."); - mc113 = true; - changeItemIDSInConfig(); + switch (version) { + case 7: + SavageFactions.plugin.log("Minecraft Version 1.7 found, disabling banners, itemflags inside GUIs, and Titles."); + mc17 = true; + break; + case 8: + SavageFactions.plugin.log("Minecraft Version 1.8 found, Title Fadeouttime etc will not be configurable."); + mc18 = true; + break; + case 13: + SavageFactions.plugin.log("Minecraft Version 1.13 found, New Items will be used."); + mc113 = true; + changeItemIDSInConfig(); + break; + case 14: + SavageFactions.plugin.log("Minecraft Version 1.14 found."); + mc114 = true; + changeItemIDSInConfig(); + break; } setupMultiversionMaterials(); migrateFPlayerLeaders(); @@ -172,10 +181,6 @@ public class SavageFactions extends MPlugin { } faction.addFPlayer(fPlayer); } - playersFlying.clear(); - for (FPlayer fPlayer : FPlayers.getInstance().getAllFPlayers()) { - playersFlying.add(fPlayer); - } UtilFly.run(); Board.getInstance().load(); @@ -336,7 +341,7 @@ public class SavageFactions extends MPlugin { private void migrateFPlayerLeaders() { List lines = new ArrayList<>(); - File fplayerFile = new File("plugins\\Factions\\players.json"); + File fplayerFile = new File("plugins" + File.pathSeparator + "Factions" + File.pathSeparator + "players.json"); try { BufferedReader br = new BufferedReader(new FileReader(fplayerFile)); @@ -740,7 +745,13 @@ public class SavageFactions extends MPlugin { } public String getPrimaryGroup(OfflinePlayer player) { - return perms == null || !perms.hasGroupSupport() ? " " : perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player); + AtomicReference primaryGroup = new AtomicReference<>(); + + if (perms == null || !perms.hasGroupSupport()) return " "; + else { + Bukkit.getScheduler().runTaskAsynchronously(this, () -> primaryGroup.set(perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player))); + return primaryGroup.get(); + } } public void debug(Level level, String s) { diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java b/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java index 4a9a8721..ac0908b2 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java @@ -30,15 +30,17 @@ public class CmdShowClaims extends FCommand { } for (String world : chunkMap.keySet()) { String message = TL.COMMAND_SHOWCLAIMS_FORMAT.toString().replace("{world}", world); - sendMessage(message.replace("{chunks}", "")); // made {chunks} blank as I removed the placeholder and people wont update their config :shrug: + // made {chunks} blank as I removed the placeholder and people wont update their config :shrug: + sendMessage(message.replace("{chunks}", "")); StringBuilder chunks = new StringBuilder(); for (String chunkString : chunkMap.get(world)) { - chunks.append(chunkString + ", "); + chunks.append(chunkString).append(", "); if (chunks.toString().length() >= 2000) { sendMessage(chunks.toString()); chunks.setLength(0); } } + if (chunks.length() != 0) sendMessage(chunks.toString()); sendMessage(""); } diff --git a/src/main/java/com/massivecraft/factions/util/UtilFly.java b/src/main/java/com/massivecraft/factions/util/UtilFly.java index 954fc9ff..3797d5ea 100644 --- a/src/main/java/com/massivecraft/factions/util/UtilFly.java +++ b/src/main/java/com/massivecraft/factions/util/UtilFly.java @@ -1,6 +1,7 @@ package com.massivecraft.factions.util; import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.Faction; import com.massivecraft.factions.SavageFactions; import com.massivecraft.factions.struct.Relation; @@ -12,18 +13,15 @@ import java.util.Iterator; public class UtilFly { - public static ArrayList playersFlying = SavageFactions.playersFlying; public static void run() { if (!SavageFactions.plugin.getConfig().getBoolean("enable-faction-flight")) return; - playersFlying.clear(); Bukkit.getScheduler().scheduleSyncRepeatingTask(SavageFactions.plugin, () -> { - for (FPlayer fp : playersFlying) { - if (fp != null) - fp.checkIfNearbyEnemies(); + for (FPlayer fp : FPlayers.getInstance().getAllFPlayers()) { + if (fp.isFlying()) fp.checkIfNearbyEnemies(); } }, 0, SavageFactions.plugin.getConfig().getInt("fly-task-interval", 10)); } @@ -36,11 +34,6 @@ public class UtilFly { fp.getPlayer().setFlying(fly); fp.setFlying(fly); - if (fly) { - playersFlying.add(fp); - } else { - playersFlying.remove(fp); - } if (!silent) { if (!damage) { diff --git a/src/main/java/com/massivecraft/factions/zcore/fperms/PermissableAction.java b/src/main/java/com/massivecraft/factions/zcore/fperms/PermissableAction.java index 6b09adba..4f1eb1a2 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fperms/PermissableAction.java +++ b/src/main/java/com/massivecraft/factions/zcore/fperms/PermissableAction.java @@ -2,6 +2,7 @@ package com.massivecraft.factions.zcore.fperms; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.SavageFactions; +import com.massivecraft.factions.util.MultiversionMaterials; import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; @@ -106,7 +107,7 @@ public enum PermissableAction { } Material material = Material.matchMaterial(section.getString("materials." + name().toLowerCase().replace('_', '-'))); if (material == null) { - material = SavageFactions.plugin.STAINED_CLAY; + material = MultiversionMaterials.fromString(SavageFactions.plugin.getConfig().getString("fperm-gui.action.materials")).parseMaterial(); } Access access = fme.getFaction().getAccess(permissable, this); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 13289e80..a917f3af 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -523,6 +523,9 @@ fperm-gui: home: 49 # Material to show, if the material is colorable eg: Wool, Stained Clay it will update with it's access color materials: + # This is important to change, depending on what you use. If you use clay, make it clay, if its glass make it glass. + default: STAINED_GLASS + # These below are for different actual permissions. build: STAINED_GLASS destroy: STAINED_GLASS frost-walk: STAINED_GLASS