From 1211dfb0574a5d49740b3922147bbcc23540decc Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Tue, 17 Aug 2021 16:29:31 +0800 Subject: [PATCH] Implement suggested improvements. * Use singleton pattern for DefaultContentFilter with getInstance method. * Have a default SendHandler. * Don't need streams for small dataset. * Private WorldListContentParser class to improve readability. --- .../commands/GamerulesCommand.java | 7 +- .../MultiverseCore/commands/ListCommand.java | 67 ++++++++++--------- .../display/ContentDisplay.java | 3 +- .../display/filters/DefaultContentFilter.java | 11 ++- .../display/handlers/BaseSendHandler.java | 2 +- .../display/handlers/DefaultSendHandler.java | 29 ++++++++ 6 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/onarandombox/MultiverseCore/display/handlers/DefaultSendHandler.java diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/GamerulesCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/GamerulesCommand.java index 23a6dd1f..c5be741b 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commands/GamerulesCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commands/GamerulesCommand.java @@ -22,7 +22,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionDefault; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -51,7 +50,7 @@ public class GamerulesCommand extends MultiverseCommand { // We NEED a world from the command line Player p; World world; - ContentFilter filter = DefaultContentFilter.INSTANCE; + ContentFilter filter = DefaultContentFilter.getInstance(); if (sender instanceof Player) { p = (Player) sender; @@ -103,10 +102,10 @@ public class GamerulesCommand extends MultiverseCommand { private Map getGameRuleMap(World world) { Map gameRuleMap = new HashMap<>(); - Arrays.stream(GameRule.values()).forEach(rule -> { + for (GameRule rule : GameRule.values()) { Object value = world.getGameRuleValue(rule); gameRuleMap.put(rule.getName(), value); - }); + } return gameRuleMap; } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java index 2c1036a9..ca4f88d0 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java @@ -20,6 +20,7 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionDefault; +import org.jetbrains.annotations.NotNull; import java.util.List; @@ -41,7 +42,7 @@ public class ListCommand extends MultiverseCommand { @Override public void runCommand(CommandSender sender, List args) { - ContentFilter filter = DefaultContentFilter.INSTANCE; + ContentFilter filter = DefaultContentFilter.getInstance(); int page = 1; // Either page or filter. @@ -64,7 +65,7 @@ public class ListCommand extends MultiverseCommand { } ContentDisplay.create() - .addContentParser(newWorldListContentParser()) + .addContentParser(new WorldListContentParser()) .withSendHandler(PagedSendHandler.create() .withHeader("%s====[ Multiverse World List ]====", ChatColor.GOLD) .withFilter(filter) @@ -72,46 +73,48 @@ public class ListCommand extends MultiverseCommand { .send(sender); } - private ContentParser newWorldListContentParser() { - return (sender, content) -> { + private class WorldListContentParser implements ContentParser { + + @Override + public void parse(@NotNull CommandSender sender, @NotNull List content) { Player player = (sender instanceof Player) ? (Player) sender : null; - this.plugin.getMVWorldManager().getMVWorlds().stream() + plugin.getMVWorldManager().getMVWorlds().stream() .filter(world -> player == null || plugin.getMVPerms().canEnterWorld(player, world)) .filter(world -> canSeeWorld(player, world)) .map(world -> hiddenText(world) + world.getColoredWorldString() + " - " + parseColouredEnvironment(world.getEnvironment())) .forEach(content::add); - this.plugin.getMVWorldManager().getUnloadedWorlds().stream() + plugin.getMVWorldManager().getUnloadedWorlds().stream() .filter(world -> plugin.getMVPerms().hasPermission(sender, "multiverse.access." + world, true)) .map(world -> ChatColor.GRAY + world + " - UNLOADED") .forEach(content::add); - }; - } - - private boolean canSeeWorld(Player player, MultiverseWorld world) { - return !world.isHidden() - || player == null - || this.plugin.getMVPerms().hasPermission(player, "multiverse.core.modify", true); - } - - private String hiddenText(MultiverseWorld world) { - return (world.isHidden()) ? String.format("%s[H] ", ChatColor.GRAY) : ""; - } - - private String parseColouredEnvironment(World.Environment env) { - ChatColor color = ChatColor.GOLD; - switch (env) { - case NETHER: - color = ChatColor.RED; - break; - case NORMAL: - color = ChatColor.GREEN; - break; - case THE_END: - color = ChatColor.AQUA; - break; } - return color + env.toString(); + + private boolean canSeeWorld(Player player, MultiverseWorld world) { + return !world.isHidden() + || player == null + || plugin.getMVPerms().hasPermission(player, "multiverse.core.modify", true); + } + + private String hiddenText(MultiverseWorld world) { + return (world.isHidden()) ? String.format("%s[H] ", ChatColor.GRAY) : ""; + } + + private String parseColouredEnvironment(World.Environment env) { + ChatColor color = ChatColor.GOLD; + switch (env) { + case NETHER: + color = ChatColor.RED; + break; + case NORMAL: + color = ChatColor.GREEN; + break; + case THE_END: + color = ChatColor.AQUA; + break; + } + return color + env.toString(); + } } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/display/ContentDisplay.java b/src/main/java/com/onarandombox/MultiverseCore/display/ContentDisplay.java index 411332fc..b2303c54 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/display/ContentDisplay.java +++ b/src/main/java/com/onarandombox/MultiverseCore/display/ContentDisplay.java @@ -1,5 +1,6 @@ package com.onarandombox.MultiverseCore.display; +import com.onarandombox.MultiverseCore.display.handlers.DefaultSendHandler; import com.onarandombox.MultiverseCore.display.handlers.SendHandler; import com.onarandombox.MultiverseCore.display.parsers.ContentParser; import org.bukkit.command.CommandSender; @@ -25,7 +26,7 @@ public class ContentDisplay { } private final List contentParsers = new ArrayList<>(); - private SendHandler sendHandler; + private SendHandler sendHandler = DefaultSendHandler.getInstance(); public ContentDisplay() { } diff --git a/src/main/java/com/onarandombox/MultiverseCore/display/filters/DefaultContentFilter.java b/src/main/java/com/onarandombox/MultiverseCore/display/filters/DefaultContentFilter.java index 8540d2ab..5070d647 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/display/filters/DefaultContentFilter.java +++ b/src/main/java/com/onarandombox/MultiverseCore/display/filters/DefaultContentFilter.java @@ -5,9 +5,16 @@ package com.onarandombox.MultiverseCore.display.filters; */ public class DefaultContentFilter implements ContentFilter { - public static DefaultContentFilter INSTANCE = new DefaultContentFilter(); + public static DefaultContentFilter instance; - public DefaultContentFilter() { + public static DefaultContentFilter getInstance() { + if (instance == null) { + instance = new DefaultContentFilter(); + } + return instance; + } + + private DefaultContentFilter() { } /** diff --git a/src/main/java/com/onarandombox/MultiverseCore/display/handlers/BaseSendHandler.java b/src/main/java/com/onarandombox/MultiverseCore/display/handlers/BaseSendHandler.java index d8992e62..46e11b29 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/display/handlers/BaseSendHandler.java +++ b/src/main/java/com/onarandombox/MultiverseCore/display/handlers/BaseSendHandler.java @@ -18,7 +18,7 @@ import java.util.stream.Collectors; public abstract class BaseSendHandler> implements SendHandler { protected String header = ""; - protected ContentFilter filter = DefaultContentFilter.INSTANCE; + protected ContentFilter filter = DefaultContentFilter.getInstance(); /** * {@inheritDoc} diff --git a/src/main/java/com/onarandombox/MultiverseCore/display/handlers/DefaultSendHandler.java b/src/main/java/com/onarandombox/MultiverseCore/display/handlers/DefaultSendHandler.java new file mode 100644 index 00000000..e0299785 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/display/handlers/DefaultSendHandler.java @@ -0,0 +1,29 @@ +package com.onarandombox.MultiverseCore.display.handlers; + +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class DefaultSendHandler implements SendHandler { + + private static DefaultSendHandler instance; + + public static DefaultSendHandler getInstance() { + if (instance == null) { + instance = new DefaultSendHandler(); + } + return instance; + } + + private DefaultSendHandler() { + } + + /** + * {@inheritDoc} + */ + @Override + public void send(@NotNull CommandSender sender, @NotNull List content) { + sender.sendMessage(content.toArray(new String[0])); + } +}