Skip to content

Commit c0b105e

Browse files
committed
Improved the listing of the info command
1 parent 1ab10cd commit c0b105e

File tree

1 file changed

+59
-28
lines changed
  • multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world

1 file changed

+59
-28
lines changed

multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/InfoCommand.java

Lines changed: 59 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
1010
import com.dev7ex.multiworld.api.world.WorldEnvironment;
1111
import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
12+
import com.dev7ex.multiworld.util.Colored;
13+
import com.dev7ex.multiworld.world.DefaultWorldProvider;
14+
import org.bukkit.ChatColor;
1215
import org.bukkit.command.CommandSender;
1316
import org.jetbrains.annotations.NotNull;
1417

15-
import java.util.ArrayList;
16-
import java.util.Date;
17-
import java.util.List;
18+
import java.util.*;
1819

1920
/**
2021
* @author Dev7ex
@@ -30,9 +31,10 @@ public InfoCommand(@NotNull final BukkitPlugin plugin) {
3031
@Override
3132
public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
3233
final DefaultTranslationProvider translationProvider = MultiWorldPlugin.getInstance().getTranslationProvider();
34+
final DefaultWorldProvider worldProvider = MultiWorldPlugin.getInstance().getWorldProvider();
3335

3436
if (arguments.length != 2) {
35-
commandSender.sendMessage(translationProvider.getMessage(commandSender, "messages.commands.world.info.usage")
37+
commandSender.sendMessage(translationProvider.getMessage(commandSender, "commands.world.info.usage")
3638
.replaceAll("%prefix%", super.getConfiguration().getPrefix()));
3739
return;
3840
}
@@ -41,40 +43,69 @@ public void execute(@NotNull final CommandSender commandSender, @NotNull final S
4143
arguments[1] = arguments[1].replaceAll("%creator_name%", commandSender.getName());
4244
}
4345

44-
if (MultiWorldPlugin.getInstance().getWorldProvider().getWorldHolder(arguments[1]).isEmpty()) {
46+
if (worldProvider.getWorldHolder(arguments[1]).isEmpty()) {
4547
commandSender.sendMessage(translationProvider.getMessage(commandSender, "messages.general.world-not-exists")
4648
.replaceAll("%prefix%", super.getConfiguration().getPrefix())
4749
.replaceAll("%world_name%", arguments[1]));
4850
return;
4951
}
50-
final BukkitWorldHolder worldHolder = MultiWorldPlugin.getInstance().getWorldProvider().getWorldHolder(arguments[1]).get();
51-
final MultiWorldConfiguration configuration = MultiWorldPlugin.getInstance().getConfiguration();
52+
final BukkitWorldHolder worldHolder = worldProvider.getWorldHolder(arguments[1])
53+
.get();
5254

5355
translationProvider.getMessageList(commandSender, "commands.world.info.message").forEach(message -> {
54-
commandSender.sendMessage(message
55-
.replaceAll("%world_name%", worldHolder.getName())
56-
.replaceAll("%world_creator_name%", worldHolder.getCreatorName())
57-
.replaceAll("%creation_timestamp%", configuration.getTimeFormat().format(new Date(worldHolder.getCreationTimeStamp())))
58-
.replaceAll("%load_auto%", String.valueOf(worldHolder.isAutoLoadEnabled()))
59-
.replaceAll("%loaded%", (worldHolder.isLoaded() ? "true" : "false"))
60-
.replaceAll("%world_type%", worldHolder.getType().toString())
61-
.replaceAll("%environment%", WorldEnvironment.fromType(worldHolder.getType()).name())
62-
.replaceAll("%difficulty%", worldHolder.getDifficulty().toString())
63-
.replaceAll("%gamemode%", worldHolder.getGameMode().toString())
64-
.replaceAll("%pvp_enabled%", (worldHolder.isPvpEnabled() ? "true" : "false"))
65-
.replaceAll("%spawn_animals%", (worldHolder.isSpawnAnimals() ? "true" : "false"))
66-
.replaceAll("%spawn_monsters%", (worldHolder.isSpawnMonsters() ? "true" : "false"))
67-
.replaceAll("%spawn_entities%", (worldHolder.isSpawnEntities() ? "true" : "false"))
68-
.replaceAll("%end-portal-accessible%", (worldHolder.isEndPortalAccessible() ? "true" : "false"))
69-
.replaceAll("%nether-portal-accessible%", (worldHolder.isNetherPortalAccessible() ? "true" : "false"))
70-
.replaceAll("%whitelist_enabled%", (worldHolder.isWhitelistEnabled() ? "true" : "false"))
71-
.replaceAll("%normal_world%", worldHolder.getNormalWorldName() == null ? "" : worldHolder.getNormalWorldName())
72-
.replaceAll("%nether_world%", worldHolder.getNetherWorldName() == null ? "" : worldHolder.getNetherWorldName())
73-
.replaceAll("%end_world%", worldHolder.getEndWorldName() == null ? "" : worldHolder.getEndWorldName())
74-
.replaceAll("%receive_achievements%", (worldHolder.isReceiveAchievements() ? "true" : "false")));
56+
commandSender.sendMessage(this.getReplacedInfoMessage(worldHolder, message));
7557
});
7658
}
7759

60+
public String getReplacedInfoMessage(@NotNull final BukkitWorldHolder worldHolder, @NotNull final String message) {
61+
final Map<String, String> replacements = new HashMap<>();
62+
63+
// Populate the replacements map with keys as placeholders and values from worldHolder
64+
replacements.put("%world_name%", worldHolder.getName());
65+
replacements.put("%world_creator_name%", worldHolder.getCreatorName());
66+
replacements.put("%creation_timestamp%",
67+
MultiWorldPlugin.getInstance().getConfiguration().getTimeFormat().format(new Date(worldHolder.getCreationTimeStamp())));
68+
replacements.put("%auto_load_enabled%", Colored.getColoredBoolean(worldHolder.isAutoLoadEnabled()));
69+
replacements.put("%auto_unload_enabled%", Colored.getColoredBoolean(worldHolder.isAutoUnloadEnabled()));
70+
replacements.put("%difficulty%", Colored.getColoredDifficulty(worldHolder.getDifficulty()));
71+
replacements.put("%end-portal-accessible%", Colored.getColoredBoolean(worldHolder.isEndPortalAccessible()));
72+
replacements.put("%end_world%", worldHolder.getEndWorldName());
73+
replacements.put("%gamemode%", Colored.getColoredGameMode(worldHolder.getGameMode()));
74+
replacements.put("%hunger_enabled%", Colored.getColoredBoolean(worldHolder.isHungerEnabled()));
75+
replacements.put("%keep_spawn_in_memory%", Colored.getColoredBoolean(worldHolder.isKeepSpawnInMemory()));
76+
replacements.put("%nether-portal-accessible%", Colored.getColoredBoolean(worldHolder.isNetherPortalAccessible()));
77+
replacements.put("%nether_world%", worldHolder.getNetherWorldName());
78+
replacements.put("%normal_world%", worldHolder.getNormalWorldName());
79+
replacements.put("%pvp_enabled%", Colored.getColoredBoolean(worldHolder.isPvpEnabled()));
80+
replacements.put("%receive_achievements%", Colored.getColoredBoolean(worldHolder.isReceiveAchievements()));
81+
replacements.put("%redstone_enabled%", Colored.getColoredBoolean(worldHolder.isRedstoneEnabled()));
82+
replacements.put("%spawn_animals%", Colored.getColoredBoolean(worldHolder.isSpawnAnimals()));
83+
replacements.put("%spawn_entities%", Colored.getColoredBoolean(worldHolder.isSpawnEntities()));
84+
replacements.put("%spawn_monsters%", Colored.getColoredBoolean(worldHolder.isSpawnMonsters()));
85+
replacements.put("%weather_enabled%", Colored.getColoredBoolean(worldHolder.isWeatherEnabled()));
86+
replacements.put("%whitelist_enabled%", Colored.getColoredBoolean(worldHolder.isWhitelistEnabled()));
87+
replacements.put("%environment%", worldHolder.getEnvironment().name());
88+
replacements.put("%generator_name%", worldHolder.getGenerator());
89+
replacements.put("%world_type%", worldHolder.getType().toString());
90+
91+
92+
// Use StringBuilder for efficient string manipulation
93+
final StringBuilder replacedMessage = new StringBuilder(message);
94+
95+
// Replace each placeholder with its corresponding value
96+
replacements.forEach((key, value) -> {
97+
int startIndex = 0;
98+
// Continue replacing until no more instances are found
99+
while ((startIndex = replacedMessage.indexOf(key, startIndex)) != -1) {
100+
replacedMessage.replace(startIndex, startIndex + key.length(), value);
101+
startIndex += value.length(); // Move past the last replacement
102+
}
103+
});
104+
105+
// Return the final message with all replacements made
106+
return replacedMessage.toString();
107+
}
108+
78109
@Override
79110
public List<String> onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
80111
return new ArrayList<>(MultiWorldPlugin.getInstance().getWorldProvider().getWorldHolders().keySet());

0 commit comments

Comments
 (0)