From 39b226685ef90246f94caf6545512240d98e6e73 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Tue, 3 Nov 2020 19:31:27 -0500 Subject: [PATCH] Improve Commands --- mods/src/server/server.cpp | 58 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/mods/src/server/server.cpp b/mods/src/server/server.cpp index 9a706ba..4449db1 100644 --- a/mods/src/server/server.cpp +++ b/mods/src/server/server.cpp @@ -57,29 +57,6 @@ static ServerProperties &get_server_properties() { #define DEFAULT_WORLD_NAME "world" #define DEFAULT_MAX_PLAYERS "4" -typedef const char *(*Minecraft_getProgressMessage_t)(unsigned char *minecraft); -static Minecraft_getProgressMessage_t Minecraft_getProgressMessage = (Minecraft_getProgressMessage_t) 0x16e58; - -typedef int32_t (*Minecraft_isLevelGenerated_t)(unsigned char *minecraft); -static Minecraft_isLevelGenerated_t Minecraft_isLevelGenerated = (Minecraft_isLevelGenerated_t) 0x16e6c; - -#define SIGNIFICANT_PROGRESS 5 - -// Check If Two Percentages Are Different Enough To Be Logged -static bool is_progress_difference_significant(int32_t new_val, int32_t old_val) { - if (new_val != old_val) { - if (new_val == -1 || old_val == -1) { - return true; - } else if (new_val == 0 || new_val == 100) { - return true; - } else { - return new_val - old_val >= SIGNIFICANT_PROGRESS; - } - } else { - return false; - } -} - // Read STDIN Thread static volatile bool stdin_buffer_complete = false; static volatile char *stdin_buffer = NULL; @@ -129,6 +106,29 @@ static void start_world(unsigned char *minecraft) { stored_minecraft = minecraft; } +typedef const char *(*Minecraft_getProgressMessage_t)(unsigned char *minecraft); +static Minecraft_getProgressMessage_t Minecraft_getProgressMessage = (Minecraft_getProgressMessage_t) 0x16e58; + +typedef int32_t (*Minecraft_isLevelGenerated_t)(unsigned char *minecraft); +static Minecraft_isLevelGenerated_t Minecraft_isLevelGenerated = (Minecraft_isLevelGenerated_t) 0x16e6c; + +#define SIGNIFICANT_PROGRESS 5 + +// Check If Two Percentages Are Different Enough To Be Logged +static bool is_progress_difference_significant(int32_t new_val, int32_t old_val) { + if (new_val != old_val) { + if (new_val == -1 || old_val == -1) { + return true; + } else if (new_val == 0 || new_val == 100) { + return true; + } else { + return new_val - old_val >= SIGNIFICANT_PROGRESS; + } + } else { + return false; + } +} + // Print Progress Reports static int last_progress = -1; static const char *last_message = NULL; @@ -187,7 +187,7 @@ static std::string get_banned_ips_file() { typedef void (*player_callback_t)(unsigned char *minecraft, std::string username, unsigned char *player); // Find Players With Username And Run Callback -static void find_players(unsigned char *minecraft, std::string target_username, player_callback_t callback) { +static void find_players(unsigned char *minecraft, std::string target_username, player_callback_t callback, bool all_players) { unsigned char *level = *(unsigned char **) (minecraft + 0x188); std::vector players = *(std::vector *) (level + 0x60); bool found_player = false; @@ -195,13 +195,13 @@ static void find_players(unsigned char *minecraft, std::string target_username, // Iterate Players unsigned char *player = players[i]; std::string username = *(std::string *) (player + 0xbf4); - if (target_username == "" || username == target_username) { + if (all_players || username == target_username) { // Run Callback (*callback)(minecraft, username, player); found_player = true; } } - if (!found_player && target_username != "") { + if (!all_players && !found_player) { INFO("Invalid Player: %s", target_username.c_str()); } } @@ -299,11 +299,11 @@ static void handle_commands(unsigned char *minecraft) { if (data.rfind(ban_command, 0) == 0) { // IP-Ban Target Username std::string ban_username = data.substr(ban_command.length()); - find_players(minecraft, ban_username, ban_callback); + find_players(minecraft, ban_username, ban_callback, false); } else if (data.rfind(kill_command, 0) == 0) { // Kill Target Username std::string kill_username = data.substr(kill_command.length()); - find_players(minecraft, kill_username, kill_callback); + find_players(minecraft, kill_username, kill_callback, false); } else if (data.rfind(say_command, 0) == 0) { // Format Message std::string message = "[Server] " + data.substr(say_command.length()); @@ -312,7 +312,7 @@ static void handle_commands(unsigned char *minecraft) { } else if (data == list_command) { // List Players INFO("%s", "All Players:"); - find_players(minecraft, "", list_callback); + find_players(minecraft, "", list_callback, true); } else if (data == stop_command) { // Stop Server exit_handler(-1);