From 4e4a6272baeeb765364126120bb945aa4a59c385 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 1 Jan 2021 18:57:12 +0300 Subject: [PATCH 1/5] EventContext: add cancelEvent method --- src/main/java/ghast/EventContext.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/ghast/EventContext.java b/src/main/java/ghast/EventContext.java index 5a9a33a..1ddd732 100644 --- a/src/main/java/ghast/EventContext.java +++ b/src/main/java/ghast/EventContext.java @@ -3,6 +3,7 @@ package ghast; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -17,6 +18,7 @@ import java.util.function.Consumer; public class EventContext implements Listener { private static final BooleanSupplier EMPTY_FILTER = () -> true; + private static final Consumer CANCEL_EVENT = event -> event.setCancelled(true); private final Map, Consumer> eventMap = new HashMap<>(); private BooleanSupplier filter = EMPTY_FILTER; @@ -31,8 +33,7 @@ public class EventContext implements Listener { eventMap.remove(eventType); } else { eventMap.put(eventType, consumer); - Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority, - this::eventExecute, GhastTools.getPlugin()); + bukkitRegisterEvent(eventType, eventPriority); } return this; } @@ -41,6 +42,21 @@ public class EventContext implements Listener { return onEvent(eventType, EventPriority.NORMAL, consumer); } + public EventContext cancelEvent(Class eventType, EventPriority eventPriority) { + eventMap.put(eventType, CANCEL_EVENT); + bukkitRegisterEvent(eventType, eventPriority); + return this; + } + + public EventContext cancelEvent(Class eventType) { + return cancelEvent(eventType, EventPriority.NORMAL); + } + + private void bukkitRegisterEvent(Class eventType, EventPriority eventPriority) { + Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority, + this::eventExecute, GhastTools.getPlugin()); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private void eventExecute(Listener listener, Event event) { Consumer consumer = eventMap.get(event.getClass()); From fa0159e7c7318325386a3fcbbadd954415c8e2f9 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 1 Jan 2021 18:58:14 +0300 Subject: [PATCH 2/5] fix SuppressWarnings --- src/main/java/ghast/XLog.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ghast/XLog.java b/src/main/java/ghast/XLog.java index cbadd99..b480aad 100644 --- a/src/main/java/ghast/XLog.java +++ b/src/main/java/ghast/XLog.java @@ -7,6 +7,7 @@ import java.util.logging.Level; import static java.text.MessageFormat.format; @UtilityClass +@SuppressWarnings("unused") public class XLog { //region Debug From 603aec8e45e9681d01d4e1a7a37bf821284368cd Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 1 Jan 2021 18:59:13 +0300 Subject: [PATCH 3/5] GhastTools: change scope getPlugin method --- src/main/java/ghast/GhastTools.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/ghast/GhastTools.java b/src/main/java/ghast/GhastTools.java index 39fdd11..a374852 100644 --- a/src/main/java/ghast/GhastTools.java +++ b/src/main/java/ghast/GhastTools.java @@ -23,6 +23,20 @@ public class GhastTools { } } + @SuppressWarnings("java:S112") + public Plugin getPlugin() { + if (refPlugin == null) { + throw new RuntimeException("Plugin not set."); + } + + Plugin plugin = refPlugin.get(); + if (plugin == null) { + throw new RuntimeException("Plugin not set."); + } + + return plugin; + } + @SuppressWarnings("java:S112") public YamlConfiguration loadConfig(boolean saveDefault) { if (saveDefault) { @@ -39,18 +53,4 @@ public class GhastTools { public YamlConfiguration loadConfig() { return loadConfig(true); } - - @SuppressWarnings("java:S112") - Plugin getPlugin() { - if (refPlugin == null) { - throw new RuntimeException("Plugin not set."); - } - - Plugin plugin = refPlugin.get(); - if (plugin == null) { - throw new RuntimeException("Plugin not set."); - } - - return plugin; - } } From 481fd84ecbda56dbb9ea606a1be2e80f9a2bb314 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 1 Jan 2021 21:43:08 +0300 Subject: [PATCH 4/5] add I18n --- build.gradle | 2 ++ src/main/java/ghast/I18n.java | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/ghast/I18n.java diff --git a/build.gradle b/build.gradle index 4884c99..a5fa628 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ ext { 'commons-lang:commons-lang', 'org.yaml:snakeyaml' ]], + commons_text: 'org.apache.commons:commons-text:1.9', lombok: 'org.projectlombok:lombok:1.18.12' ] } @@ -42,4 +43,5 @@ dependencies { annotationProcessor libs.lombok compileOnly2 libs.bukkit + implementation libs.commons_text } \ No newline at end of file diff --git a/src/main/java/ghast/I18n.java b/src/main/java/ghast/I18n.java new file mode 100644 index 0000000..b9495e6 --- /dev/null +++ b/src/main/java/ghast/I18n.java @@ -0,0 +1,65 @@ +package ghast; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.experimental.UtilityClass; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringSubstitutor; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.util.HashMap; +import java.util.Map; + +@UtilityClass +@SuppressWarnings("unused") +public class I18n { + + private final Map messagesMap = new HashMap<>(); + + @SuppressWarnings("java:S112") + public void loadMessages(Reader reader) { + try { + BufferedReader bufferedReader = new BufferedReader(reader); + String line; + while ((line = bufferedReader.readLine()) != null) { + String[] split = line.split("=", 2); + messagesMap.put(split[0].trim(), split[1].trim()); + } + } catch (IOException e) { + throw new RuntimeException("Error load messages: " + e.getMessage(), e); + } + } + + public void loadMessages(Map messages) { + messagesMap.putAll(messages); + } + + public String getMessage(String key) { + return messagesMap.getOrDefault(key, StringUtils.EMPTY); + } + + public String getMessage(String key, Map params) { + return StringSubstitutor.replace(getMessage(key), params, "{", "}"); + } + + public ParamBuilder paramBuilder() { + return new ParamBuilder(); + } + + @NoArgsConstructor(access = AccessLevel.PRIVATE) + public static class ParamBuilder { + + private final Map params = new HashMap<>(); + + public ParamBuilder add(String key, Object value) { + params.put(key, value); + return this; + } + + public Map build() { + return params; + } + } +} From 0a5fd7a15516a219c6bb7bf138f62d016e5a0a25 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 1 Jan 2021 22:05:54 +0300 Subject: [PATCH 5/5] I18n: add support multi lang. --- src/main/java/ghast/I18n.java | 42 ++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/ghast/I18n.java b/src/main/java/ghast/I18n.java index b9495e6..c56c826 100644 --- a/src/main/java/ghast/I18n.java +++ b/src/main/java/ghast/I18n.java @@ -1,5 +1,7 @@ package ghast; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.experimental.UtilityClass; @@ -16,34 +18,58 @@ import java.util.Map; @SuppressWarnings("unused") public class I18n { - private final Map messagesMap = new HashMap<>(); + private final String DEFAULT_LANG = "en"; + private final Table messagesMap = HashBasedTable.create(); + //region Load messages @SuppressWarnings("java:S112") - public void loadMessages(Reader reader) { + public void loadMessages(String lang, Reader reader) { + Map map = messagesMap.row(lang.toLowerCase()); + try { BufferedReader bufferedReader = new BufferedReader(reader); String line; while ((line = bufferedReader.readLine()) != null) { String[] split = line.split("=", 2); - messagesMap.put(split[0].trim(), split[1].trim()); + map.put(split[0].trim().toLowerCase(), split[1].trim()); } } catch (IOException e) { throw new RuntimeException("Error load messages: " + e.getMessage(), e); } } + public void loadMessages(String lang, Map messages) { + Map map = messagesMap.row(lang.toLowerCase()); + messages.forEach((k, v) -> map.put(k.toLowerCase(), v)); + } + + public void loadMessages(Reader reader) { + loadMessages(DEFAULT_LANG, reader); + } + public void loadMessages(Map messages) { - messagesMap.putAll(messages); + loadMessages(DEFAULT_LANG, messages); + } + //endregion + + //region Get message + public String get(String lang, String key) { + return messagesMap.row(lang.toLowerCase()).getOrDefault(key.toLowerCase(), StringUtils.EMPTY); } - public String getMessage(String key) { - return messagesMap.getOrDefault(key, StringUtils.EMPTY); + public String get(String lang, String key, Map params) { + return StringSubstitutor.replace(get(lang, key.toLowerCase()), params, "{", "}"); } - public String getMessage(String key, Map params) { - return StringSubstitutor.replace(getMessage(key), params, "{", "}"); + public String get(String key) { + return get(DEFAULT_LANG, key); } + public String get(String key, Map params) { + return get(DEFAULT_LANG, key, params); + } + //endregion + public ParamBuilder paramBuilder() { return new ParamBuilder(); }