From 9625b324d58e78fbc49e84226c7024fc56a1f599 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 26 Aug 2019 19:33:16 +0300 Subject: [PATCH] configuration file --- .../minecraft/globalchat/Config.java | 63 +++++++++++++++++++ .../minecraft/globalchat/MainPlugin.java | 17 +++-- .../minecraft/globalchat/mq/KafkaService.java | 1 + src/main/resources/config.yml | 9 +++ 4 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ru/dmitriymx/minecraft/globalchat/Config.java create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/ru/dmitriymx/minecraft/globalchat/Config.java b/src/main/java/ru/dmitriymx/minecraft/globalchat/Config.java new file mode 100644 index 0000000..b25a5ba --- /dev/null +++ b/src/main/java/ru/dmitriymx/minecraft/globalchat/Config.java @@ -0,0 +1,63 @@ +package ru.dmitriymx.minecraft.globalchat; + +import lombok.AllArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.List; +import java.util.StringJoiner; + +@AllArgsConstructor +class Config { + + private JavaPlugin plugin; + private FileConfiguration config; + + String getHosts() { + String hosts; + List hostList = config.getStringList("kafka.hosts"); + if (hostList.size() == 0) { + Bukkit.getServer().getPluginManager().disablePlugin(plugin); + throw new RuntimeException("Empty field 'kafka.hosts'!"); + } else if (hostList.size() == 1) { + hosts = hostList.get(0); + } else { + StringJoiner sj = new StringJoiner(","); + hostList.forEach(sj::add); + hosts = sj.toString(); + } + + return hosts; + } + + String getTopic() { + String topic = config.getString("kafka.topic"); + if (topic == null || topic.trim().isEmpty()) { + Bukkit.getServer().getPluginManager().disablePlugin(plugin); + throw new RuntimeException("Empty field 'kafka.topic'!"); + } + + return topic; + } + + long getDuration() { + long duration = config.getLong("kafka.duration"); + if (duration == 0L) { + plugin.getLogger().warning("Field 'kafka.duration' is verry low. Set default value 1000."); + duration = 1000L; + } + + return duration; + } + + String getFormat() { + String format = config.getString("message_format"); + if (format.trim().isEmpty()) { + plugin.getLogger().warning("Field 'message_format' is empty. Set default value '{0}: {1}'."); + format = "{0}: {1}"; + } + + return format; + } +} diff --git a/src/main/java/ru/dmitriymx/minecraft/globalchat/MainPlugin.java b/src/main/java/ru/dmitriymx/minecraft/globalchat/MainPlugin.java index 75411c8..531f8b8 100644 --- a/src/main/java/ru/dmitriymx/minecraft/globalchat/MainPlugin.java +++ b/src/main/java/ru/dmitriymx/minecraft/globalchat/MainPlugin.java @@ -4,13 +4,17 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import ru.dmitriymx.minecraft.globalchat.mq.KafkaService; +import java.text.MessageFormat; + public class MainPlugin extends JavaPlugin { + private Config config; private KafkaService service; private Thread mqThread; @Override public void onEnable() { + initConfig(); initKafkaService(); getServer().getPluginManager().registerEvents(new ChatListener(service), this); } @@ -20,19 +24,22 @@ public class MainPlugin extends JavaPlugin { mqThread.interrupt(); } + private void initConfig() { + saveDefaultConfig(); + config = new Config(this, getConfig()); + } + private void initKafkaService() { ClassLoader originalContext = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(null); - //FIXME перенести в конфигурацию - service = new KafkaService("127.0.0.1:9092", "global-chat", 1000); + service = new KafkaService(config.getHosts(), config.getTopic(), config.getDuration()); Thread.currentThread().setContextClassLoader(originalContext); mqThread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { service.get().forEach(messageData -> { - //FIXME формат сообщений должен браться из конфига - Bukkit.getServer().broadcastMessage(String.format( - "%s: %s", + Bukkit.getServer().broadcastMessage(MessageFormat.format( + config.getFormat(), messageData.getPlayerName(), messageData.getMessage() )); diff --git a/src/main/java/ru/dmitriymx/minecraft/globalchat/mq/KafkaService.java b/src/main/java/ru/dmitriymx/minecraft/globalchat/mq/KafkaService.java index a04a9ac..e3af492 100644 --- a/src/main/java/ru/dmitriymx/minecraft/globalchat/mq/KafkaService.java +++ b/src/main/java/ru/dmitriymx/minecraft/globalchat/mq/KafkaService.java @@ -59,6 +59,7 @@ public class KafkaService { ChatMessageData data = GSON.fromJson(record.value(), ChatMessageData.class); list.add(data); } catch (Exception ignore) { + //FIXME } }); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..504c4a0 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,9 @@ +kafka: + hosts: [ '127.0.0.1:9022' ] + topic: 'global-chat' + duration: 1000 + +# Global message format. +# {0} - player name +# {1} - message +message_format: '{0}: {1}'