mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-11-30 14:23:21 +01:00
Add {world: worldName} placeholder.
This commit is contained in:
parent
9ba424e749
commit
10bfead9e4
@ -1,6 +1,6 @@
|
|||||||
name: HolographicDisplays
|
name: HolographicDisplays
|
||||||
main: com.gmail.filoghost.holograms.HolographicDisplays
|
main: com.gmail.filoghost.holograms.HolographicDisplays
|
||||||
version: 1.8.5
|
version: 1.8.6
|
||||||
|
|
||||||
softdepend: [Multiverse-Core, MultiWorld, My Worlds, My_Worlds, ProtocolLib]
|
softdepend: [Multiverse-Core, MultiWorld, My Worlds, My_Worlds, ProtocolLib]
|
||||||
|
|
||||||
|
@ -26,7 +26,8 @@ import com.gmail.filoghost.holograms.placeholders.AnimationManager;
|
|||||||
import com.gmail.filoghost.holograms.placeholders.PlaceholderManager;
|
import com.gmail.filoghost.holograms.placeholders.PlaceholderManager;
|
||||||
import com.gmail.filoghost.holograms.placeholders.StaticPlaceholders;
|
import com.gmail.filoghost.holograms.placeholders.StaticPlaceholders;
|
||||||
import com.gmail.filoghost.holograms.protocol.ProtocolLibHook;
|
import com.gmail.filoghost.holograms.protocol.ProtocolLibHook;
|
||||||
import com.gmail.filoghost.holograms.utils.BungeeCleanupTask;
|
import com.gmail.filoghost.holograms.tasks.BungeeCleanupTask;
|
||||||
|
import com.gmail.filoghost.holograms.tasks.WorldPlayerCounterTask;
|
||||||
import com.gmail.filoghost.holograms.utils.StringUtils;
|
import com.gmail.filoghost.holograms.utils.StringUtils;
|
||||||
import com.gmail.filoghost.holograms.utils.VersionUtils;
|
import com.gmail.filoghost.holograms.utils.VersionUtils;
|
||||||
import com.gmail.filoghost.holograms.utils.ConfigNode;
|
import com.gmail.filoghost.holograms.utils.ConfigNode;
|
||||||
@ -195,6 +196,7 @@ public class HolographicDisplays extends JavaPlugin {
|
|||||||
ServerInfoTimer.setRefreshSeconds(Configuration.bungeeRefreshSeconds);
|
ServerInfoTimer.setRefreshSeconds(Configuration.bungeeRefreshSeconds);
|
||||||
ServerInfoTimer.startTask();
|
ServerInfoTimer.startTask();
|
||||||
BungeeCleanupTask.start();
|
BungeeCleanupTask.start();
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new WorldPlayerCounterTask(), 3 * 20L, 3 * 20L);
|
||||||
|
|
||||||
Set<String> savedHolograms = HologramDatabase.getHolograms();
|
Set<String> savedHolograms = HologramDatabase.getHolograms();
|
||||||
if (savedHolograms != null && savedHolograms.size() > 0) {
|
if (savedHolograms != null && savedHolograms.size() > 0) {
|
||||||
|
@ -73,6 +73,7 @@ public class BungeeChannel implements PluginMessageListener {
|
|||||||
out.writeUTF(server);
|
out.writeUTF(server);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// It should not happen.
|
// It should not happen.
|
||||||
|
e.printStackTrace();
|
||||||
HolographicDisplays.getInstance().getLogger().warning("I/O Exception while asking for player count on server '" + server + "'.");
|
HolographicDisplays.getInstance().getLogger().warning("I/O Exception while asking for player count on server '" + server + "'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ public class HologramLineData {
|
|||||||
|
|
||||||
private String[] bungeeOnlinePlayers;
|
private String[] bungeeOnlinePlayers;
|
||||||
private String[] bungeeStatuses;
|
private String[] bungeeStatuses;
|
||||||
|
private String[] worldsPlayerCount;
|
||||||
|
|
||||||
public HologramLineData(HologramHorse horse, String originalName) {
|
public HologramLineData(HologramHorse horse, String originalName) {
|
||||||
this.horse = horse;
|
this.horse = horse;
|
||||||
@ -34,6 +35,11 @@ public class HologramLineData {
|
|||||||
bungeeStatuses = new String[list.size()];
|
bungeeStatuses = new String[list.size()];
|
||||||
bungeeStatuses = list.toArray(bungeeStatuses);
|
bungeeStatuses = list.toArray(bungeeStatuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setWorldsCountToCheck(List<String> list) {
|
||||||
|
worldsPlayerCount = new String[list.size()];
|
||||||
|
worldsPlayerCount = list.toArray(worldsPlayerCount);
|
||||||
|
}
|
||||||
|
|
||||||
public HologramHorse getHorse() {
|
public HologramHorse getHorse() {
|
||||||
return horse;
|
return horse;
|
||||||
@ -55,6 +61,10 @@ public class HologramLineData {
|
|||||||
return bungeeStatuses != null;
|
return bungeeStatuses != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasWorldsCountToCheck() {
|
||||||
|
return worldsPlayerCount != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Can be null.
|
* Can be null.
|
||||||
*/
|
*/
|
||||||
@ -75,4 +85,11 @@ public class HologramLineData {
|
|||||||
public String[] getBungeeStatusesToCheck() {
|
public String[] getBungeeStatusesToCheck() {
|
||||||
return bungeeStatuses;
|
return bungeeStatuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be null.
|
||||||
|
*/
|
||||||
|
public String[] getWorldsPlayersCountToCheck() {
|
||||||
|
return worldsPlayerCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.gmail.filoghost.holograms.HolographicDisplays;
|
|||||||
import com.gmail.filoghost.holograms.bungee.ServerInfoTimer;
|
import com.gmail.filoghost.holograms.bungee.ServerInfoTimer;
|
||||||
import com.gmail.filoghost.holograms.nms.interfaces.HologramHorse;
|
import com.gmail.filoghost.holograms.nms.interfaces.HologramHorse;
|
||||||
import com.gmail.filoghost.holograms.object.HologramLineData;
|
import com.gmail.filoghost.holograms.object.HologramLineData;
|
||||||
|
import com.gmail.filoghost.holograms.tasks.WorldPlayerCounterTask;
|
||||||
|
|
||||||
public class PlaceholderManager {
|
public class PlaceholderManager {
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ public class PlaceholderManager {
|
|||||||
private static final Pattern BUNGEE_ONLINE_PATTERN = Pattern.compile("(\\{online:)([^}]+)(\\})");
|
private static final Pattern BUNGEE_ONLINE_PATTERN = Pattern.compile("(\\{online:)([^}]+)(\\})");
|
||||||
private static final Pattern BUNGEE_STATUS_PATTERN = Pattern.compile("(\\{status:)([^}]+)(\\})");
|
private static final Pattern BUNGEE_STATUS_PATTERN = Pattern.compile("(\\{status:)([^}]+)(\\})");
|
||||||
private static final Pattern ANIMATION_PATTERN = Pattern.compile("(\\{animation:)([^}]+)(\\})");
|
private static final Pattern ANIMATION_PATTERN = Pattern.compile("(\\{animation:)([^}]+)(\\})");
|
||||||
|
private static final Pattern WORLD_PATTERN = Pattern.compile("(\\{world:)([^}]+)(\\})");
|
||||||
|
|
||||||
public PlaceholderManager() {
|
public PlaceholderManager() {
|
||||||
horsesToRefresh = new ArrayList<HologramLineData>();
|
horsesToRefresh = new ArrayList<HologramLineData>();
|
||||||
@ -48,6 +50,7 @@ public class PlaceholderManager {
|
|||||||
List<Placeholder> containedPlaceholders = null;
|
List<Placeholder> containedPlaceholders = null;
|
||||||
List<String> bungeeServersOnlinePlayers = null;
|
List<String> bungeeServersOnlinePlayers = null;
|
||||||
List<String> bungeeServersStatuses = null;
|
List<String> bungeeServersStatuses = null;
|
||||||
|
List<String> worldsPlayerCount = null;
|
||||||
Matcher matcher;
|
Matcher matcher;
|
||||||
|
|
||||||
for (Placeholder placeholder : PlaceholdersList.getDefaults()) {
|
for (Placeholder placeholder : PlaceholdersList.getDefaults()) {
|
||||||
@ -68,6 +71,25 @@ public class PlaceholderManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Players in a world count pattern.
|
||||||
|
matcher = WORLD_PATTERN.matcher(customName);
|
||||||
|
while (matcher.find()) {
|
||||||
|
|
||||||
|
if (worldsPlayerCount == null) {
|
||||||
|
worldsPlayerCount = new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName = matcher.group(2).trim().toLowerCase();
|
||||||
|
|
||||||
|
// Shorter placeholder without spaces.
|
||||||
|
customName = customName.replace(matcher.group(), "{world:" + worldName + "}");
|
||||||
|
|
||||||
|
// Add it to tracked worlds.
|
||||||
|
worldsPlayerCount.add(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// BungeeCord online pattern.
|
// BungeeCord online pattern.
|
||||||
matcher = BUNGEE_ONLINE_PATTERN.matcher(customName);
|
matcher = BUNGEE_ONLINE_PATTERN.matcher(customName);
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
@ -105,8 +127,6 @@ public class PlaceholderManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Animation pattern.
|
// Animation pattern.
|
||||||
matcher = ANIMATION_PATTERN.matcher(customName);
|
matcher = ANIMATION_PATTERN.matcher(customName);
|
||||||
boolean updateName = false;
|
boolean updateName = false;
|
||||||
@ -132,7 +152,7 @@ public class PlaceholderManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (containedPlaceholders != null || bungeeServersOnlinePlayers != null || bungeeServersStatuses != null) {
|
if (containedPlaceholders != null || bungeeServersOnlinePlayers != null || bungeeServersStatuses != null || worldsPlayerCount != null) {
|
||||||
HologramLineData data = new HologramLineData(horse, customName);
|
HologramLineData data = new HologramLineData(horse, customName);
|
||||||
|
|
||||||
if (containedPlaceholders != null) {
|
if (containedPlaceholders != null) {
|
||||||
@ -147,6 +167,10 @@ public class PlaceholderManager {
|
|||||||
data.setBungeeStatusesToCheck(bungeeServersStatuses);
|
data.setBungeeStatusesToCheck(bungeeServersStatuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (worldsPlayerCount != null) {
|
||||||
|
data.setWorldsCountToCheck(worldsPlayerCount);
|
||||||
|
}
|
||||||
|
|
||||||
horsesToRefresh.add(data);
|
horsesToRefresh.add(data);
|
||||||
updatePlaceholders(data);
|
updatePlaceholders(data);
|
||||||
} else {
|
} else {
|
||||||
@ -223,6 +247,12 @@ public class PlaceholderManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.hasWorldsCountToCheck()) {
|
||||||
|
for (String world : data.getWorldsPlayersCountToCheck()) {
|
||||||
|
newCustomName = newCustomName.replace("{world:" + world + "}", WorldPlayerCounterTask.getCount(world));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update only if needed, don't send useless packets.
|
// Update only if needed, don't send useless packets.
|
||||||
if (!oldCustomName.equals(newCustomName)) {
|
if (!oldCustomName.equals(newCustomName)) {
|
||||||
data.getHorse().forceSetCustomName(newCustomName);
|
data.getHorse().forceSetCustomName(newCustomName);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.gmail.filoghost.holograms.utils;
|
package com.gmail.filoghost.holograms.tasks;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.gmail.filoghost.holograms.tasks;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
|
public class WorldPlayerCounterTask implements Runnable {
|
||||||
|
|
||||||
|
private static Map<String, Integer> worlds = Maps.newHashMap();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
worlds.clear();
|
||||||
|
|
||||||
|
for (World world : Bukkit.getWorlds()) {
|
||||||
|
worlds.put(world.getName().toLowerCase(), world.getPlayers().size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getCount(String world) {
|
||||||
|
Integer count = worlds.get(world);
|
||||||
|
return count != null ? count.toString() : "world not found";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user