diff --git a/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java b/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java index 2ea0d13..6695afb 100644 --- a/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java +++ b/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java @@ -84,8 +84,9 @@ public class GradientConfig { public boolean isUpdateDisplayName() { return config.getBoolean("display.update-display-name", true); } public boolean isUpdateTabList() { return config.getBoolean("display.update-tab-list", true); } public boolean isUseTextDisplay() { return config.getBoolean("display.use-text-display", true); } - public double getTextDisplayHeight() { return config.getDouble("display.text-display-height", 2.3); } + public double getTextDisplayHeight() { return config.getDouble("display.text-display-height", 2.8); } public float getTextDisplayScale() { return (float) config.getDouble("display.text-display-scale", 0.8); } + public boolean isTextDisplaySeeThrough() { return config.getBoolean("display.text-display-see-through", false); } // Метод для временного изменения настройки TextDisplay public void setUseTextDisplay(boolean useTextDisplay) { diff --git a/src/main/java/com/loki/lochat/gradient/listeners/GradientPlayerListener.java b/src/main/java/com/loki/lochat/gradient/listeners/GradientPlayerListener.java index 158c247..a4e4824 100644 --- a/src/main/java/com/loki/lochat/gradient/listeners/GradientPlayerListener.java +++ b/src/main/java/com/loki/lochat/gradient/listeners/GradientPlayerListener.java @@ -57,4 +57,16 @@ public class GradientPlayerListener implements Listener { FoliaUtil.runAsync(module.getPlugin(), () -> module.getDataManager().savePlayerData(player.getUniqueId())); } + + @EventHandler + public void onPlayerToggleSneak(org.bukkit.event.player.PlayerToggleSneakEvent event) { + Player player = event.getPlayer(); + + // Обновляем TextDisplay чтобы он не скрывался при приседании + if (module.getTextDisplayManager() != null && module.getTextDisplayManager().hasDisplay(player.getUniqueId())) { + FoliaUtil.runEntityTask(module.getPlugin(), player, () -> { + module.getTextDisplayManager().updateDisplayPosition(player); + }); + } + } } diff --git a/src/main/java/com/loki/lochat/gradient/util/TextDisplayManager.java b/src/main/java/com/loki/lochat/gradient/util/TextDisplayManager.java index 5ee4087..34639dd 100644 --- a/src/main/java/com/loki/lochat/gradient/util/TextDisplayManager.java +++ b/src/main/java/com/loki/lochat/gradient/util/TextDisplayManager.java @@ -61,6 +61,7 @@ public class TextDisplayManager { double height = module.getConfig().getTextDisplayHeight(); float scale = module.getConfig().getTextDisplayScale(); + boolean seeThrough = module.getConfig().isTextDisplaySeeThrough(); // Создаем новый TextDisplay TextDisplay display = player.getWorld().spawn( @@ -70,7 +71,7 @@ public class TextDisplayManager { entity.text(textComponent); entity.setBillboard(org.bukkit.entity.Display.Billboard.CENTER); entity.setViewRange(64.0f); // Видимость на 64 блока - entity.setSeeThrough(true); // Видно через стены + entity.setSeeThrough(seeThrough); // Настраиваемая видимость через стены entity.setShadowRadius(0.0f); // Без тени entity.setShadowStrength(0.0f); // Без тени @@ -81,6 +82,9 @@ public class TextDisplayManager { new Vector3f(scale, scale, scale), // Размер текста new AxisAngle4f(0, 0, 0, 1) // Без поворота после масштабирования )); + + // Отключаем скрытие при приседании + entity.setVisibleByDefault(true); } ); diff --git a/src/main/java/com/loki/lochat/utils/ChatFormatter.java b/src/main/java/com/loki/lochat/utils/ChatFormatter.java index 29d590a..b353512 100644 --- a/src/main/java/com/loki/lochat/utils/ChatFormatter.java +++ b/src/main/java/com/loki/lochat/utils/ChatFormatter.java @@ -85,9 +85,15 @@ public final class ChatFormatter { Player receiver, String message ) { + // Получаем отображаемые имена игроков + String senderDisplay = getPlayerDisplayName(sender); + String receiverDisplay = getPlayerDisplayName(receiver); + return parse(format .replace("{sender}", sender.getName()) .replace("{receiver}", receiver.getName()) + .replace("{sender_display}", senderDisplay) + .replace("{receiver_display}", receiverDisplay) .replace("{message}", message)); } @@ -97,12 +103,34 @@ public final class ChatFormatter { Player receiver, String message ) { + // Получаем отображаемые имена игроков + String senderDisplay = getPlayerDisplayName(sender); + String receiverDisplay = getPlayerDisplayName(receiver); + return parse(format .replace("{sender}", sender.getName()) .replace("{receiver}", receiver.getName()) + .replace("{sender_display}", senderDisplay) + .replace("{receiver_display}", receiverDisplay) .replace("{message}", message)); } + /** + * Получает отображаемое имя игрока с градиентом + */ + private static String getPlayerDisplayName(Player player) { + // Получаем экземпляр плагина + com.loki.lochat.LoChat plugin = com.loki.lochat.LoChat.getInstance(); + + // Если градиентный модуль включен, используем его + if (plugin.getGradientModule() != null && plugin.getGradientModule().isEnabled()) { + return plugin.getGradientModule().getFormattedName(player); + } + + // Иначе просто имя игрока + return player.getName(); + } + /* ===================== FORMAT (Component-based) ===================== */ public static Component format( diff --git a/src/main/resources/gradient-config.yml b/src/main/resources/gradient-config.yml index edbc5a2..254770b 100644 --- a/src/main/resources/gradient-config.yml +++ b/src/main/resources/gradient-config.yml @@ -52,9 +52,11 @@ display: # Использовать TextDisplay вместо обычного display name (1.19.4+) use-text-display: true # Высота TextDisplay над игроком (в блоках) - text-display-height: 2.3 + text-display-height: 2.8 # Размер TextDisplay (от 0.1 до 2.0) text-display-scale: 0.8 + # Видно ли TextDisplay через стены + text-display-see-through: false # Тип хранилища: YAML или SQLITE storage-type: YAML