diff --git a/pom.xml b/pom.xml
index fec0062..975da2a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,36 @@
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+
+ dev.dejvokep.boostedyaml.*
+ xyz.soukup.boostedYaml
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+ dev.dejvokep:boosted-yaml
+
+ dev.dejvokep:boosted-yaml-spigot
+
+
+
+
+
+
@@ -160,5 +190,10 @@
3.4.0-SNAPSHOT
provided
+
+ dev.dejvokep
+ boosted-yaml
+ 1.3.5
+
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/EcocraftVelocity.java b/src/main/java/xyz/soukup/ecocraftVelocity/EcocraftVelocity.java
index 3384213..425948a 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/EcocraftVelocity.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/EcocraftVelocity.java
@@ -8,13 +8,25 @@ import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.plugin.Plugin;
+import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer;
+import dev.dejvokep.boostedyaml.YamlDocument;
import org.slf4j.Logger;
import xyz.soukup.ecocraftVelocity.chat.DirectMessages;
import xyz.soukup.ecocraftVelocity.chat.GlobalChat;
import xyz.soukup.ecocraftVelocity.chat.JoinLeaveMessages;
+import xyz.soukup.ecocraftVelocity.chat.ReplyCommand;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.motd.MotdRequestEvent;
import xyz.soukup.ecocraftVelocity.tab.GlobalTab;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Objects;
+
@Plugin(id = "ecocraftvelocity", name = "EcocraftVelocity", version = "1.0-SNAPSHOT")
public class EcocraftVelocity {
@@ -24,29 +36,76 @@ public class EcocraftVelocity {
@Inject
private ProxyServer server;
+ @Inject
+ @DataDirectory
+ private Path dataDirectory;
+
+ private YamlDocument config;
+ private YamlDocument lang;
+ private LangManager langManager;
+
@Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) {
logger.info("Startujeme!");
+ setupConfigs();
+ loadResources();
registerEvents();
registerCommands();
}
-;
+
private void registerEvents(){
EventManager eventManager = server.getEventManager();
- eventManager.register(this, new GlobalChat(server));
- eventManager.register(this, new GlobalTab(server));
- eventManager.register(this, new JoinLeaveMessages(server));
+ eventManager.register(this, new GlobalChat(server, langManager));
+ eventManager.register(this, new GlobalTab(server, langManager));
+ eventManager.register(this, new JoinLeaveMessages(server, langManager));
+ eventManager.register(this, new MotdRequestEvent(langManager, dataDirectory));
}
private void registerCommands(){
- CommandManager commandManager = server.getCommandManager();
+ registerCommand("msg", new DirectMessages(server, langManager).command());
+ registerCommand("r", new ReplyCommand(langManager).command(server));
+ }
- CommandMeta commandMeta = commandManager.metaBuilder("msg")
+ private void registerCommand(String name, BrigadierCommand command){
+ CommandManager commandManager = server.getCommandManager();
+ CommandMeta commandMeta = commandManager.metaBuilder(name)
.plugin(this)
.build();
- BrigadierCommand commandToRegister = DirectMessages.messageCommand(server);
+ commandManager.register(commandMeta, command);
+ }
+
+ private void setupConfigs(){
+ try {
+ config = YamlDocument.create(new File(dataDirectory.toFile(), "config.yml"), Objects.requireNonNull(this.getClass().getResourceAsStream("/config.yml")));
+ lang = YamlDocument.create(new File(dataDirectory.toFile(), "messages.yml"), Objects.requireNonNull(this.getClass().getResourceAsStream("/messages.yml")));
+ langManager = new LangManager(lang);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
- commandManager.register(commandMeta, commandToRegister);
+ private void loadResources(){
+ loadResource("server-icon.png");
}
+
+ private void loadResource(String relativePath){
+ try {
+ Path target = dataDirectory.resolve(relativePath);
+
+ if (Files.exists(target)) {
+ return;
+ }
+
+ Files.createDirectories(dataDirectory);
+ InputStream in = getClass().getClassLoader().getResourceAsStream(relativePath);
+
+ assert in != null;
+ Files.copy(in, target);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/chat/DirectMessages.java b/src/main/java/xyz/soukup/ecocraftVelocity/chat/DirectMessages.java
index c231eea..90a5766 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/chat/DirectMessages.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/chat/DirectMessages.java
@@ -12,32 +12,42 @@ import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
-import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.configuration.Replace;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public class DirectMessages {
- public static BrigadierCommand messageCommand(final ProxyServer proxy) {
+
+ private final ProxyServer proxy;
+ private final LangManager langManager;
+
+ public DirectMessages(ProxyServer proxyServer, LangManager langManager) {
+ this.proxy = proxyServer;
+ this.langManager = langManager;
+ }
+
+ public BrigadierCommand command() {
LiteralCommandNode msg = BrigadierCommand.literalArgumentBuilder("msg")
.then(BrigadierCommand.requiredArgumentBuilder("player", StringArgumentType.word())
- .suggests((ctx, builder) -> playerSuggestor(proxy, ctx, builder))
+ .suggests(this::playerSuggestor)
.then(BrigadierCommand.requiredArgumentBuilder("message", StringArgumentType.greedyString())
- .executes((ctx) -> sendDirectMessage(proxy, ctx)))
+ .executes(this::sendDirectMessage))
)
.build();
return new BrigadierCommand(msg);
}
- private static CompletableFuture playerSuggestor(ProxyServer proxy, CommandContext ctx, SuggestionsBuilder builder) {
+ private CompletableFuture playerSuggestor( CommandContext ctx, SuggestionsBuilder builder) {
proxy.getAllPlayers().forEach(player -> {
builder.suggest(player.getUsername());
});
return builder.buildFuture();
}
- private static int sendDirectMessage(ProxyServer proxy, CommandContext context) {
+ private int sendDirectMessage(CommandContext context) {
String playerName = context.getArgument("player", String.class);
String message = context.getArgument("message", String.class);
MiniMessage mm = MiniMessage.miniMessage();
@@ -48,24 +58,25 @@ public class DirectMessages {
if (playerOptional.isEmpty()){
sender.sendMessage(mm.deserialize("Není online."));
- return Command.SINGLE_SUCCESS;
+ return 1;
}
- String senderFormat = "
Klikni pro odepsání\">" +
- "já ▶ " +
- ": ";
+ Component senderMessage = langManager.get("chat-format.direct.sender",
+ new Replace("msg", message, sender.hasPermission("ecocraft.chat.formatting")),
+ new Replace("name", playerName));
- sender.sendMessage(mm.deserialize(senderFormat, Placeholder.unparsed("msg", message), Placeholder.unparsed("name", playerName)));
+ sender.sendMessage(senderMessage);
proxy.getPlayer(playerName).ifPresent(player ->
{
- String receiverFormat = "
Klikni pro odepsání\">" +
- " ▶ já" +
- ": ";
- player.sendMessage(mm.deserialize(receiverFormat, Placeholder.unparsed("msg", message), Placeholder.unparsed("name", sender.getUsername())));
+ Component receiverMessage = langManager.get("chat-format.direct.receiver",
+ new Replace("msg", message, sender.hasPermission("ecocraft.chat.formatting")),
+ new Replace("name", sender.getUsername()));
+ player.sendMessage(receiverMessage);
+ ReplyCommand.addRecipient(player, sender);
}
);
return Command.SINGLE_SUCCESS;
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/chat/GlobalChat.java b/src/main/java/xyz/soukup/ecocraftVelocity/chat/GlobalChat.java
index 1e33b60..2c0c3ae 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/chat/GlobalChat.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/chat/GlobalChat.java
@@ -5,16 +5,17 @@ import com.velocitypowered.api.event.player.PlayerChatEvent;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.minimessage.MiniMessage;
-import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.configuration.Replace;
public class GlobalChat {
private final ProxyServer server;
- private final MiniMessage miniMessage = MiniMessage.miniMessage();
+ private final LangManager langManager;
- public GlobalChat(ProxyServer server){
+ public GlobalChat(ProxyServer server, LangManager langManager){
this.server = server;
+ this.langManager = langManager;
}
@Subscribe
@@ -22,29 +23,21 @@ public class GlobalChat {
//noinspection deprecation
event.setResult(PlayerChatEvent.ChatResult.denied());
- String message = event.getMessage();
+ String text = event.getMessage();
Player player = event.getPlayer();
- server.sendMessage(prepareMessageComponent(message, player));
-
-
+ Component message = langManager.get(
+ "chat-format.player-message",
+ new Replace("name", player.getUsername()),
+ new Replace("msg", text, player.hasPermission("ecocraft.chat.formatting"))
+ );
+ server.sendMessage(message);
- }
- private static Component prepareMessageComponent(String text, Player player){
- final MiniMessage miniMessage = MiniMessage.miniMessage();
- String format = "
Klikni pro napsání hráči'> >" +
- "" +
- ": ";
-
- return miniMessage.deserialize(
- format,
- Placeholder.parsed("name", player.getUsername()),
- Placeholder.unparsed("msg", text)
- );
}
+
}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/chat/JoinLeaveMessages.java b/src/main/java/xyz/soukup/ecocraftVelocity/chat/JoinLeaveMessages.java
index ab153cd..c0200e7 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/chat/JoinLeaveMessages.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/chat/JoinLeaveMessages.java
@@ -7,32 +7,31 @@ import com.velocitypowered.api.event.player.ServerPostConnectEvent;
import com.velocitypowered.api.proxy.ProxyServer;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.configuration.Replace;
public class JoinLeaveMessages {
private final ProxyServer server;
- private final MiniMessage miniMessage = MiniMessage.miniMessage();
+ private final LangManager langManager;
- public JoinLeaveMessages(ProxyServer server){
+ public JoinLeaveMessages(ProxyServer server, LangManager langManager){
this.server = server;
+ this.langManager = langManager;
}
@Subscribe
public void onJoin(LoginEvent event){
String name = event.getPlayer().getUsername();
- String messageFormat = "[+] ";
-
- server.sendMessage(miniMessage.deserialize(messageFormat, Placeholder.parsed("name", name)));
+ server.sendMessage(langManager.get("chat-format.join", new Replace("name", name)));
}
@Subscribe
public void onLeave(DisconnectEvent event){
String name = event.getPlayer().getUsername();
- String messageFormat = "[-] ";
-
- server.sendMessage(miniMessage.deserialize(messageFormat, Placeholder.parsed("name", name)));
+ server.sendMessage(langManager.get("chat-format.leave", new Replace("name", name)));
}
}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/chat/Recipients.java b/src/main/java/xyz/soukup/ecocraftVelocity/chat/Recipients.java
new file mode 100644
index 0000000..65c8b4c
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/chat/Recipients.java
@@ -0,0 +1,55 @@
+package xyz.soukup.ecocraftVelocity.chat;
+
+import com.velocitypowered.api.proxy.Player;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Recipients {
+ HashMap recipients;
+
+ public Recipients() {
+ this.recipients = new HashMap<>();
+ }
+
+ public void add(Player player){
+ recipients.put(player, Instant.now());
+ }
+
+
+ public List getPlayers(){
+ List players = new ArrayList<>();
+ Instant lastEligibleInstant = Instant.now().minus(Duration.ofMinutes(5));
+
+ recipients.forEach((player, date) -> {
+ if (date.isBefore(lastEligibleInstant) || !player.isActive()){
+ recipients.remove(player);
+ }else {
+ players.add(player);
+ }
+ });
+
+ return players;
+ }
+
+ public List getUsernames(){
+ List usernames = new ArrayList<>();
+
+ for (Player player : getPlayers()){
+ usernames.add(player.getUsername());
+ }
+
+ return usernames;
+ }
+
+ public int count(){
+ return getPlayers().size();
+ }
+
+ public Player getFirst(){
+ return getPlayers().get(0);
+ }
+}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/chat/ReplyCommand.java b/src/main/java/xyz/soukup/ecocraftVelocity/chat/ReplyCommand.java
index 559b8bf..3ebe9f9 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/chat/ReplyCommand.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/chat/ReplyCommand.java
@@ -1,6 +1,5 @@
package xyz.soukup.ecocraftVelocity.chat;
-import com.mojang.brigadier.Command;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.tree.LiteralCommandNode;
@@ -8,29 +7,95 @@ import com.velocitypowered.api.command.BrigadierCommand;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.JoinConfiguration;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.configuration.Replace;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ReplyCommand {
- public static HashMap> replyRecipients = new HashMap<>();
+ public static HashMap replyRecipients = new HashMap<>();
- public static BrigadierCommand replyCommand(final ProxyServer proxy){
+ private final LangManager langManager;
+
+ public ReplyCommand(LangManager langManager){
+ this.langManager = langManager;
+ }
+
+ public BrigadierCommand command(final ProxyServer proxy){
LiteralCommandNode reply = BrigadierCommand.literalArgumentBuilder("r")
.then(BrigadierCommand.requiredArgumentBuilder("message", StringArgumentType.greedyString())
- .executes(ReplyCommand::reply)
+ .executes((context -> reply(context, langManager)))
)
.build();
return new BrigadierCommand(reply);
}
- private static int reply(CommandContext ctx){
+ private static int reply(CommandContext ctx, LangManager langManager){
String message = ctx.getArgument("message", String.class);
- List recipients = replyRecipients.get(ctx.getSource());
+ Player sender = (Player) ctx.getSource();
+ Recipients recipients = replyRecipients.computeIfAbsent(sender, k -> new Recipients());
+
+ switch (recipients.count()){
+ case 0:
+ langManager.send("chat-format.direct.reply.error.no-recipients", sender);
+ break;
+ case 1:
+ sendDirectMessage(langManager, sender, recipients.getFirst(), message);
+ break;
+ default:
+ sendPlayerSelector(langManager, sender, recipients, message);
+ }
+
return 0;
}
+ private static void sendDirectMessage(LangManager langManager, Player sender, Player receiver, String message){
+ langManager.send("chat-format.direct.sender", sender,
+ new Replace("name", receiver.getUsername()),
+ new Replace("msg", message));
+ langManager.send("chat-format.direct.receiver", receiver,
+ new Replace("name", sender.getUsername()),
+ new Replace("msg", message));
+ addRecipient(sender, receiver);
+ }
+
+ private static void sendPlayerSelector(LangManager langManager, Player sender, Recipients recipients, String message){
+ List recipientsUsernames = recipients.getUsernames();
+ List formatedRecipientsUsernames = new ArrayList<>();
+
+ for (String username : recipientsUsernames){
+ Component formatedUsername = langManager.get("chat-format.direct.reply.multiple-receivers.name-format",
+ new Replace("name", username),
+ new Replace("msg", message));
+ formatedRecipientsUsernames.add(formatedUsername);
+ }
+
+ Component prefix = langManager.get("chat-format.direct.reply.multiple-receivers.prefix");
+
+ JoinConfiguration joinConfiguration = JoinConfiguration.separator(langManager.get("chat-format.direct.reply.multiple-receivers.separator"));
+ Component selector = Component.join(joinConfiguration,formatedRecipientsUsernames);
+
+ Component suffix = langManager.get("");
+
+ sender.sendMessage(prefix.append(selector).append(suffix));
+ }
+
+
+
+ public static void addRecipient(Player player1, Player player2){
+ Recipients recipients1 = replyRecipients.computeIfAbsent(player1, k -> new Recipients());
+ Recipients recipients2 = replyRecipients.computeIfAbsent(player2, k -> new Recipients());
+
+ recipients1.add(player2);
+ recipients2.add(player1);
+
+ }
+
}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/configuration/LangManager.java b/src/main/java/xyz/soukup/ecocraftVelocity/configuration/LangManager.java
new file mode 100644
index 0000000..2302822
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/configuration/LangManager.java
@@ -0,0 +1,74 @@
+package xyz.soukup.ecocraftVelocity.configuration;
+
+import com.velocitypowered.api.proxy.Player;
+import dev.dejvokep.boostedyaml.YamlDocument;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.ComponentBuilder;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+
+import javax.swing.plaf.PanelUI;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class LangManager {
+ private final MiniMessage miniMessage = MiniMessage.miniMessage();
+ private final YamlDocument langDocument;
+
+ public LangManager(YamlDocument langDocument) {
+ this.langDocument = langDocument;
+ }
+
+ public String getRaw(String key){
+ String raw = null;
+
+ if (langDocument.isList(key)){
+ List strings = langDocument.getStringList(key);
+ raw = String.join("
", strings);
+ }
+
+ if (raw == null){
+ raw = langDocument.getString(key);
+ }
+
+ if (raw == null){
+ return key;
+ }
+
+ return raw;
+ }
+ public Component get(String key){
+ String raw = getRaw(key);
+ return miniMessage.deserialize(raw);
+ }
+
+ public Component get(String key, Replace... replaces){
+ String raw = getRaw(key);
+
+ for (Replace replace : replaces){
+ raw = replace.replace(raw);
+ }
+
+ return miniMessage.deserialize(raw);
+ }
+
+ public Component getRandom(String key){
+ List list = langDocument.getStringList(key);
+
+ if (list == null){
+ return miniMessage.deserialize(key);
+ }
+
+ int randomInt = ThreadLocalRandom.current().nextInt(list.size());
+ String raw = list.get(randomInt);
+
+ return miniMessage.deserialize(raw);
+ }
+
+ public void send(String key, Player player, Replace... replaces){
+ Component message = get(key, replaces);
+ player.sendMessage(message);
+ }
+
+
+}
+;
\ No newline at end of file
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/configuration/Replace.java b/src/main/java/xyz/soukup/ecocraftVelocity/configuration/Replace.java
new file mode 100644
index 0000000..0b8c67b
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/configuration/Replace.java
@@ -0,0 +1,42 @@
+package xyz.soukup.ecocraftVelocity.configuration;
+
+import net.kyori.adventure.text.minimessage.MiniMessage;
+
+public class Replace {
+ private final String key;
+ private final String value;
+ private final Boolean allowFormatting;
+ private final MiniMessage miniMessage = MiniMessage.miniMessage();
+
+ public Replace(String key, String value){
+ this.key = key;
+ this.value = value;
+ this.allowFormatting = false;
+ }
+
+ public Replace(String key, String value, Boolean allowFormatting) {
+ this.key = key;
+ this.value = value;
+ this.allowFormatting = allowFormatting;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public Boolean getAllowFormatting() {
+ return allowFormatting;
+ }
+
+ public String replace(String string){
+ if (allowFormatting){
+ return string.replace("<" + key + ">", value);
+ }else{
+ return string.replace("<" + key + ">", miniMessage.stripTags(value));
+ }
+ }
+}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/motd/MotdRequestEvent.java b/src/main/java/xyz/soukup/ecocraftVelocity/motd/MotdRequestEvent.java
new file mode 100644
index 0000000..6523cdc
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/motd/MotdRequestEvent.java
@@ -0,0 +1,43 @@
+package xyz.soukup.ecocraftVelocity.motd;
+
+import com.velocitypowered.api.event.Subscribe;
+import com.velocitypowered.api.event.proxy.ProxyPingEvent;
+import com.velocitypowered.api.proxy.server.ServerPing;
+import com.velocitypowered.api.util.Favicon;
+import net.kyori.adventure.text.Component;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+public class MotdRequestEvent {
+ private final LangManager langManager;
+ private final Path dataDirectory;
+
+ public MotdRequestEvent(LangManager langManager, Path dataDirectory) {
+ this.langManager = langManager;
+ this.dataDirectory = dataDirectory;
+ }
+
+
+ @Subscribe
+ public void onServerPing(ProxyPingEvent event){
+
+ Component motd = langManager.get("motd.line1")
+ .append(Component.newline())
+ .append(langManager.getRandom("motd.quotes"));
+
+
+ ServerPing serverPing = event.getPing();
+ ServerPing.Builder builder = serverPing.asBuilder();
+ builder.description(motd);
+
+ try {
+ builder.favicon(Favicon.create(dataDirectory.resolve("server-icon.png")));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ event.setPing(builder.build());
+ }
+}
diff --git a/src/main/java/xyz/soukup/ecocraftVelocity/tab/GlobalTab.java b/src/main/java/xyz/soukup/ecocraftVelocity/tab/GlobalTab.java
index eeba160..dbb0040 100644
--- a/src/main/java/xyz/soukup/ecocraftVelocity/tab/GlobalTab.java
+++ b/src/main/java/xyz/soukup/ecocraftVelocity/tab/GlobalTab.java
@@ -7,19 +7,18 @@ import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.player.TabListEntry;
import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.format.NamedTextColor;
-import net.kyori.adventure.text.format.TextDecoration;
-import net.kyori.adventure.text.minimessage.MiniMessage;
-import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import xyz.soukup.ecocraftVelocity.configuration.LangManager;
+import xyz.soukup.ecocraftVelocity.configuration.Replace;
import java.util.UUID;
public class GlobalTab {
private final ProxyServer server;
- private final MiniMessage miniMessage = MiniMessage.miniMessage();
+ private final LangManager langManager;
- public GlobalTab(ProxyServer server) {
+ public GlobalTab(ProxyServer server, LangManager langManager) {
this.server = server;
+ this.langManager = langManager;
}
@Subscribe
@@ -28,7 +27,7 @@ public class GlobalTab {
for (Player recipient : server.getAllPlayers()) {
for (Player onlinePlayer : server.getAllPlayers()) {
- Component displayName = formatPlayerName(onlinePlayer);
+ Component displayName = langManager.get("tab.name-format", new Replace("name", onlinePlayer.getUsername()));
if (!recipient.getTabList().containsEntry(onlinePlayer.getUniqueId())) {
TabListEntry entry = TabListEntry.builder()
@@ -62,18 +61,11 @@ public class GlobalTab {
public void updateTablist() {
int onlineCount = server.getPlayerCount();
- String header = "
EcoCraft.cz" +
- "
BETA SERVER
";
-
- String footer = "
www.ecocraft.cz
";
+ Component header = langManager.get("tab.header");
+ Component footer = langManager.get("tab.footer");
for (Player player : server.getAllPlayers()) {
- player.sendPlayerListHeaderAndFooter(miniMessage.deserialize(header), miniMessage.deserialize(footer));
+ player.sendPlayerListHeaderAndFooter(header, footer);
}
}
-
- private Component formatPlayerName(Player player) {
- String format = "";
- return miniMessage.deserialize(format, Placeholder.unparsed("name", player.getUsername()));
- }
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml
new file mode 100644
index 0000000..14c00e5
--- /dev/null
+++ b/src/main/resources/messages.yml
@@ -0,0 +1,38 @@
+motd:
+ line1: "EcoCraft.cz CZ/SK Ekonomický Server"
+ new-message: "Čeká na tebe nová zpráva!"
+ quotes:
+ - "„Kdo jinému jámu kopá, ten je u něj na brigádě“"
+ - "„Ta java to je hrozný jazyk“"
+ - "„Sníh padá jinak, když kráčí vůdce“"
+ - "„Kdo mi to tu krade obilí?“"
+ - "„Není ta hora až moc velká?“"
+ - "„I use arch linux btw“"
+ - "„co jste provedli XD“"
+ - "„Kdo tu staví ty hákáče?“"
+tab:
+ header:
+ - ""
+ - "EcoCraft.cz"
+ - " BETA SERVER "
+ - ""
+ footer:
+ - ""
+ - " www.soukup.xyz"
+ - ""
+ name-format: ""
+chat-format:
+ join: "[+] "
+ leave: "[-] "
+ player-message: "
Klikni pro napsání hráči'>>: "
+ direct:
+ reply:
+ multiple-receivers:
+ prefix: "Vyber příjemce:
"
+ suffix: ""
+ separator: "
"
+ name-format: "Odeslat hráči '> '> -> "
+ error:
+ no-recipients: "Nemáš komu odepsat"
+ sender: "
Klikni pro odepsání'>>já ▶ : "
+ receiver: "
Klikni pro odepsání'>> ▶ já: "
\ No newline at end of file
diff --git a/src/main/resources/server-icon.png b/src/main/resources/server-icon.png
new file mode 100644
index 0000000..47e3c69
Binary files /dev/null and b/src/main/resources/server-icon.png differ