99import com .dev7ex .multiworld .api .bukkit .world .BukkitWorldHolder ;
1010import com .dev7ex .multiworld .api .world .WorldEnvironment ;
1111import com .dev7ex .multiworld .translation .DefaultTranslationProvider ;
12+ import com .dev7ex .multiworld .util .Colored ;
13+ import com .dev7ex .multiworld .world .DefaultWorldProvider ;
14+ import org .bukkit .ChatColor ;
1215import org .bukkit .command .CommandSender ;
1316import 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