/
minecraftbackup
/
AnarchyExploitFixes
Обзор
Документация
Войти
/
minecraftbackup
/
AnarchyExploitFixes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
AnarchyExploitFixesFolia/src/main/java/me/xginko/aef/modules/misc/FirstJoinMessages.java
101 строка
5 KB
xGinko
doctors hate this trick
22 июн 2024, 20:20
22 июн 2024, 20:20
c35eece
Код
Авторство
О чём код?
package me.xginko.aef.modules.misc; import me.xginko.aef.AnarchyExploitFixes; import me.xginko.aef.enums.AEFKey; import me.xginko.aef.enums.AEFPermission; import me.xginko.aef.modules.AEFModule; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; public class FirstJoinMessages extends AEFModule implements Listener { private final AtomicInteger totalPlayers; private final boolean logFirstJoin; public FirstJoinMessages() { super("misc.join-leave-messages.first-join-messages"); this.totalPlayers = new AtomicInteger(0); this.config.addComment(configPath + ".enable", "Configure message in lang folder.\n" + "You can hide yourself and other players using the permission:\n" + AEFPermission.SILENT_JOIN.string()); this.logFirstJoin = config.getBoolean(configPath + ".show-in-console", true); } @Override public void enable() { // Prevent lag by getting total player number once and then counting up manually, // as getting all players is resource intense. // We do so async to not make the main thread wait. CompletableFuture.runAsync(() -> totalPlayers.set(plugin.getServer().getOfflinePlayers().length)) .thenRun(() -> plugin.getServer().getPluginManager().registerEvents(this, plugin)); } @Override public boolean shouldEnable() { return config.getBoolean(configPath + ".enable", false); } @Override public void disable() { HandlerList.unregisterAll(this); } @SuppressWarnings("DataFlowIssue") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onPlayerJoin(PlayerJoinEvent event) { final Player joiningPlayer = event.getPlayer(); if (joiningPlayer.hasPlayedBefore()) return; if (joiningPlayer.hasPermission(AEFPermission.SILENT_JOIN.string())) return; final int joiningPlayersNumber = totalPlayers.incrementAndGet(); for (final Player onlinePlayer : plugin.getServer().getOnlinePlayers()) { onlinePlayer.getScheduler().execute(plugin, () -> { final PersistentDataContainer dataContainer = onlinePlayer.getPersistentDataContainer(); if ( !dataContainer.has(AEFKey.CONNECT_MSG_TOGGLE.getKey()) ? config.connectionMsgsAreOnByDefault : dataContainer.get(AEFKey.CONNECT_MSG_TOGGLE.getKey(), PersistentDataType.BOOLEAN) ) { for (Component line : AnarchyExploitFixes.getLang(onlinePlayer.locale()).misc_firstJoinMessage) { onlinePlayer.sendMessage(line .replaceText(TextReplacementConfig.builder() .matchLiteral("%player%") .replacement(joiningPlayer.name()) .build()) .replaceText(TextReplacementConfig.builder() .matchLiteral("%players_num%") .replacement(Integer.toString(joiningPlayersNumber)) .build())); } } }, null, 1L); } if (logFirstJoin) { for (Component line : AnarchyExploitFixes.getLang(joiningPlayer.locale()).misc_firstJoinMessage) { AnarchyExploitFixes.getUnprefixedLogger().info(line .replaceText(TextReplacementConfig.builder() .matchLiteral("%player%") .replacement(joiningPlayer.name()) .build()) .replaceText(TextReplacementConfig.builder() .matchLiteral("%players_num%") .replacement(Integer.toString(joiningPlayersNumber)) .build()) .append(Component.text(" (" + joiningPlayer.locale() + ")"))); } } } }