From 2a01a429efb1cd0a93bc6612f14c50507314daba Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sun, 22 Nov 2020 14:14:47 -0500 Subject: [PATCH] Update --- mods/src/minecraft.h | 2 ++ mods/src/server/playerdata.cpp | 8 ++++---- mods/src/server/server.cpp | 9 ++++++--- mods/src/server/server_internal.h | 3 ++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/mods/src/minecraft.h b/mods/src/minecraft.h index ac0112e..67029ba 100644 --- a/mods/src/minecraft.h +++ b/mods/src/minecraft.h @@ -218,6 +218,8 @@ typedef void (*Entity_load_t)(unsigned char *entity, unsigned char *tag); typedef void (*Entity_moveTo_t)(unsigned char *entity, float param_1, float param_2, float param_3, float param_4, float param_5); static Entity_moveTo_t Entity_moveTo = (Entity_moveTo_t) 0x7a834; +typedef void (*Entity_die_t)(unsigned char *entity, unsigned char *cause); + // ServerPlayer static void *ServerPlayer_moveTo_vtable_addr = (void *) 0x109e54; diff --git a/mods/src/server/playerdata.cpp b/mods/src/server/playerdata.cpp index 0dedd01..b4150d5 100644 --- a/mods/src/server/playerdata.cpp +++ b/mods/src/server/playerdata.cpp @@ -168,7 +168,7 @@ static void ServerPlayer_moveTo_injection(unsigned char *player, float param_1, (*Entity_moveTo)(player, param_1, param_2, param_3, param_4, param_5); // Check If Player Is Spawned - unsigned char *minecraft = *(unsigned char **) (player + 0xc8c); + unsigned char *minecraft = server_internal_get_minecraft(player); unsigned char *level = server_internal_get_level(minecraft); std::vector players = server_internal_get_players(level); bool spawned = false; @@ -182,7 +182,7 @@ static void ServerPlayer_moveTo_injection(unsigned char *player, float param_1, // Load Data if (!spawned) { - load_player_callback(server_internal_get_player_username(player), player); + load_player_callback(server_internal_get_server_player_username(player), player); } } @@ -192,7 +192,7 @@ void playerdata_save(unsigned char *level) { for (std::size_t i = 0; i < players.size(); i++) { // Iterate Players unsigned char *player = players[i]; - std::string username = server_internal_get_player_username(player); + std::string username = server_internal_get_server_player_username(player); save_player_callback(username, player); } } @@ -201,7 +201,7 @@ static void ServerSideNetworkHandler_onDisconnect_injection(unsigned char *serve // Save Player Data unsigned char *player = (*ServerSideNetworkHandler_getPlayer)(server_side_network_handler, guid); if (player != NULL) { - std::string username = server_internal_get_player_username(player); + std::string username = server_internal_get_server_player_username(player); save_player_callback(username, player); } diff --git a/mods/src/server/server.cpp b/mods/src/server/server.cpp index df0b352..ada8593 100644 --- a/mods/src/server/server.cpp +++ b/mods/src/server/server.cpp @@ -147,13 +147,17 @@ std::vector server_internal_get_players(unsigned char *level) { return *(std::vector *) (level + 0x60); } // Get Player's Username -std::string server_internal_get_player_username(unsigned char *player) { +std::string server_internal_get_server_player_username(unsigned char *player) { return *(char **) (player + 0xbf4); } // Get Level From Minecraft unsigned char *server_internal_get_level(unsigned char *minecraft) { return *(unsigned char **) (minecraft + 0x188); } +// Get minecraft from ServerPlayer +unsigned char *server_internal_get_minecraft(unsigned char *player) { + return *(unsigned char **) (player + 0xc8c); +} // Find Players With Username And Run Callback static void find_players(unsigned char *minecraft, std::string target_username, player_callback_t callback, bool all_players) { @@ -163,7 +167,7 @@ static void find_players(unsigned char *minecraft, std::string target_username, for (std::size_t i = 0; i < players.size(); i++) { // Iterate Players unsigned char *player = players[i]; - std::string username = server_internal_get_player_username(player); + std::string username = server_internal_get_server_player_username(player); if (all_players || username == target_username) { // Run Callback (*callback)(minecraft, username, player); @@ -218,7 +222,6 @@ static void ban_callback(unsigned char *minecraft, std::string username, unsigne } // Kill Player -typedef void (*Entity_die_t)(unsigned char *entity, unsigned char *cause); static void kill_callback(__attribute__((unused)) unsigned char *minecraft, __attribute__((unused)) std::string username, unsigned char *player) { unsigned char *player_vtable = *(unsigned char **) player; Entity_die_t Entity_die = *(Entity_die_t *) (player_vtable + 0x130); diff --git a/mods/src/server/server_internal.h b/mods/src/server/server_internal.h index 1210502..92d555a 100644 --- a/mods/src/server/server_internal.h +++ b/mods/src/server/server_internal.h @@ -8,6 +8,7 @@ std::string server_internal_get_world_name(); unsigned char *server_internal_get_level(unsigned char *minecraft); std::vector server_internal_get_players(unsigned char *level); -std::string server_internal_get_player_username(unsigned char *player); +std::string server_internal_get_server_player_username(unsigned char *player); +unsigned char *server_internal_get_minecraft(unsigned char *player); #endif \ No newline at end of file