Port To v0.1.0
This commit is contained in:
parent
89c29f14b1
commit
176b04bf8c
2
dependencies/minecraft-pi/CMakeLists.txt
vendored
2
dependencies/minecraft-pi/CMakeLists.txt
vendored
@ -7,7 +7,7 @@ include(FetchContent)
|
||||
# Download
|
||||
FetchContent_Declare(
|
||||
minecraft-pi
|
||||
URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.1.tar.gz"
|
||||
URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.0.tar.gz"
|
||||
)
|
||||
FetchContent_Populate(minecraft-pi)
|
||||
|
||||
|
BIN
dependencies/minecraft-pi/minecraft-pi-0.1.0.tar.gz
vendored
Normal file
BIN
dependencies/minecraft-pi/minecraft-pi-0.1.0.tar.gz
vendored
Normal file
Binary file not shown.
BIN
dependencies/minecraft-pi/minecraft-pi-0.1.1.tar.gz
vendored
BIN
dependencies/minecraft-pi/minecraft-pi-0.1.1.tar.gz
vendored
Binary file not shown.
BIN
images/start.png
BIN
images/start.png
Binary file not shown.
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@ -1,16 +1,17 @@
|
||||
TRUE Touch GUI
|
||||
TRUE Fix Bow & Arrow
|
||||
TRUE Fix Attacking
|
||||
FALSE Force Mob Spawning
|
||||
TRUE Fancy Graphics
|
||||
TRUE Disable Autojump By Default
|
||||
TRUE Display Nametags By Default
|
||||
TRUE Fix Sign Placement
|
||||
TRUE Show Block Outlines
|
||||
FALSE Expand Creative Inventory
|
||||
FALSE Remove Creative Mode Restrictions
|
||||
FALSE Peaceful Mode
|
||||
TRUE Animated Water
|
||||
TRUE Remove Invalid Item Background
|
||||
TRUE Disable "gui_blocks" Atlas
|
||||
TRUE Smooth Lighting
|
||||
FALSE 3D Anaglyph
|
||||
TRUE Fix Camera Rendering
|
||||
TRUE Implement Chat
|
||||
@ -28,8 +29,8 @@ TRUE Implement Sound Engine
|
||||
TRUE Close Current Screen On Death
|
||||
FALSE Disable Raw Mouse Motion (Not Recommended)
|
||||
TRUE Fix Furnace Not Checking Item Auxiliary
|
||||
FALSE Disable Hosting LAN Worlds
|
||||
TRUE Improved Cursor Rendering
|
||||
FALSE Disable V-Sync
|
||||
TRUE Fix Options Screen
|
||||
FALSE Force Touch Inventory
|
||||
TRUE Fix Pause Menu
|
||||
|
@ -28,7 +28,7 @@ if(MCPI_SERVER_MODE)
|
||||
add_library(server SHARED src/server/server.cpp src/server/server_properties.cpp)
|
||||
target_link_libraries(server reborn-patch symbols feature home misc compat dl media-layer-core pthread)
|
||||
else()
|
||||
target_link_libraries(compat input sign chat home dl)
|
||||
target_link_libraries(compat input chat home dl)
|
||||
|
||||
target_link_libraries(chat input)
|
||||
|
||||
@ -41,12 +41,9 @@ else()
|
||||
add_library(camera SHARED src/camera/camera.cpp)
|
||||
target_link_libraries(camera reborn-patch symbols media-layer-core feature home)
|
||||
|
||||
add_library(input SHARED src/input/input.cpp src/input/bow.c src/input/attack.c src/input/toggle.c src/input/misc.c src/input/drop.cpp)
|
||||
add_library(input SHARED src/input/input.cpp src/input/attack.c src/input/toggle.c src/input/misc.c src/input/drop.cpp)
|
||||
target_link_libraries(input reborn-patch symbols creative feature media-layer-core)
|
||||
|
||||
add_library(sign SHARED src/sign/sign.cpp)
|
||||
target_link_libraries(sign reborn-patch symbols feature input)
|
||||
|
||||
add_library(touch SHARED src/touch/touch.cpp)
|
||||
target_link_libraries(touch reborn-patch symbols feature)
|
||||
|
||||
@ -74,8 +71,8 @@ target_link_libraries(death reborn-patch symbols feature)
|
||||
add_library(misc SHARED src/misc/misc.c src/misc/misc.cpp src/misc/logging.cpp)
|
||||
target_link_libraries(misc reborn-patch symbols media-layer-core feature GLESv1_CM)
|
||||
|
||||
add_library(options SHARED src/options/options.c src/options/options.cpp)
|
||||
target_link_libraries(options reborn-patch symbols feature home)
|
||||
add_library(options SHARED src/options/options.c)
|
||||
target_link_libraries(options reborn-patch symbols feature)
|
||||
|
||||
add_library(home SHARED src/home/home.c)
|
||||
target_link_libraries(home reborn-patch symbols)
|
||||
@ -88,7 +85,7 @@ target_link_libraries(init compat game-mode misc death options chat creative hom
|
||||
if(MCPI_SERVER_MODE)
|
||||
target_link_libraries(init server)
|
||||
else()
|
||||
target_link_libraries(init multiplayer sound camera input sign touch textures atlas)
|
||||
target_link_libraries(init multiplayer sound camera input touch textures atlas)
|
||||
if(NOT MCPI_HEADLESS_MODE)
|
||||
target_link_libraries(init benchmark)
|
||||
endif()
|
||||
@ -99,7 +96,7 @@ install(TARGETS init compat readdir feature game-mode misc death options chat cr
|
||||
if(MCPI_SERVER_MODE)
|
||||
install(TARGETS server DESTINATION "${MCPI_INSTALL_DIR}/mods")
|
||||
else()
|
||||
install(TARGETS multiplayer sound override camera input sign touch textures atlas DESTINATION "${MCPI_INSTALL_DIR}/mods")
|
||||
install(TARGETS multiplayer sound override camera input touch textures atlas DESTINATION "${MCPI_INSTALL_DIR}/mods")
|
||||
if(NOT MCPI_HEADLESS_MODE)
|
||||
install(TARGETS benchmark DESTINATION "${MCPI_INSTALL_DIR}/mods")
|
||||
endif()
|
||||
|
@ -68,9 +68,9 @@ static void Tesselator_colorABGR_injection(unsigned char *tesselator, int32_t co
|
||||
// Call Original Method
|
||||
(*Tesselator_colorABGR)(tesselator, color);
|
||||
}
|
||||
static void Tesselator_begin_injection(unsigned char *tesselator, int32_t mode) {
|
||||
static void Tesselator_begin_injection(unsigned char *tesselator) {
|
||||
// Call Original Method
|
||||
(*Tesselator_begin)(tesselator, mode);
|
||||
(*Tesselator_begin)(tesselator);
|
||||
|
||||
// Fix Furnace UI
|
||||
if (item_color_fix_mode != 0) {
|
||||
@ -124,15 +124,15 @@ void init_atlas() {
|
||||
|
||||
// Disable The gui_blocks Atlas Which Contains Pre-Rendered Textures For Blocks In The Inventory
|
||||
if (feature_has("Disable \"gui_blocks\" Atlas", server_disabled)) {
|
||||
unsigned char disable_gui_blocks_atlas_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x63c2c, disable_gui_blocks_atlas_patch);
|
||||
unsigned char disable_gui_blocks_atlas_patch[4] = {0x45, 0x00, 0x00, 0xea}; // "b 0x7f740"
|
||||
patch((void *) 0x7f624, disable_gui_blocks_atlas_patch);
|
||||
// Fix Grass And Leaves Inventory Rendering When The gui_blocks Atlas Is Disabled
|
||||
overwrite_calls((void *) ItemRenderer_renderGuiItemCorrect, (void *) ItemRenderer_renderGuiItemCorrect_injection);
|
||||
// Fix Furnace UI
|
||||
overwrite_calls((void *) Tesselator_colorABGR, (void *) Tesselator_colorABGR_injection);
|
||||
overwrite_calls((void *) Tesselator_begin, (void *) Tesselator_begin_injection);
|
||||
overwrite_calls((void *) Tesselator_color, (void *) Tesselator_color_injection);
|
||||
overwrite_call((void *) 0x32324, (void *) FurnaceScreen_render_ItemRenderer_renderGuiItem_one_injection);
|
||||
overwrite_call((void *) 0x1e21c, (void *) InventoryPane_renderBatch_Tesselator_color_injection);
|
||||
overwrite_call((void *) 0x3bff4, (void *) FurnaceScreen_render_ItemRenderer_renderGuiItem_one_injection);
|
||||
overwrite_call((void *) 0x23c0c, (void *) InventoryPane_renderBatch_Tesselator_color_injection);
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,6 @@ void init_camera() {
|
||||
// Enable TripodCameraRenderer
|
||||
overwrite_calls((void *) EntityRenderDispatcher, (void *) EntityRenderDispatcher_injection);
|
||||
// Display Smoke From TripodCamera Higher
|
||||
overwrite_call((void *) 0x87dc4, (void *) TripodCamera_tick_Level_addParticle_call_injection);
|
||||
overwrite_call((void *) 0xbcf18, (void *) TripodCamera_tick_Level_addParticle_call_injection);
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,8 @@ static void CommandServer_parse_CommandServer_dispatchPacket_injection(unsigned
|
||||
|
||||
// Handle ChatPacket Server-Side
|
||||
static void ServerSideNetworkHandler_handle_ChatPacket_injection(unsigned char *server_side_network_handler, RakNet_RakNetGUID *rak_net_guid, unsigned char *chat_packet) {
|
||||
unsigned char *player = (*ServerSideNetworkHandler_getPlayer)(server_side_network_handler, rak_net_guid);
|
||||
unsigned char *level = *(unsigned char **) (server_side_network_handler + ServerSideNetworkHandler_level_property_offset);
|
||||
unsigned char *player = (*NetEventCallback_findPlayer)(server_side_network_handler, level, rak_net_guid);
|
||||
if (player != NULL) {
|
||||
char *username = *(char **) (player + Player_username_property_offset);
|
||||
char *message = *(char **) (chat_packet + ChatPacket_message_property_offset);
|
||||
@ -123,9 +124,9 @@ void init_chat() {
|
||||
if (_chat_enabled) {
|
||||
// Disable Original ChatPacket Loopback
|
||||
unsigned char disable_chat_packet_loopback_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x6b490, disable_chat_packet_loopback_patch);
|
||||
patch((void *) 0x8c118, disable_chat_packet_loopback_patch);
|
||||
// Manually Send (And Loopback) ChatPacket
|
||||
overwrite_call((void *) 0x6b518, (void *) CommandServer_parse_CommandServer_dispatchPacket_injection);
|
||||
overwrite_call((void *) 0x8c1a4, (void *) CommandServer_parse_CommandServer_dispatchPacket_injection);
|
||||
// Re-Broadcast ChatPacket
|
||||
patch_address(ServerSideNetworkHandler_handle_ChatPacket_vtable_addr, (void *) ServerSideNetworkHandler_handle_ChatPacket_injection);
|
||||
// Send Messages On Input Tick
|
||||
|
@ -8,11 +8,11 @@ static void do_nothing() {
|
||||
// Patch bcm_host Calls
|
||||
__attribute__((constructor)) static void patch_bcm_host_calls() {
|
||||
// Disable bcm_host Calls
|
||||
overwrite_call((void *) 0xdfec, (void *) do_nothing); // bcm_host_init
|
||||
overwrite_call((void *) 0x12418, (void *) do_nothing); // bcm_host_deinit
|
||||
overwrite_call((void *) 0x125a8, (void *) do_nothing); // graphics_get_display_size
|
||||
overwrite_call((void *) 0x125dc, (void *) do_nothing); // vc_dispmanx_display_open
|
||||
overwrite_call((void *) 0x125e8, (void *) do_nothing); // vc_dispmanx_update_start
|
||||
overwrite_call((void *) 0x12618, (void *) do_nothing); // vc_dispmanx_element_add
|
||||
overwrite_call((void *) 0x12624, (void *) do_nothing); // vc_dispmanx_update_submit_sync
|
||||
overwrite_call((void *) 0xdbe8, (void *) do_nothing); // bcm_host_init
|
||||
overwrite_call((void *) 0x11c54, (void *) do_nothing); // bcm_host_deinit
|
||||
overwrite_call((void *) 0x11de4, (void *) do_nothing); // graphics_get_display_size
|
||||
overwrite_call((void *) 0x11e18, (void *) do_nothing); // vc_dispmanx_display_open
|
||||
overwrite_call((void *) 0x11e28, (void *) do_nothing); // vc_dispmanx_update_start
|
||||
overwrite_call((void *) 0x11e58, (void *) do_nothing); // vc_dispmanx_element_add
|
||||
overwrite_call((void *) 0x11e64, (void *) do_nothing); // vc_dispmanx_update_submit_sync
|
||||
}
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include <media-layer/core.h>
|
||||
|
||||
#include "../input/input.h"
|
||||
#include "../sign/sign.h"
|
||||
#include "../chat/chat.h"
|
||||
#include "../home/home.h"
|
||||
|
||||
@ -84,20 +83,12 @@ HOOK(SDL_PollEvent, int, (SDL_Event *event)) {
|
||||
}
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP: {
|
||||
// Track Right-Click State
|
||||
if (event->button.button == SDL_BUTTON_RIGHT) {
|
||||
input_set_is_right_click(event->button.state != SDL_RELEASED);
|
||||
} else if (event->button.button == SDL_BUTTON_LEFT) {
|
||||
// Track Left-Click State
|
||||
if (event->button.button == SDL_BUTTON_LEFT) {
|
||||
input_set_is_left_click(event->button.state != SDL_RELEASED);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_USEREVENT: {
|
||||
// SDL_UserEvent Is Never Used In MCPI, So It Is Repurposed For Character Events
|
||||
sign_key_press((char) event->user.code);
|
||||
handled = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
|
@ -23,17 +23,17 @@ static EGLBoolean eglSwapBuffers_injection(__attribute__((unused)) EGLDisplay di
|
||||
__attribute__((constructor)) static void patch_egl_calls() {
|
||||
// Disable EGL Calls
|
||||
unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x1250c, nop_patch); // eglTerminate
|
||||
patch((void *) 0x12580, nop_patch); // eglBindAPI
|
||||
overwrite_call((void *) 0x12638, (void *) eglCreateWindowSurface_injection); // eglCreateWindowSurface
|
||||
patch((void *) 0x12578, nop_patch); // eglChooseConfig
|
||||
patch((void *) 0x1255c, nop_patch); // eglInitialize
|
||||
patch((void *) 0x124f0, nop_patch); // eglMakeCurrent #1
|
||||
patch((void *) 0x12654, nop_patch); // eglMakeCurrent #2
|
||||
overwrite_call((void *) 0x124dc, (void *) eglSwapBuffers_injection); // eglSwapBuffers #1
|
||||
overwrite_call((void *) 0x14b6c, (void *) eglSwapBuffers_injection); // eglSwapBuffers #2
|
||||
overwrite_call((void *) 0x1254c, (void *) eglGetDisplay_injection); // eglGetDisplay
|
||||
patch((void *) 0x124fc, nop_patch); // eglDestroySurface #1
|
||||
patch((void *) 0x12504, nop_patch); // eglDestroySurface #2
|
||||
overwrite_call((void *) 0x12594, (void *) eglCreateContext_injection); // eglCreateContext
|
||||
patch((void *) 0x11d3c, nop_patch); // eglTerminate
|
||||
patch((void *) 0x11dbc, nop_patch); // eglBindAPI
|
||||
overwrite_call((void *) 0x11e78, (void *) eglCreateWindowSurface_injection); // eglCreateWindowSurface
|
||||
patch((void *) 0x11db4, nop_patch); // eglChooseConfig
|
||||
patch((void *) 0x11d98, nop_patch); // eglInitialize
|
||||
patch((void *) 0x11d20, nop_patch); // eglMakeCurrent #1
|
||||
patch((void *) 0x11e90, nop_patch); // eglMakeCurrent #2
|
||||
overwrite_call((void *) 0x11d0c, (void *) eglSwapBuffers_injection); // eglSwapBuffers #1
|
||||
overwrite_call((void *) 0x14ce4, (void *) eglSwapBuffers_injection); // eglSwapBuffers #2
|
||||
overwrite_call((void *) 0x11d7c, (void *) eglGetDisplay_injection); // eglGetDisplay
|
||||
patch((void *) 0x11d2c, nop_patch); // eglDestroySurface #1
|
||||
patch((void *) 0x11d34, nop_patch); // eglDestroySurface #2
|
||||
overwrite_call((void *) 0x11dd0, (void *) eglCreateContext_injection); // eglCreateContext
|
||||
}
|
||||
|
@ -23,6 +23,6 @@ static int XGetWindowAttributes_injection(__attribute__((unused)) void *display,
|
||||
// Patch X11 Calls
|
||||
__attribute__((constructor)) static void patch_x11_calls() {
|
||||
// Disable X11 Calls
|
||||
overwrite_call((void *) 0x132a4, (void *) XGetWindowAttributes_injection); // XGetWindowAttributes
|
||||
overwrite_call((void *) 0x132d4, (void *) XTranslateCoordinates_injection); // XTranslateCoordinates
|
||||
overwrite_call((void *) 0x12f2c, (void *) XGetWindowAttributes_injection); // XGetWindowAttributes
|
||||
overwrite_call((void *) 0x12f64, (void *) XTranslateCoordinates_injection); // XTranslateCoordinates
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include <vector>
|
||||
|
||||
#include <libreborn/libreborn.h>
|
||||
#include <symbols/minecraft.h>
|
||||
|
||||
@ -39,7 +41,6 @@ static int32_t Inventory_setupDefault_FillingContainer_addItem_call_injection(un
|
||||
// Add Tiles
|
||||
inventory_add_item(filling_container, *Tile_water, true);
|
||||
inventory_add_item(filling_container, *Tile_lava, true);
|
||||
inventory_add_item(filling_container, *Tile_calmWater, true);
|
||||
inventory_add_item(filling_container, *Tile_calmLava, true);
|
||||
inventory_add_item(filling_container, *Tile_glowingObsidian, true);
|
||||
inventory_add_item(filling_container, *Tile_web, true);
|
||||
@ -83,21 +84,40 @@ static int32_t Inventory_setupDefault_FillingContainer_addItem_call_injection(un
|
||||
}
|
||||
#endif
|
||||
|
||||
// Hook Specific TileItem Constructor
|
||||
static unsigned char *Tile_initTiles_TileItem_injection(unsigned char *tile_item, int32_t id) {
|
||||
// Store All Default TileItems
|
||||
static std::vector<unsigned char *> &get_default_tile_items() {
|
||||
static std::vector<unsigned char *> tile_items;
|
||||
return tile_items;
|
||||
}
|
||||
// Hook Specific TileItem :;operator new
|
||||
static unsigned char *Tile_initTiles_operator_new_injection(__attribute__((unused)) uint32_t size) {
|
||||
// Call Original Method
|
||||
unsigned char *ret = (*TileItem)(tile_item, id);
|
||||
unsigned char *ret = (unsigned char *) ::operator new(AUX_DATA_TILE_ITEM_SIZE);
|
||||
|
||||
// Switch VTable
|
||||
*(unsigned char **) tile_item = AuxDataTileItem_vtable;
|
||||
// Configure Item
|
||||
*(bool *) (tile_item + Item_is_stacked_by_data_property_offset) = true;
|
||||
*(int32_t *) (tile_item + Item_max_damage_property_offset) = 0;
|
||||
*(unsigned char **) (tile_item + AuxDataTileItem_icon_tile_property_offset) = Tile_tiles[id + 0x100];
|
||||
// Store
|
||||
get_default_tile_items().push_back(ret);
|
||||
|
||||
// Return
|
||||
return ret;
|
||||
}
|
||||
// Modify All Default TileItems
|
||||
static void Tile_initTiles_injection() {
|
||||
// Call Original Method
|
||||
(*Tile_initTiles)();
|
||||
|
||||
// Loop
|
||||
for (unsigned char *tile_item : get_default_tile_items()) {
|
||||
// Get ID
|
||||
int32_t id = *(int32_t *) (tile_item + Item_id_property_offset);
|
||||
// Switch VTable
|
||||
*(unsigned char **) tile_item = AuxDataTileItem_vtable;
|
||||
// Configure Item
|
||||
*(bool *) (tile_item + Item_is_stacked_by_data_property_offset) = true;
|
||||
*(int32_t *) (tile_item + Item_max_damage_property_offset) = 0;
|
||||
*(unsigned char **) (tile_item + AuxDataTileItem_icon_tile_property_offset) = Tile_tiles[id];
|
||||
}
|
||||
get_default_tile_items().clear();
|
||||
}
|
||||
|
||||
// Check Restriction Status
|
||||
static int is_restricted = 1;
|
||||
@ -110,17 +130,16 @@ void init_creative() {
|
||||
// Add Extra Items To Creative Inventory (Only Replace Specific Function Call)
|
||||
if (feature_has("Expand Creative Inventory", server_enabled)) {
|
||||
#ifndef MCPI_SERVER_MODE
|
||||
overwrite_call((void *) 0x8e0fc, (void *) Inventory_setupDefault_FillingContainer_addItem_call_injection);
|
||||
overwrite_call((void *) 0xcdcf4, (void *) Inventory_setupDefault_FillingContainer_addItem_call_injection);
|
||||
#endif
|
||||
|
||||
// Use AuxDataTileItem by default instead of TileItem, so tiles in the Creative
|
||||
// Inventory can have arbitrary auxiliary values.
|
||||
{
|
||||
// Fix Size
|
||||
unsigned char size_patch[4] = {AUX_DATA_TILE_ITEM_SIZE, 0x00, 0xa0, 0xe3}; // "mov r0, #AUX_DATA_TILE_ITEM_SIZE"
|
||||
patch((void *) 0xc6f64, size_patch);
|
||||
// Hook Constructor
|
||||
overwrite_call((void *) 0xc6f74, (void *) Tile_initTiles_TileItem_injection);
|
||||
// Hook TileItem ::operator new To Store TileItems
|
||||
overwrite_call((void *) 0x1295a4, (void *) Tile_initTiles_operator_new_injection);
|
||||
// Modify Stored TileItems
|
||||
overwrite_calls((void *) Tile_initTiles, (void *) Tile_initTiles_injection);
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,34 +147,35 @@ void init_creative() {
|
||||
if (feature_has("Remove Creative Mode Restrictions", server_disabled)) {
|
||||
unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
// Remove Restrictions
|
||||
patch((void *) 0x43ee8, nop_patch);
|
||||
patch((void *) 0x43f3c, nop_patch);
|
||||
patch((void *) 0x43f8c, nop_patch);
|
||||
patch((void *) 0x43fd8, nop_patch);
|
||||
patch((void *) 0x99010, nop_patch);
|
||||
patch((void *) 0x59e68, nop_patch);
|
||||
patch((void *) 0x59ebc, nop_patch);
|
||||
patch((void *) 0x59f10, nop_patch);
|
||||
unsigned char allow_eating_patch[4] = {0x02, 0x00, 0x00, 0xea}; // "b 0xddcbc"
|
||||
patch((void *) 0xddcac, allow_eating_patch);
|
||||
// Fix UI
|
||||
patch((void *) 0x341c0, nop_patch);
|
||||
patch((void *) 0x3adb4, nop_patch);
|
||||
patch((void *) 0x3b374, nop_patch);
|
||||
patch((void *) 0x4cb88, nop_patch);
|
||||
unsigned char fix_ui_patch[4] = {0x05, 0x00, 0x55, 0xe1}; // "cmp r5, r5"
|
||||
patch((void *) 0x4bf20, fix_ui_patch);
|
||||
// Fix Inventory
|
||||
patch((void *) 0xcce90, nop_patch);
|
||||
patch((void *) 0xd5548, nop_patch);
|
||||
unsigned char inv_creative_check_r3_patch[4] = {0x03, 0x00, 0x53, 0xe1}; // "cmp r3, r3"
|
||||
patch((void *) 0xd497c, inv_creative_check_r3_patch);
|
||||
unsigned char inv_creative_check_r5_patch[4] = {0x05, 0x00, 0x55, 0xe1}; // "cmp r5, r5"
|
||||
patch((void *) 0xd4d94, inv_creative_check_r5_patch);
|
||||
patch((void *) 0xd50ac, nop_patch);
|
||||
patch((void *) 0x8d080, nop_patch);
|
||||
patch((void *) 0x8d090, nop_patch);
|
||||
patch((void *) 0x91d48, nop_patch);
|
||||
patch((void *) 0x92098, nop_patch);
|
||||
unsigned char inv_creative_check_r3_patch[4] = {0x03, 0x00, 0x53, 0xe1}; // "cmp r3, r3"
|
||||
patch((void *) 0x923c0, inv_creative_check_r3_patch);
|
||||
patch((void *) 0x92828, nop_patch);
|
||||
patch((void *) 0x92830, nop_patch);
|
||||
// Display Slot Count
|
||||
patch((void *) 0x1e3f4, nop_patch);
|
||||
unsigned char slot_count_patch[4] = {0x18, 0x00, 0x00, 0xea}; // "b 0x27110"
|
||||
patch((void *) 0x270a8, slot_count_patch);
|
||||
patch((void *) 0x33954, nop_patch);
|
||||
patch((void *) 0x23d4c, nop_patch);
|
||||
patch((void *) 0x2c570, nop_patch);
|
||||
patch((void *) 0x3eec0, nop_patch);
|
||||
// Maximize Creative Inventory Stack Size
|
||||
unsigned char maximize_stack_patch[4] = {0xff, 0xc0, 0xa0, 0xe3}; // "mov r12, 0xff"
|
||||
patch((void *) 0x8e104, maximize_stack_patch);
|
||||
unsigned char maximize_stack_patch[4] = {0xff, 0x60, 0xa0, 0xe3}; // "mov r6, 0xff"
|
||||
patch((void *) 0xccf80, maximize_stack_patch);
|
||||
// Allow Nether Reactor
|
||||
patch((void *) 0xc0290, nop_patch);
|
||||
unsigned char nether_reactor_patch[4] = {0x00, 0x00, 0xa0, 0xe3}; // "mov r0, #0x0"
|
||||
patch((void *) 0x12283c, nether_reactor_patch);
|
||||
// Disable Other Restrictions
|
||||
is_restricted = 0;
|
||||
}
|
||||
|
@ -14,14 +14,14 @@ static void set_is_survival(int new_is_survival) {
|
||||
|
||||
// Correct Inventpry UI
|
||||
unsigned char inventory_patch[4] = {new_is_survival ? 0x00 : 0x01, 0x30, 0xa0, 0xe3}; // "mov r3, #0x0" or "mov r3, #0x1"
|
||||
patch((void *) 0x16efc, inventory_patch);
|
||||
patch((void *) 0x178c0, inventory_patch);
|
||||
|
||||
// Use Correct Size For GameMode Object
|
||||
unsigned char size_patch[4] = {new_is_survival ? SURVIVAL_MODE_SIZE : CREATOR_MODE_SIZE, 0x00, 0xa0, 0xe3}; // "mov r0, #SURVIVAL_MODE_SIZE" or "mov r0, #CREATOR_MODE_SIZE"
|
||||
patch((void *) 0x16ee4, size_patch);
|
||||
patch((void *) 0x178a8, size_patch);
|
||||
|
||||
// Replace Default CreatorMode Constructor With CreatorMode Or SurvivalMode Constructor
|
||||
overwrite_call((void *) 0x16ef4, new_is_survival ? SurvivalMode : CreatorMode);
|
||||
overwrite_call((void *) 0x178b8, new_is_survival ? SurvivalMode : CreatorMode);
|
||||
|
||||
is_survival = new_is_survival;
|
||||
}
|
||||
@ -54,11 +54,11 @@ void init_game_mode() {
|
||||
overwrite_calls((void *) Minecraft_setIsCreativeMode, (void *) Minecraft_setIsCreativeMode_injection);
|
||||
|
||||
// Replace CreatorLevel With ServerLevel (This Fixes Beds And Mob Spawning)
|
||||
overwrite_call((void *) 0x16f84, (void *) ServerLevel);
|
||||
overwrite_call((void *) 0x17950, (void *) ServerLevel);
|
||||
|
||||
// Allocate Correct Size For ServerLevel
|
||||
uint32_t level_size = SERVER_LEVEL_SIZE;
|
||||
patch_address((void *) 0x17004, (void *) level_size);
|
||||
patch_address((void *) 0x17a38, (void *) level_size);
|
||||
|
||||
// Disable CreatorMode-Specific API Features (Polling Block Hits) In SurvivalMode, This Is Preferable To Crashing
|
||||
overwrite_calls((void *) Minecraft_getCreator, (void *) Minecraft_getCreator_injection);
|
||||
@ -69,7 +69,7 @@ void init_game_mode() {
|
||||
|
||||
// Allow Joining Survival Servers
|
||||
if (feature_has("Allow Joining Survival Servers", server_enabled)) {
|
||||
unsigned char server_patch[4] = {0x0f, 0x00, 0x00, 0xea}; // "b 0x6dcb4"
|
||||
patch((void *) 0x6dc70, server_patch);
|
||||
unsigned char server_patch[4] = {0x16, 0x00, 0x00, 0xea}; // "b 0x8e998"
|
||||
patch((void *) 0x8e938, server_patch);
|
||||
}
|
||||
}
|
||||
|
@ -9,17 +9,19 @@ static unsigned char *get_minecraft_from_screen(unsigned char *screen) {
|
||||
return *(unsigned char **) (screen + Screen_minecraft_property_offset);
|
||||
}
|
||||
|
||||
// Redirect Create World Button To SimpleLevelChooseScreen
|
||||
// Redirect Create World Button To DemoLevelChooseScreen
|
||||
#define WORLD_NAME "world"
|
||||
static void SelectWorldScreen_tick_injection(unsigned char *screen) {
|
||||
bool create_world = *(bool *) (screen + SelectWorldScreen_should_create_world_property_offset);
|
||||
if (create_world) {
|
||||
// Get New World Name
|
||||
free(*demo_level_name);
|
||||
std::string new_name = (*SelectWorldScreen_getUniqueLevelName)(screen, WORLD_NAME);
|
||||
// Create SimpleLevelChooseScreen
|
||||
unsigned char *new_screen = (unsigned char *) ::operator new(SIMPLE_LEVEL_CHOOSE_SCREEN_SIZE);
|
||||
patch_address((void *) demo_level_name, (void *) strdup(new_name.c_str()));
|
||||
// Create DemoLevelChooseScreen
|
||||
unsigned char *new_screen = (unsigned char *) ::operator new(DEMO_LEVEL_CHOOSE_SCREEN_SIZE);
|
||||
ALLOC_CHECK(new_screen);
|
||||
(*SimpleChooseLevelScreen)(new_screen, new_name);
|
||||
(*DemoChooseLevelScreen)(new_screen);
|
||||
// Set Screen
|
||||
unsigned char *minecraft = get_minecraft_from_screen(screen);
|
||||
(*Minecraft_setScreen)(minecraft, new_screen);
|
||||
@ -33,11 +35,13 @@ static void Touch_SelectWorldScreen_tick_injection(unsigned char *screen) {
|
||||
bool create_world = *(bool *) (screen + Touch_SelectWorldScreen_should_create_world_property_offset);
|
||||
if (create_world) {
|
||||
// Get New World Name
|
||||
free(*demo_level_name);
|
||||
std::string new_name = (*Touch_SelectWorldScreen_getUniqueLevelName)(screen, WORLD_NAME);
|
||||
// Create SimpleLevelChooseScreen
|
||||
unsigned char *new_screen = (unsigned char *) ::operator new(SIMPLE_LEVEL_CHOOSE_SCREEN_SIZE);
|
||||
patch_address((void *) demo_level_name, (void *) strdup(new_name.c_str()));
|
||||
// Create DemoLevelChooseScreen
|
||||
unsigned char *new_screen = (unsigned char *) ::operator new(DEMO_LEVEL_CHOOSE_SCREEN_SIZE);
|
||||
ALLOC_CHECK(new_screen);
|
||||
(*SimpleChooseLevelScreen)(new_screen, new_name);
|
||||
(*DemoChooseLevelScreen)(new_screen);
|
||||
// Set Screen
|
||||
unsigned char *minecraft = get_minecraft_from_screen(screen);
|
||||
(*Minecraft_setScreen)(minecraft, new_screen);
|
||||
@ -52,8 +56,16 @@ void _init_game_mode_cpp() {
|
||||
// Hijack Create World Button
|
||||
patch_address(SelectWorldScreen_tick_vtable_addr, (void *) SelectWorldScreen_tick_injection);
|
||||
patch_address(Touch_SelectWorldScreen_tick_vtable_addr, (void *) Touch_SelectWorldScreen_tick_injection);
|
||||
// Make The SimpleChooseLevelScreen Back Button Go To SelectWorldScreen Instead Of StartMenuScreen
|
||||
unsigned char simple_choose_level_screen_back_button_patch[4] = {0x05, 0x10, 0xa0, 0xe3}; // "mov r1, #0x5"
|
||||
patch((void *) 0x31144, simple_choose_level_screen_back_button_patch);
|
||||
patch((void *) 0x3134c, simple_choose_level_screen_back_button_patch);
|
||||
// Make The DemoChooseLevelScreen Back Button Go To SelectWorldScreen Instead Of StartMenuScreen
|
||||
unsigned char demo_choose_level_screen_back_button_patch[4] = {0x05, 0x10, 0xa0, 0xe3}; // "mov r1, #0x5"
|
||||
patch((void *) 0x3a298, demo_choose_level_screen_back_button_patch);
|
||||
patch((void *) 0x39fa0, demo_choose_level_screen_back_button_patch);
|
||||
}
|
||||
// Reset Level Name
|
||||
__attribute__((constructor)) static void _reset_level_name() {
|
||||
patch_address((void *) demo_level_name, NULL);
|
||||
}
|
||||
// Free Level Name
|
||||
__attribute__((destructor)) static void _free_level_name() {
|
||||
free(*demo_level_name);
|
||||
}
|
||||
|
@ -24,11 +24,9 @@ __attribute__((destructor)) static void _free_home() {
|
||||
// Init
|
||||
void init_home() {
|
||||
// Store Data In ~/.minecraft-pi Instead Of ~/.minecraft
|
||||
patch_address((void *) default_path, (void *) HOME_SUBDIRECTORY_FOR_GAME_DATA);
|
||||
patch_address((void *) full_data_path, (void *) home_get());
|
||||
|
||||
// Change Directory To Binary Directory Manually
|
||||
unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0xe0ac, nop_patch);
|
||||
// Change Directory To Binary Directory
|
||||
char *binary_directory = get_mcpi_directory();
|
||||
if (chdir(binary_directory) != 0) {
|
||||
ERR("Unable To Change Directory: %s", strerror(errno));
|
||||
|
@ -13,7 +13,6 @@ __attribute__((constructor)) static void init() {
|
||||
init_multiplayer();
|
||||
init_sound();
|
||||
init_input();
|
||||
init_sign();
|
||||
init_creative();
|
||||
init_camera();
|
||||
init_touch();
|
||||
|
@ -13,7 +13,6 @@ void init_server();
|
||||
void init_multiplayer();
|
||||
void init_sound();
|
||||
void init_input();
|
||||
void init_sign();
|
||||
void init_creative();
|
||||
void init_camera();
|
||||
void init_touch();
|
||||
|
@ -1,36 +0,0 @@
|
||||
#include <libreborn/libreborn.h>
|
||||
#include <symbols/minecraft.h>
|
||||
|
||||
#include "../feature/feature.h"
|
||||
#include "input.h"
|
||||
|
||||
// Store Right-Click Status
|
||||
static int is_right_click = 0;
|
||||
void input_set_is_right_click(int val) {
|
||||
is_right_click = val;
|
||||
}
|
||||
|
||||
// Enable Bow & Arrow Fix
|
||||
static int fix_bow = 0;
|
||||
|
||||
// Handle Bow & Arrow
|
||||
static void _handle_bow(unsigned char *minecraft) {
|
||||
if (fix_bow && !is_right_click) {
|
||||
// GameMode Is Offset From minecraft By 0x160
|
||||
// Player Is Offset From minecraft By 0x18c
|
||||
unsigned char *game_mode = *(unsigned char **) (minecraft + Minecraft_game_mode_property_offset);
|
||||
unsigned char *player = *(unsigned char **) (minecraft + Minecraft_player_property_offset);
|
||||
if (player != NULL && game_mode != NULL && (*Player_isUsingItem)(player)) {
|
||||
unsigned char *game_mode_vtable = *(unsigned char **) game_mode;
|
||||
GameMode_releaseUsingItem_t GameMode_releaseUsingItem = *(GameMode_releaseUsingItem_t *) (game_mode_vtable + GameMode_releaseUsingItem_vtable_offset);
|
||||
(*GameMode_releaseUsingItem)(game_mode, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Init
|
||||
void _init_bow() {
|
||||
// Enable Bow & Arrow Fix
|
||||
fix_bow = feature_has("Fix Bow & Arrow", server_disabled);
|
||||
input_run_on_tick(_handle_bow);
|
||||
}
|
@ -39,9 +39,6 @@ void init_input() {
|
||||
// Item Dropping
|
||||
_init_drop();
|
||||
|
||||
// Enable Bow & Arrow Fix
|
||||
_init_bow();
|
||||
|
||||
// Loop
|
||||
overwrite_calls((void *) Minecraft_tickInput, (void *) Minecraft_tickInput_injection);
|
||||
|
||||
|
@ -7,7 +7,6 @@ extern "C" {
|
||||
typedef void (*input_tick_function_t)(unsigned char *minecraft);
|
||||
void input_run_on_tick(input_tick_function_t function);
|
||||
|
||||
void input_set_is_right_click(int val);
|
||||
void input_hide_gui();
|
||||
void input_third_person();
|
||||
int input_back();
|
||||
@ -18,7 +17,6 @@ void input_set_is_left_click(int val);
|
||||
void input_set_mouse_grab_state(int state);
|
||||
|
||||
__attribute__((visibility("internal"))) void _init_attack();
|
||||
__attribute__((visibility("internal"))) void _init_bow();
|
||||
__attribute__((visibility("internal"))) void _init_misc();
|
||||
__attribute__((visibility("internal"))) void _init_toggle();
|
||||
__attribute__((visibility("internal"))) void _init_drop();
|
||||
|
@ -87,7 +87,7 @@ void _init_misc() {
|
||||
overwrite_calls((void *) Gui_handleClick, (void *) Gui_handleClick_injection);
|
||||
}
|
||||
// Disable Item Dropping Using The Cursor When Cursor Is Hidden
|
||||
overwrite_call((void *) 0x27800, (void *) Gui_tickItemDrop_Minecraft_isCreativeMode_call_injection);
|
||||
overwrite_call((void *) 0x2b130, (void *) Gui_tickItemDrop_Minecraft_isCreativeMode_call_injection);
|
||||
|
||||
input_run_on_tick(_handle_back);
|
||||
input_run_on_tick(_handle_mouse_grab);
|
||||
|
@ -201,12 +201,17 @@ static void GameRenderer_render_injection(unsigned char *game_renderer, float pa
|
||||
}
|
||||
}
|
||||
|
||||
// Stop Checking GL Renderer
|
||||
static bool AppPlatform_isPowerVR_injection(__attribute__((unused)) unsigned char *app_platform) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Init
|
||||
void init_misc() {
|
||||
// Remove Invalid Item Background (A Red Background That Appears For Items That Are Not Included In The gui_blocks Atlas)
|
||||
if (feature_has("Remove Invalid Item Background", server_disabled)) {
|
||||
unsigned char invalid_item_background_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x63c98, invalid_item_background_patch);
|
||||
patch((void *) 0x7f7e8, invalid_item_background_patch);
|
||||
}
|
||||
|
||||
// Render Selected Item Text + Hide Chat Messages
|
||||
@ -223,7 +228,7 @@ void init_misc() {
|
||||
overwrite_calls((void *) RakNet_RakString, (void *) RakNet_RakString_injection);
|
||||
|
||||
// Print Error Message If RakNet Startup Fails
|
||||
overwrite_call((void *) 0x73778, (void *) RakNetInstance_host_RakNet_RakPeer_Startup_injection);
|
||||
overwrite_call((void *) 0x98014, (void *) RakNetInstance_host_RakNet_RakPeer_Startup_injection);
|
||||
|
||||
// Fix Bug Where RakNetInstance Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened
|
||||
overwrite_calls((void *) RakNetInstance, (void *) RakNetInstance_injection);
|
||||
@ -242,7 +247,7 @@ void init_misc() {
|
||||
if (feature_has("Improved Cursor Rendering", server_disabled)) {
|
||||
// Disable Normal Cursor Rendering
|
||||
unsigned char disable_cursor_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x4a6c0, disable_cursor_patch);
|
||||
patch((void *) 0x61afc, disable_cursor_patch);
|
||||
// Add Custom Cursor Rendering
|
||||
overwrite_calls((void *) GameRenderer_render, (void *) GameRenderer_render_injection);
|
||||
}
|
||||
@ -252,6 +257,9 @@ void init_misc() {
|
||||
media_disable_vsync();
|
||||
}
|
||||
|
||||
// Stop Checking GL Renderer
|
||||
overwrite((void *) AppPlatform_isPowerVR, (void *) AppPlatform_isPowerVR_injection);
|
||||
|
||||
// Init C++ And Logging
|
||||
_init_misc_cpp();
|
||||
_init_misc_logging();
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#include "../feature/feature.h"
|
||||
#include "../init/init.h"
|
||||
#include "options.h"
|
||||
|
||||
// Force Mob Spawning
|
||||
static bool LevelData_getSpawnMobs_injection(__attribute__((unused)) unsigned char *level_data) {
|
||||
@ -42,36 +41,32 @@ static char *get_username() {
|
||||
return username;
|
||||
}
|
||||
|
||||
static int fancy_graphics;
|
||||
static int peaceful_mode;
|
||||
static int anaglyph;
|
||||
static int smooth_lighting;
|
||||
static int render_distance;
|
||||
static int server_visible;
|
||||
// Configure Options
|
||||
unsigned char *stored_options = NULL;
|
||||
static void Options_initDefaultValue_injection(unsigned char *options) {
|
||||
static void Minecraft_init_injection(unsigned char *this) {
|
||||
// Call Original Method
|
||||
(*Options_initDefaultValue)(options);
|
||||
(*Minecraft_init)(this);
|
||||
|
||||
unsigned char *options = this + Minecraft_options_property_offset;
|
||||
// Enable Fancy Graphics
|
||||
*(options + Options_fancy_graphics_property_offset) = fancy_graphics;
|
||||
// Enable Crosshair In Touch GUI
|
||||
*(options + Options_split_controls_property_offset) = 1;
|
||||
// Peaceful Mode
|
||||
*(int32_t *) (options + Options_game_difficulty_property_offset) = peaceful_mode ? 0 : 2;
|
||||
// 3D Anaglyph
|
||||
*(options + Options_3d_anaglyph_property_offset) = anaglyph;
|
||||
// Smooth Lighting
|
||||
*(options + Options_ambient_occlusion_property_offset) = smooth_lighting;
|
||||
// Render Distance
|
||||
*(int32_t *) (options + Options_render_distance_property_offset) = render_distance;
|
||||
|
||||
// Default Graphics Settings
|
||||
*(options + Options_fancy_graphics_property_offset) = 1;
|
||||
*(options + Options_ambient_occlusion_property_offset) = 1;
|
||||
|
||||
// Store
|
||||
stored_options = options;
|
||||
}
|
||||
|
||||
// Smooth Lighting
|
||||
static void TileRenderer_tesselateBlockInWorld_injection(unsigned char *tile_renderer, unsigned char *tile, int32_t x, int32_t y, int32_t z) {
|
||||
// Set Variable
|
||||
*Minecraft_useAmbientOcclusion = *(stored_options + Options_ambient_occlusion_property_offset);
|
||||
|
||||
// Call Original Method
|
||||
(*TileRenderer_tesselateBlockInWorld)(tile_renderer, tile, x, y, z);
|
||||
// Server Visible
|
||||
*(options + Options_server_visible_property_offset) = server_visible;
|
||||
}
|
||||
|
||||
// Init
|
||||
@ -81,6 +76,10 @@ void init_options() {
|
||||
overwrite((void *) LevelData_getSpawnMobs, (void *) LevelData_getSpawnMobs_injection);
|
||||
}
|
||||
|
||||
// Enable Fancy Graphics
|
||||
fancy_graphics = feature_has("Fancy Graphics", server_disabled);
|
||||
// Peaceful Mode
|
||||
peaceful_mode = feature_has("Peaceful Mode", server_auto);
|
||||
// 3D Anaglyph
|
||||
anaglyph = feature_has("3D Anaglyph", server_disabled);
|
||||
// Render Distance
|
||||
@ -90,9 +89,11 @@ void init_options() {
|
||||
#else
|
||||
render_distance = 3;
|
||||
#endif
|
||||
// Server Visible
|
||||
server_visible = !feature_has("Disable Hosting LAN Worlds", server_disabled);
|
||||
|
||||
// Set Options
|
||||
overwrite_calls((void *) Options_initDefaultValue, (void *) Options_initDefaultValue_injection);
|
||||
overwrite_calls((void *) Minecraft_init, (void *) Minecraft_init_injection);
|
||||
|
||||
// Change Username
|
||||
const char *username = get_username();
|
||||
@ -103,23 +104,26 @@ void init_options() {
|
||||
ERR("Default Username Is Invalid");
|
||||
}
|
||||
patch_address((void *) default_username, (void *) username);
|
||||
unsigned char username_length_patch[4] = {(unsigned char) strlen(username), 0x20, 0xa0, 0xe3}; // "mov r2, #USERNAME_LENGTH"
|
||||
patch((void *) 0x1ba2c, username_length_patch);
|
||||
|
||||
// Disable Autojump By Default
|
||||
if (feature_has("Disable Autojump By Default", server_disabled)) {
|
||||
unsigned char autojump_patch[4] = {0x00, 0x30, 0xa0, 0xe3}; // "mov r3, #0x0"
|
||||
patch((void *) 0x44b90, autojump_patch);
|
||||
unsigned char autojump_patch[4] = {0x00, 0x00, 0xa0, 0xe3}; // "mov r0, #0x0"
|
||||
patch((void *) 0x5b148, autojump_patch);
|
||||
}
|
||||
// Display Nametags By Default
|
||||
if (feature_has("Display Nametags By Default", server_disabled)) {
|
||||
// r6 = 0x1
|
||||
// r5 = 0x0
|
||||
unsigned char display_nametags_patch[4] = {0x1d, 0x60, 0xc0, 0xe5}; // "strb r6, [r0, #0x1d]"
|
||||
patch((void *) 0xa6628, display_nametags_patch);
|
||||
// r12 = 0x0
|
||||
unsigned char display_nametags_patch[4] = {0x1d, 0x60, 0xc4, 0xe5}; // "strb r6, [r4, #0x1d]"
|
||||
patch((void *) 0xf2d44, display_nametags_patch);
|
||||
}
|
||||
|
||||
// Smooth Lighting
|
||||
overwrite_calls((void *) TileRenderer_tesselateBlockInWorld, (void *) TileRenderer_tesselateBlockInWorld_injection);
|
||||
|
||||
// Init C++
|
||||
_init_options_cpp();
|
||||
// Enable Smooth Lighting
|
||||
smooth_lighting = feature_has("Smooth Lighting", server_disabled);
|
||||
if (smooth_lighting) {
|
||||
unsigned char smooth_lighting_patch[4] = {0x01, 0x00, 0x53, 0xe3}; // "cmp r3, #0x1"
|
||||
patch((void *) 0x73b74, smooth_lighting_patch);
|
||||
}
|
||||
}
|
||||
|
@ -1,226 +0,0 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <string.h>
|
||||
|
||||
#include <libreborn/libreborn.h>
|
||||
|
||||
#include "../feature/feature.h"
|
||||
#include "../home/home.h"
|
||||
#include "options.h"
|
||||
|
||||
#include <symbols/minecraft.h>
|
||||
|
||||
// Fix Initial Option Button Rendering
|
||||
// The calling function doesn't exist in MCPE v0.6.1, so its name is unknown.
|
||||
static unsigned char *OptionsPane_unknown_toggle_creating_function_OptionButton_injection(unsigned char *option_button, unsigned char *option) {
|
||||
// Call Original Method
|
||||
unsigned char *ret = (*OptionButton)(option_button, option);
|
||||
|
||||
// Setup Image
|
||||
(*OptionButton_updateImage)(option_button, stored_options);
|
||||
|
||||
// Return
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Actually Save options.txt
|
||||
// Hook Last Options::addOptionToSaveOutput Call
|
||||
static void Options_save_Options_addOptionToSaveOutput_injection(unsigned char *options, std::vector<std::string> &data, std::string option, int32_t value) {
|
||||
// Call Original Method
|
||||
(*Options_addOptionToSaveOutput)(options, data, option, value);
|
||||
|
||||
// Save Fancy Graphics
|
||||
(*Options_addOptionToSaveOutput)(options, data, "gfx_fancygraphics", *(options + Options_fancy_graphics_property_offset));
|
||||
|
||||
// Save File
|
||||
unsigned char *options_file = options + Options_options_file_property_offset;
|
||||
(*OptionsFile_save)(options_file, data);
|
||||
}
|
||||
|
||||
// MCPI's OptionsFile::getOptionStrings is broken, this is the version in v0.7.0
|
||||
static std::vector<std::string> OptionsFile_getOptionStrings_injection(unsigned char *options_file) {
|
||||
// Get options.txt Path
|
||||
std::string path = *(std::string *) (options_file + OptionsFile_options_txt_path_property_offset);
|
||||
// Parse
|
||||
std::vector<std::string> ret;
|
||||
FILE *stream = fopen(path.c_str(), "r");
|
||||
char line[128];
|
||||
if (stream != NULL) {
|
||||
while (fgets(line, 0x80, stream) != NULL) {
|
||||
size_t sVar1 = strlen(line);
|
||||
if (2 < sVar1) {
|
||||
std::stringstream string_stream(line);
|
||||
while (true) {
|
||||
std::string data;
|
||||
std::getline(string_stream, data, ':');
|
||||
int iVar2 = data.find_last_not_of(" \n\r\t");
|
||||
data.erase(iVar2 + 1);
|
||||
if (data.length() == 0) {
|
||||
break;
|
||||
}
|
||||
ret.push_back(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(stream);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Get New options.txt Path
|
||||
#ifndef MCPI_SERVER_MODE
|
||||
static char *get_new_options_txt_path() {
|
||||
static char *path = NULL;
|
||||
// Path
|
||||
if (path == NULL) {
|
||||
safe_asprintf(&path, "%s/options.txt", home_get());
|
||||
}
|
||||
// Return
|
||||
return path;
|
||||
}
|
||||
// Free
|
||||
__attribute__((destructor)) static void _free_new_options_txt_path() {
|
||||
free(get_new_options_txt_path());
|
||||
}
|
||||
#else
|
||||
static char *get_new_options_txt_path() {
|
||||
// Block options.txt On Servers
|
||||
return (char *) "/dev/null";
|
||||
}
|
||||
#endif
|
||||
|
||||
// Modify Option Toggles
|
||||
static void OptionsPane_unknown_toggle_creating_function_injection(unsigned char *options_pane, unsigned char *unknown_object, std::string const& name, unsigned char *option) {
|
||||
// Modify
|
||||
if (name == "Fancy Graphics") {
|
||||
option = Options_Option_GRAPHICS;
|
||||
} else if (name == "Soft shadows") {
|
||||
option = Options_Option_AMBIENT_OCCLUSION;
|
||||
} else if (name == "Fancy Skies" || name == "Animated water") {
|
||||
// These have no corresponding option, so disable the toggle.
|
||||
return;
|
||||
} else if (name == "Third person camera") {
|
||||
// This isn't saved/loaded, so disable the toggle.
|
||||
return;
|
||||
} else if (name == "Lefty" || name == "Use touch screen" || name == "Split touch controls") {
|
||||
// These toggles require touch support, so disable them.
|
||||
return;
|
||||
} else if (name == "Vibrate on destroy") {
|
||||
// This toggle requires vibration support, so disable it.
|
||||
return;
|
||||
}
|
||||
|
||||
// Call Original Method
|
||||
(*OptionsPane_unknown_toggle_creating_function)(options_pane, unknown_object, name, option);
|
||||
}
|
||||
|
||||
// Add Missing Options To Options::getBooleanValue
|
||||
static bool Options_getBooleanValue_injection(unsigned char *options, unsigned char *option) {
|
||||
// Check
|
||||
if (option == Options_Option_GRAPHICS) {
|
||||
return *(options + Options_fancy_graphics_property_offset);
|
||||
} else {
|
||||
// Call Original Method
|
||||
return (*Options_getBooleanValue)(options, option);
|
||||
}
|
||||
}
|
||||
|
||||
// Add Options Button Back To Classic Start Screen
|
||||
static void StartMenuScreen_init_injection(unsigned char *screen) {
|
||||
// Call Original Method
|
||||
(*StartMenuScreen_init)(screen);
|
||||
|
||||
// Add Button
|
||||
std::vector<unsigned char *> *rendered_buttons = (std::vector<unsigned char *> *) (screen + Screen_rendered_buttons_property_offset);
|
||||
std::vector<unsigned char *> *selectable_buttons = (std::vector<unsigned char *> *) (screen + Screen_selectable_buttons_property_offset);
|
||||
unsigned char *options_button = screen + StartMenuScreen_options_button_property_offset;
|
||||
rendered_buttons->push_back(options_button);
|
||||
selectable_buttons->push_back(options_button);
|
||||
}
|
||||
|
||||
// Init C++
|
||||
void _init_options_cpp() {
|
||||
// NOP
|
||||
unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
|
||||
// Fix Options Screen
|
||||
if (feature_has("Fix Options Screen", server_disabled)) {
|
||||
// Fix Initial Option Button Rendering
|
||||
overwrite_call((void *) 0x24510, (void *) OptionsPane_unknown_toggle_creating_function_OptionButton_injection);
|
||||
|
||||
// "Gui Scale" slider is broken, so disable it.
|
||||
patch((void *) 0x35a10, nop_patch);
|
||||
// "Vibrate on destroy" is disabled, so "Feedback" is empty, so disable it.
|
||||
patch((void *) 0x35960, nop_patch);
|
||||
|
||||
// Disconnect "This works?" Slider From Difficulty
|
||||
unsigned char this_works_slider_patch[4] = {0x00, 0x30, 0xa0, 0xe3}; // "mov r3, #0x0"
|
||||
patch((void *) 0x3577c, this_works_slider_patch);
|
||||
|
||||
// Modify Option Toggles
|
||||
overwrite_calls((void *) OptionsPane_unknown_toggle_creating_function, (void *) OptionsPane_unknown_toggle_creating_function_injection);
|
||||
|
||||
// Add Missing Options To Options::getBooleanValue
|
||||
overwrite_calls((void *) Options_getBooleanValue, (void *) Options_getBooleanValue_injection);
|
||||
|
||||
// Add Options Button Back To Classic Start Screen
|
||||
patch_address(StartMenuScreen_init_vtable_addr, (void *) StartMenuScreen_init_injection);
|
||||
// Fix Classic UI Options Button Size
|
||||
unsigned char classic_options_button_width_patch[4] = {0xa0, 0x00, 0xa0, 0xe3}; // "mov r0, #0xa0"
|
||||
patch((void *) 0x39a98, classic_options_button_width_patch);
|
||||
unsigned char classic_options_button_height_patch[4] = {0x18, 0x30, 0xa0, 0xe3}; // "mov r3, #0x18"
|
||||
patch((void *) 0x39a9c, classic_options_button_height_patch);
|
||||
// Fix Classic UI Buttons Spacing
|
||||
{
|
||||
// Join Button
|
||||
unsigned char classic_join_button_spacing_patch[4] = {0x12, 0x20, 0x83, 0xe2}; // "add r2, r3, #0x12"
|
||||
patch((void *) 0x39894, classic_join_button_spacing_patch);
|
||||
// Start Button
|
||||
unsigned char classic_start_button_spacing_patch[4] = {0x08, 0x20, 0x43, 0xe2}; // "sub r2, r3, #0x08"
|
||||
patch((void *) 0x3988c, classic_start_button_spacing_patch);
|
||||
// Options Button
|
||||
unsigned char classic_options_button_spacing_patch[4] = {0x2c, 0x30, 0x83, 0xe2}; // "add r3, r3, #0x2c"
|
||||
patch((void *) 0x39898, classic_options_button_spacing_patch);
|
||||
}
|
||||
}
|
||||
|
||||
// Actually Save options.txt
|
||||
overwrite_call((void *) 0x197fc, (void *) Options_save_Options_addOptionToSaveOutput_injection);
|
||||
// Fix options.txt Path
|
||||
patch_address((void *) options_txt_path, (void *) get_new_options_txt_path());
|
||||
// When Loading, options.txt Should Be Opened In Read Mode
|
||||
patch_address((void *) options_txt_fopen_mode_when_loading, (void *) "r");
|
||||
// Fix OptionsFile::getOptionStrings
|
||||
overwrite_calls((void *) OptionsFile_getOptionStrings, (void *) OptionsFile_getOptionStrings_injection);
|
||||
|
||||
// Sensitivity Loading/Saving Is Broken, Disable It
|
||||
patch((void *) 0x1931c, nop_patch);
|
||||
patch((void *) 0x1973c, nop_patch);
|
||||
|
||||
// Unsplit Touch Controls Breaks Things, Never Load/Save It
|
||||
unsigned char cmp_r0_r0_patch[4] = {0x00, 0x00, 0x50, 0xe1}; // "cmp r0, r0"
|
||||
patch((void *) 0x19378, cmp_r0_r0_patch);
|
||||
patch((void *) 0x197cc, nop_patch);
|
||||
|
||||
// Custom Username Is Loaded Manually, Disable Loading From options.txt
|
||||
patch((void *) 0x192ac, nop_patch);
|
||||
|
||||
// Replace "feedback_vibration" Loading/Saving With "gfx_ao"
|
||||
{
|
||||
// Replace String
|
||||
static const char *new_feedback_vibration_options_txt_nam = "gfx_ao";
|
||||
patch_address((void *) feedback_vibration_options_txt_name_1, (void *) &new_feedback_vibration_options_txt_nam);
|
||||
patch_address((void *) feedback_vibration_options_txt_name_2, (void *) &new_feedback_vibration_options_txt_nam);
|
||||
// Loading
|
||||
unsigned char gfx_ao_loading_patch[4] = {(unsigned char) Options_ambient_occlusion_property_offset, 0x10, 0x84, 0xe2}; // "add param_2, r4, #OFFSET"
|
||||
patch((void *) 0x193b8, gfx_ao_loading_patch);
|
||||
// Saving
|
||||
unsigned char gfx_ao_saving_patch[4] = {(unsigned char) Options_ambient_occlusion_property_offset, 0x30, 0xd4, 0xe5}; // "ldrb r3, [r4, #OFFSET]"
|
||||
patch((void *) 0x197f8, gfx_ao_saving_patch);
|
||||
}
|
||||
|
||||
// Disable "gfx_lowquality" Loading
|
||||
patch((void *) 0x19414, nop_patch);
|
||||
patch((void *) 0x1941c, nop_patch);
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
__attribute__((visibility("internal"))) void _init_options_cpp();
|
||||
__attribute__((visibility("internal"))) extern unsigned char *stored_options;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@ -54,6 +54,7 @@ static ServerProperties &get_server_properties() {
|
||||
#define DEFAULT_PORT "19132"
|
||||
#define DEFAULT_SEED ""
|
||||
#define DEFAULT_FORCE_MOB_SPAWNING "false"
|
||||
#define DEFAULT_PEACEFUL_MODE "false"
|
||||
#define DEFAULT_WORLD_NAME "world"
|
||||
#define DEFAULT_MAX_PLAYERS "4"
|
||||
#define DEFAULT_WHITELIST "false"
|
||||
@ -87,6 +88,7 @@ static void start_world(unsigned char *minecraft) {
|
||||
// Open Port
|
||||
int port = get_server_properties().get_int("port", DEFAULT_PORT);
|
||||
INFO("Listening On: %i", port);
|
||||
patch_address((void *) 0x16cd8, (void *) port);
|
||||
(*Minecraft_hostMultiplayer)(minecraft, port);
|
||||
}
|
||||
|
||||
@ -262,6 +264,15 @@ __attribute__((destructor)) static void _free_stdin_buffer() {
|
||||
stdin_buffer = NULL;
|
||||
}
|
||||
}
|
||||
// Prevent STDIN From Being Closed
|
||||
HOOK(close, int, (int fd)) {
|
||||
if (fd != fileno(stdin)) {
|
||||
ensure_close();
|
||||
return (*real_close)(fd);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Commands
|
||||
static void handle_commands(unsigned char *minecraft) {
|
||||
@ -417,6 +428,9 @@ static const char *get_features() {
|
||||
loaded_features = true;
|
||||
|
||||
features.clear();
|
||||
if (get_server_properties().get_bool("peaceful-mode", DEFAULT_PEACEFUL_MODE)) {
|
||||
features += "Peaceful Mode|";
|
||||
}
|
||||
if (get_server_properties().get_bool("force-mob-spawning", DEFAULT_FORCE_MOB_SPAWNING)) {
|
||||
features += "Force Mob Spawning|";
|
||||
}
|
||||
@ -461,6 +475,8 @@ static void server_init() {
|
||||
properties_file_output << "seed=" DEFAULT_SEED "\n";
|
||||
properties_file_output << "# Force Mob Spawning (false = Disabled, true = Enabled)\n";
|
||||
properties_file_output << "force-mob-spawning=" DEFAULT_FORCE_MOB_SPAWNING "\n";
|
||||
properties_file_output << "# Peaceful Mode (false = Disabled, true = Enabled)\n";
|
||||
properties_file_output << "peaceful-mode=" DEFAULT_PEACEFUL_MODE "\n";
|
||||
properties_file_output << "# World To Select\n";
|
||||
properties_file_output << "world-name=" DEFAULT_WORLD_NAME "\n";
|
||||
properties_file_output << "# Maximum Player Count\n";
|
||||
@ -498,23 +514,23 @@ static void server_init() {
|
||||
|
||||
// Prevent Main Player From Loading
|
||||
unsigned char player_patch[4] = {0x00, 0x20, 0xa0, 0xe3}; // "mov r2, #0x0"
|
||||
patch((void *) 0x1685c, player_patch);
|
||||
patch((void *) 0x16ef8, player_patch);
|
||||
// Start World On Launch
|
||||
misc_run_on_update(Minecraft_update_injection);
|
||||
// Set Max Players
|
||||
unsigned char max_players_patch[4] = {get_max_players(), 0x30, 0xa0, 0xe3}; // "mov r3, #MAX_PLAYERS"
|
||||
patch((void *) 0x166d0, max_players_patch);
|
||||
patch((void *) 0x16cc0, max_players_patch);
|
||||
// Custom Banned IP List
|
||||
overwrite((void *) RakNet_RakPeer_IsBanned, (void *) RakNet_RakPeer_IsBanned_injection);
|
||||
|
||||
// Show The MineCon Icon Next To MOTD In Server List
|
||||
if (get_server_properties().get_bool("show-minecon-badge", DEFAULT_SHOW_MINECON_BADGE)) {
|
||||
unsigned char minecon_badge_patch[4] = {0x04, 0x1a, 0x9f, 0xe5}; // "ldr r1, [0x741f0]"
|
||||
patch((void *) 0x737e4, minecon_badge_patch);
|
||||
unsigned char minecon_badge_patch[4] = {0x5c, 0x1a, 0x9f, 0xe5}; // "ldr r1, [0x98af0]"
|
||||
patch((void *) 0x9808c, minecon_badge_patch);
|
||||
}
|
||||
|
||||
// Log IPs
|
||||
overwrite_call((void *) 0x75e54, (void *) ServerSideNetworkHandler_onReady_ClientGeneration_ServerSideNetworkHandler_popPendingPlayer_injection);
|
||||
overwrite_call((void *) 0x9a63c, (void *) ServerSideNetworkHandler_onReady_ClientGeneration_ServerSideNetworkHandler_popPendingPlayer_injection);
|
||||
|
||||
// Start Reading STDIN
|
||||
pthread_t read_stdin_thread_obj;
|
||||
|
@ -1,2 +0,0 @@
|
||||
# ``sign`` Mod
|
||||
This mod fixes sign placement.
|
@ -1,68 +0,0 @@
|
||||
#include <vector>
|
||||
|
||||
#include <libreborn/libreborn.h>
|
||||
#include <symbols/minecraft.h>
|
||||
|
||||
#include "../init/init.h"
|
||||
#include "../feature/feature.h"
|
||||
#include "../input/input.h"
|
||||
#include "sign.h"
|
||||
|
||||
// Open Sign Screen
|
||||
static void LocalPlayer_openTextEdit_injection(unsigned char *local_player, unsigned char *sign) {
|
||||
if (*(int32_t *) (sign + TileEntity_id_property_offset) == 4) {
|
||||
unsigned char *minecraft = *(unsigned char **) (local_player + LocalPlayer_minecraft_property_offset);
|
||||
unsigned char *screen = (unsigned char *) ::operator new(TEXT_EDIT_SCREEN_SIZE);
|
||||
ALLOC_CHECK(screen);
|
||||
screen = (*TextEditScreen)(screen, sign);
|
||||
(*Minecraft_setScreen)(minecraft, screen);
|
||||
}
|
||||
}
|
||||
|
||||
#define BACKSPACE_KEY 8
|
||||
|
||||
static int is_valid_key(char key) {
|
||||
return (key >= 32 && key <= 126) || key == BACKSPACE_KEY;
|
||||
}
|
||||
|
||||
// Store Text Input
|
||||
std::vector<char> input;
|
||||
void sign_key_press(char key) {
|
||||
if (is_valid_key(key)) {
|
||||
input.push_back(key);
|
||||
}
|
||||
}
|
||||
static void clear_input(__attribute__((unused)) unsigned char *minecraft) {
|
||||
input.clear();
|
||||
}
|
||||
|
||||
// Handle Text Input
|
||||
static void TextEditScreen_updateEvents_injection(unsigned char *screen) {
|
||||
// Call Original Method
|
||||
(*Screen_updateEvents)(screen);
|
||||
|
||||
if (*(char *)(screen + 4) == '\0') {
|
||||
uint32_t vtable = *((uint32_t *) screen);
|
||||
for (char key : input) {
|
||||
if (key == BACKSPACE_KEY) {
|
||||
// Handle Backspace
|
||||
(*(Screen_keyPressed_t *) (vtable + Screen_keyPressed_vtable_offset))(screen, BACKSPACE_KEY);
|
||||
} else {
|
||||
// Handle Nrmal Key
|
||||
(*(Screen_keyboardNewChar_t *) (vtable + Screen_keyboardNewChar_vtable_offset))(screen, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
clear_input(NULL);
|
||||
}
|
||||
|
||||
// Init
|
||||
void init_sign() {
|
||||
if (feature_has("Fix Sign Placement", server_disabled)) {
|
||||
// Fix Signs
|
||||
patch_address(LocalPlayer_openTextEdit_vtable_addr, (void *) LocalPlayer_openTextEdit_injection);
|
||||
patch_address(TextEditScreen_updateEvents_vtable_addr, (void *) TextEditScreen_updateEvents_injection);
|
||||
// Clear input On Input Tick
|
||||
input_run_on_tick(clear_input);
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void sign_key_press(char key);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@ -171,5 +171,5 @@ void init_textures() {
|
||||
}
|
||||
|
||||
// Scale Animated Textures
|
||||
overwrite_call((void *) 0x53274, (void *) Textures_tick_glTexSubImage2D_injection);
|
||||
overwrite_call((void *) 0x6bfd0, (void *) Textures_tick_glTexSubImage2D_injection);
|
||||
}
|
||||
|
@ -24,17 +24,17 @@ void init_touch() {
|
||||
|
||||
// Force Correct Toolbar Size
|
||||
unsigned char toolbar_patch[4] = {0x01, 0x00, 0x50, 0xe3}; // "cmp r0, #0x1"
|
||||
patch((void *) 0x257b0, toolbar_patch);
|
||||
patch((void *) 0x2a6cc, toolbar_patch);
|
||||
}
|
||||
|
||||
// Show Block Outlines
|
||||
int block_outlines = feature_has("Show Block Outlines", 0);
|
||||
unsigned char outline_patch[4] = {(unsigned char) (block_outlines ? !touch_gui : touch_gui), 0x00, 0x50, 0xe3}; // "cmp r0, #0x1" or "cmp r0, #0x0"
|
||||
patch((void *) 0x4a210, outline_patch);
|
||||
patch((void *) 0x6183c, outline_patch);
|
||||
|
||||
// Force Touch Inventory
|
||||
if (feature_has("Force Touch Inventory", server_disabled)) {
|
||||
overwrite_call((void *) 0x2943c, (void *) operator_new_IngameBlockSelectionScreen_injection);
|
||||
overwrite_call((void *) 0x29444, (void *) Touch_IngameBlockSelectionScreen);
|
||||
overwrite_call((void *) 0x2f628, (void *) operator_new_IngameBlockSelectionScreen_injection);
|
||||
overwrite_call((void *) 0x2f630, (void *) Touch_IngameBlockSelectionScreen);
|
||||
}
|
||||
}
|
||||
|
@ -31,6 +31,8 @@ void init_version() {
|
||||
overwrite((void *) Common_getGameVersionString, (void *) Common_getGameVersionString_injection);
|
||||
// Normal GUI
|
||||
patch_address((void *) minecraft_pi_version, version_get());
|
||||
unsigned char normal_gui_version_length_patch[4] = {(unsigned char) strlen(version_get()), 0x20, 0xa0, 0xe3}; // "mov r2, #VERSION_LENGTH"
|
||||
patch((void *) 0x4b11c, normal_gui_version_length_patch);
|
||||
|
||||
// Log
|
||||
INFO("Starting Minecraft: Pi Edition (%s)", version_get());
|
||||
|
@ -13,54 +13,42 @@ typedef unsigned char bool;
|
||||
// Globals
|
||||
|
||||
typedef void (*renderCursor_t)(float x, float y, unsigned char *minecraft);
|
||||
static renderCursor_t renderCursor = (renderCursor_t) 0x480c4;
|
||||
static renderCursor_t renderCursor = (renderCursor_t) 0x5f414;
|
||||
|
||||
static char **default_path = (char **) 0xe264; // /.minecraft/
|
||||
static char **default_username = (char **) 0x18fd4; // StevePi
|
||||
static char **minecraft_pi_version = (char **) 0x39d94; // v0.1.1 alpha
|
||||
static char **options_txt_path = (char **) 0x19bc8; // options.txt
|
||||
static char **options_txt_fopen_mode_when_loading = (char **) 0x19d24; // w
|
||||
static char ***feedback_vibration_options_txt_name_1 = (char ***) 0x198a0; // feedback_vibration
|
||||
static char ***feedback_vibration_options_txt_name_2 = (char ***) 0x194bc; // feedback_vibration
|
||||
static char **full_data_path = (char **) 0xdd10; // .
|
||||
static char **default_username = (char **) 0x1c250; // StevePi
|
||||
static char **minecraft_pi_version = (char **) 0x4b2a0; // v0.1.0 alpha
|
||||
static char **demo_level_name = (char **) 0x3a37c; // _DemoLevel
|
||||
|
||||
static unsigned char **Material_stone = (unsigned char **) 0x180a9c; // Material
|
||||
static unsigned char **Item_flintAndSteel = (unsigned char **) 0x1da680; // Item
|
||||
static unsigned char **Item_snowball = (unsigned char **) 0x1da770; // Item
|
||||
static unsigned char **Item_shears = (unsigned char **) 0x1da7b0; // Item
|
||||
static unsigned char **Item_egg = (unsigned char **) 0x1da790; // Item
|
||||
static unsigned char **Item_dye_powder = (unsigned char **) 0x1da7a0; // Item
|
||||
static unsigned char **Item_camera = (unsigned char **) 0x1da7cc; // Item
|
||||
|
||||
static unsigned char *SOUND_STONE = (unsigned char *) 0x181c80; // Tile::SoundType
|
||||
static unsigned char **Tile_water = (unsigned char **) 0x1dfca4; // Tile
|
||||
static unsigned char **Tile_lava = (unsigned char **) 0x1dfe30; // Tile
|
||||
static unsigned char **Tile_calmWater = (unsigned char **) 0x1dfca8; // Tile
|
||||
static unsigned char **Tile_calmLava = (unsigned char **) 0x1dfe34; // Tile
|
||||
static unsigned char **Tile_glowingObsidian = (unsigned char **) 0x1e0014; // Tile
|
||||
static unsigned char **Tile_web = (unsigned char **) 0x1dfe70; // Tile
|
||||
static unsigned char **Tile_topSnow = (unsigned char **) 0x1dfc98; // Tile
|
||||
static unsigned char **Tile_ice = (unsigned char **) 0x1dfee8; // Tile
|
||||
static unsigned char **Tile_invisible_bedrock = (unsigned char **) 0x1dfef8; // Tile
|
||||
static unsigned char **Tile_netherReactor = (unsigned char **) 0x1e0018; // Tile
|
||||
static unsigned char **Tile_info_updateGame1 = (unsigned char **) 0x1dfdd4; // Tile
|
||||
static unsigned char **Tile_info_updateGame2 = (unsigned char **) 0x1dfdd0; // Tile
|
||||
static unsigned char **Tile_bedrock = (unsigned char **) 0x1dfe2c; // Tile
|
||||
static unsigned char **Tile_tallgrass = (unsigned char **) 0x1dfe74; // Tile
|
||||
static unsigned char **Tile_stoneSlab = (unsigned char **) 0x1dfdb8; // Tile
|
||||
|
||||
static unsigned char **Item_flintAndSteel = (unsigned char **) 0x17ba70; // Item
|
||||
static unsigned char **Item_snowball = (unsigned char **) 0x17bbb0; // Item
|
||||
static unsigned char **Item_shears = (unsigned char **) 0x17bbf0; // Item
|
||||
static unsigned char **Item_egg = (unsigned char **) 0x17bbd0; // Item
|
||||
static unsigned char **Item_dye_powder = (unsigned char **) 0x17bbe0; // Item
|
||||
static unsigned char **Item_camera = (unsigned char **) 0x17bc14; // Item
|
||||
static unsigned char **Tile_leaves = (unsigned char **) 0x1df374; // Tile
|
||||
static unsigned char **Tile_leaves_carried = (unsigned char **) 0x1e0020; // Tile
|
||||
static unsigned char **Tile_grass = (unsigned char **) 0x1dfc7c; // Tile
|
||||
static unsigned char **Tile_grass_carried = (unsigned char **) 0x1e001c; // Tile
|
||||
|
||||
static unsigned char **Tile_water = (unsigned char **) 0x181b3c; // Tile
|
||||
static unsigned char **Tile_lava = (unsigned char **) 0x181cc8; // Tile
|
||||
static unsigned char **Tile_calmWater = (unsigned char **) 0x181b40; // Tile
|
||||
static unsigned char **Tile_calmLava = (unsigned char **) 0x181ccc; // Tile
|
||||
static unsigned char **Tile_glowingObsidian = (unsigned char **) 0x181dcc; // Tile
|
||||
static unsigned char **Tile_web = (unsigned char **) 0x181d08; // Tile
|
||||
static unsigned char **Tile_topSnow = (unsigned char **) 0x181b30; // Tile
|
||||
static unsigned char **Tile_ice = (unsigned char **) 0x181d80; // Tile
|
||||
static unsigned char **Tile_invisible_bedrock = (unsigned char **) 0x181d94; // Tile
|
||||
static unsigned char **Tile_netherReactor = (unsigned char **) 0x181dd0; // Tile
|
||||
static unsigned char **Tile_info_updateGame1 = (unsigned char **) 0x181c68; // Tile
|
||||
static unsigned char **Tile_info_updateGame2 = (unsigned char **) 0x181c6c; // Tile
|
||||
static unsigned char **Tile_bedrock = (unsigned char **) 0x181cc4; // Tile
|
||||
static unsigned char **Tile_tallgrass = (unsigned char **) 0x181d0c; // Tile
|
||||
static unsigned char **Tile_stoneSlab = (unsigned char **) 0x181b44; // Tile
|
||||
|
||||
static unsigned char **Tile_leaves = (unsigned char **) 0x18120c; // Tile
|
||||
static unsigned char **Tile_leaves_carried = (unsigned char **) 0x181dd8; // Tile
|
||||
static unsigned char **Tile_grass = (unsigned char **) 0x181b14; // Tile
|
||||
static unsigned char **Tile_grass_carried = (unsigned char **) 0x181dd4; // Tile
|
||||
|
||||
static float *InvGuiScale = (float *) 0x135d98;
|
||||
|
||||
static unsigned char *Options_Option_GRAPHICS = (unsigned char *) 0x136c2c; // Option
|
||||
static unsigned char *Options_Option_AMBIENT_OCCLUSION = (unsigned char *) 0x136c38; // Option
|
||||
|
||||
static bool *Minecraft_useAmbientOcclusion = (bool *) 0x136b90;
|
||||
static float *InvGuiScale = (float *) 0x1949fc;
|
||||
|
||||
// Structures
|
||||
|
||||
@ -87,120 +75,91 @@ struct RakNet_SystemAddress {
|
||||
|
||||
// Tile
|
||||
|
||||
static unsigned char **Tile_tiles = (unsigned char **) 0x180e08;
|
||||
static unsigned char **Tile_tiles = (unsigned char **) 0x1def70;
|
||||
|
||||
typedef void (*Tile_initTiles_t)();
|
||||
static Tile_initTiles_t Tile_initTiles = (Tile_initTiles_t) 0xc358c;
|
||||
|
||||
#define TILE_SIZE 0x5c
|
||||
#define TILE_VTABLE_SIZE 0x104
|
||||
|
||||
static unsigned char *Tile_vtable = (unsigned char *) 0x115670;
|
||||
|
||||
typedef unsigned char *(*Tile_t)(unsigned char *tile, int32_t id, int32_t texture, const void *material);
|
||||
static Tile_t Tile = (Tile_t) 0xc33a0;
|
||||
|
||||
typedef unsigned char *(*Tile_init_t)(unsigned char *tile);
|
||||
static Tile_init_t Tile_init = (Tile_init_t) 0xc34dc;
|
||||
|
||||
typedef unsigned char *(*Tile_setDestroyTime_t)(unsigned char *tile, float destroy_time);
|
||||
static uint32_t Tile_setDestroyTime_vtable_offset = 0xf8;
|
||||
|
||||
typedef unsigned char *(*Tile_setExplodeable_t)(unsigned char *tile, float explodeable);
|
||||
static uint32_t Tile_setExplodeable_vtable_offset = 0xf4;
|
||||
|
||||
typedef unsigned char *(*Tile_setSoundType_t)(unsigned char *tile, unsigned char *sound_type);
|
||||
static uint32_t Tile_setSoundType_vtable_offset = 0xe8;
|
||||
|
||||
typedef int32_t (*Tile_use_t)(unsigned char *tile, unsigned char *level, int32_t x, int32_t y, int32_t z, unsigned char *player);
|
||||
static uint32_t Tile_use_vtable_offset = 0x98;
|
||||
static Tile_initTiles_t Tile_initTiles = (Tile_initTiles_t) 0x125bac;
|
||||
|
||||
static uint32_t Tile_id_property_offset = 0x8; // int32_t
|
||||
static uint32_t Tile_category_property_offset = 0x3c; // int32_t
|
||||
|
||||
// TileRenderer
|
||||
// AppPlatform
|
||||
|
||||
typedef void (*TileRenderer_tesselateBlockInWorld_t)(unsigned char *tile_renderer, unsigned char *tile, int32_t x, int32_t y, int32_t z);
|
||||
static TileRenderer_tesselateBlockInWorld_t TileRenderer_tesselateBlockInWorld = (TileRenderer_tesselateBlockInWorld_t) 0x59e30;
|
||||
|
||||
// GameMode
|
||||
|
||||
typedef void (*GameMode_releaseUsingItem_t)(unsigned char *game_mode, unsigned char *player);
|
||||
static uint32_t GameMode_releaseUsingItem_vtable_offset = 0x5c;
|
||||
typedef bool (*AppPlatform_isPowerVR_t)(unsigned char *app_platform);
|
||||
static AppPlatform_isPowerVR_t AppPlatform_isPowerVR = (AppPlatform_isPowerVR_t) 0x12670;
|
||||
|
||||
// Minecraft
|
||||
|
||||
typedef void (*Minecraft_init_t)(unsigned char *minecraft);
|
||||
static Minecraft_init_t Minecraft_init = (Minecraft_init_t) 0x1700c;
|
||||
static Minecraft_init_t Minecraft_init = (Minecraft_init_t) 0x182c8;
|
||||
|
||||
typedef void (*Minecraft_tickInput_t)(unsigned char *minecraft);
|
||||
static Minecraft_tickInput_t Minecraft_tickInput = (Minecraft_tickInput_t) 0x15ffc;
|
||||
static Minecraft_tickInput_t Minecraft_tickInput = (Minecraft_tickInput_t) 0x166a8;
|
||||
|
||||
typedef void (*Minecraft_setIsCreativeMode_t)(unsigned char *, int32_t);
|
||||
static Minecraft_setIsCreativeMode_t Minecraft_setIsCreativeMode = (Minecraft_setIsCreativeMode_t) 0x16ec4;
|
||||
static Minecraft_setIsCreativeMode_t Minecraft_setIsCreativeMode = (Minecraft_setIsCreativeMode_t) 0x17888;
|
||||
|
||||
typedef int32_t (*Minecraft_isTouchscreen_t)(unsigned char *minecraft);
|
||||
static Minecraft_isTouchscreen_t Minecraft_isTouchscreen = (Minecraft_isTouchscreen_t) 0x1639c;
|
||||
static Minecraft_isTouchscreen_t Minecraft_isTouchscreen = (Minecraft_isTouchscreen_t) 0x16b38;
|
||||
|
||||
typedef void (*Minecraft_setScreen_t)(unsigned char *minecraft, unsigned char *screen);
|
||||
static Minecraft_setScreen_t Minecraft_setScreen = (Minecraft_setScreen_t) 0x15d6c;
|
||||
static Minecraft_setScreen_t Minecraft_setScreen = (Minecraft_setScreen_t) 0x16388;
|
||||
|
||||
typedef void (*Minecraft_tick_t)(unsigned char *minecraft, int32_t param_1, int32_t param_2);
|
||||
static Minecraft_tick_t Minecraft_tick = (Minecraft_tick_t) 0x16934;
|
||||
static Minecraft_tick_t Minecraft_tick = (Minecraft_tick_t) 0x17030;
|
||||
|
||||
typedef void (*Minecraft_update_t)(unsigned char *minecraft);
|
||||
static Minecraft_update_t Minecraft_update = (Minecraft_update_t) 0x16b74;
|
||||
static Minecraft_update_t Minecraft_update = (Minecraft_update_t) 0x172e4;
|
||||
|
||||
typedef void (*Minecraft_hostMultiplayer_t)(unsigned char *minecraft, int32_t port);
|
||||
static Minecraft_hostMultiplayer_t Minecraft_hostMultiplayer = (Minecraft_hostMultiplayer_t) 0x16664;
|
||||
static Minecraft_hostMultiplayer_t Minecraft_hostMultiplayer = (Minecraft_hostMultiplayer_t) 0x16c50;
|
||||
|
||||
typedef const char *(*Minecraft_getProgressMessage_t)(unsigned char *minecraft);
|
||||
static Minecraft_getProgressMessage_t Minecraft_getProgressMessage = (Minecraft_getProgressMessage_t) 0x16e58;
|
||||
static Minecraft_getProgressMessage_t Minecraft_getProgressMessage = (Minecraft_getProgressMessage_t) 0x17810;
|
||||
|
||||
typedef uint32_t (*Minecraft_isLevelGenerated_t)(unsigned char *minecraft);
|
||||
static Minecraft_isLevelGenerated_t Minecraft_isLevelGenerated = (Minecraft_isLevelGenerated_t) 0x16e6c;
|
||||
static Minecraft_isLevelGenerated_t Minecraft_isLevelGenerated = (Minecraft_isLevelGenerated_t) 0x17824;
|
||||
|
||||
typedef bool (*Minecraft_isCreativeMode_t)(unsigned char *minecraft);
|
||||
static Minecraft_isCreativeMode_t Minecraft_isCreativeMode = (Minecraft_isCreativeMode_t) 0x17270;
|
||||
static Minecraft_isCreativeMode_t Minecraft_isCreativeMode = (Minecraft_isCreativeMode_t) 0x17a48;
|
||||
|
||||
typedef void (*Minecraft_releaseMouse_t)(unsigned char *minecraft);
|
||||
static Minecraft_releaseMouse_t Minecraft_releaseMouse = (Minecraft_releaseMouse_t) 0x15d30;
|
||||
static Minecraft_releaseMouse_t Minecraft_releaseMouse = (Minecraft_releaseMouse_t) 0x1634c;
|
||||
|
||||
typedef void (*Minecraft_grabMouse_t)(unsigned char *minecraft);
|
||||
static Minecraft_grabMouse_t Minecraft_grabMouse = (Minecraft_grabMouse_t) 0x15d10;
|
||||
static Minecraft_grabMouse_t Minecraft_grabMouse = (Minecraft_grabMouse_t) 0x1632c;
|
||||
|
||||
typedef void (*Minecraft_leaveGame_t)(unsigned char *minecraft, bool save_remote_level);
|
||||
static Minecraft_leaveGame_t Minecraft_leaveGame = (Minecraft_leaveGame_t) 0x15ea0;
|
||||
static Minecraft_leaveGame_t Minecraft_leaveGame = (Minecraft_leaveGame_t) 0x1653c;
|
||||
|
||||
typedef int (*Minecraft_handleBack_t)(unsigned char *minecraft, bool do_nothing);
|
||||
static uint32_t Minecraft_handleBack_vtable_offset = 0x34;
|
||||
|
||||
typedef unsigned char *(*Minecraft_getCreator_t)(unsigned char *minecraft);
|
||||
static Minecraft_getCreator_t Minecraft_getCreator = (Minecraft_getCreator_t) 0x17538;
|
||||
static Minecraft_getCreator_t Minecraft_getCreator = (Minecraft_getCreator_t) 0x17d74;
|
||||
|
||||
typedef unsigned char *(*Minecraft_getLevelSource_t)(unsigned char *minecraft);
|
||||
static Minecraft_getLevelSource_t Minecraft_getLevelSource = (Minecraft_getLevelSource_t) 0x16e84;
|
||||
static Minecraft_getLevelSource_t Minecraft_getLevelSource = (Minecraft_getLevelSource_t) 0x1783c;
|
||||
|
||||
static uint32_t Minecraft_screen_width_property_offset = 0x20; // int32_t
|
||||
static uint32_t Minecraft_network_handler_property_offset = 0x174; // NetEventCallback *
|
||||
static uint32_t Minecraft_rak_net_instance_property_offset = 0x170; // RakNetInstance *
|
||||
static uint32_t Minecraft_level_property_offset = 0x188; // Level *
|
||||
static uint32_t Minecraft_textures_property_offset = 0x164; // Textures *
|
||||
static uint32_t Minecraft_game_mode_property_offset = 0x160; // GameMode *
|
||||
static uint32_t Minecraft_player_property_offset = 0x18c; // LocalPlayer *
|
||||
static uint32_t Minecraft_options_property_offset = 0x3c; // Options
|
||||
static uint32_t Minecraft_hit_result_property_offset = 0xc38; // HitResult
|
||||
static uint32_t Minecraft_progress_property_offset = 0xc60; // int32_t
|
||||
static uint32_t Minecraft_command_server_property_offset = 0xcc0; // CommandServer *
|
||||
static uint32_t Minecraft_screen_property_offset = 0xc10; // Screen *
|
||||
static uint32_t Minecraft_gui_property_offset = 0x198; // Gui
|
||||
static uint32_t Minecraft_pov_property_offset = 0x150; // Mob *
|
||||
static uint32_t Minecraft_perf_renderer_property_offset = 0xcbc; // PerfRenderer *
|
||||
static uint32_t Minecraft_network_handler_property_offset = 0x158; // NetEventCallback *
|
||||
static uint32_t Minecraft_rak_net_instance_property_offset = 0x154; // RakNetInstance *
|
||||
static uint32_t Minecraft_level_property_offset = 0x16c; // Level *
|
||||
static uint32_t Minecraft_textures_property_offset = 0x148; // Textures *
|
||||
static uint32_t Minecraft_game_mode_property_offset = 0x144; // GameMode *
|
||||
static uint32_t Minecraft_player_property_offset = 0x170; // LocalPlayer *
|
||||
static uint32_t Minecraft_options_property_offset = 0x28; // Options
|
||||
static uint32_t Minecraft_hit_result_property_offset = 0xc1c; // HitResult
|
||||
static uint32_t Minecraft_progress_property_offset = 0xc44; // int32_t
|
||||
static uint32_t Minecraft_command_server_property_offset = 0xca4; // CommandServer *
|
||||
static uint32_t Minecraft_screen_property_offset = 0xbf4; // Screen *
|
||||
static uint32_t Minecraft_gui_property_offset = 0x17c; // Gui
|
||||
static uint32_t Minecraft_pov_property_offset = 0x170; // Mob *
|
||||
|
||||
// GameRenderer
|
||||
|
||||
typedef void (*GameRenderer_render_t)(unsigned char *game_renderer, float param_1);
|
||||
static GameRenderer_render_t GameRenderer_render = (GameRenderer_render_t) 0x4a338;
|
||||
static GameRenderer_render_t GameRenderer_render = (GameRenderer_render_t) 0x619c0;
|
||||
|
||||
static uint32_t GameRenderer_minecraft_property_offset = 0x4; // Minecraft *
|
||||
|
||||
@ -208,19 +167,19 @@ static uint32_t GameRenderer_minecraft_property_offset = 0x4; // Minecraft *
|
||||
|
||||
typedef int (*Mouse_get_t)();
|
||||
|
||||
static Mouse_get_t Mouse_getX = (Mouse_get_t) 0x1385c;
|
||||
static Mouse_get_t Mouse_getY = (Mouse_get_t) 0x1386c;
|
||||
static Mouse_get_t Mouse_getX = (Mouse_get_t) 0x13480;
|
||||
static Mouse_get_t Mouse_getY = (Mouse_get_t) 0x13490;
|
||||
|
||||
// CommandServer
|
||||
|
||||
static uint32_t CommandServer_minecraft_property_offset = 0x18; // Minecraft *
|
||||
static uint32_t CommandServer_minecraft_property_offset = 0x14; // Minecraft *
|
||||
|
||||
// ServerLevel
|
||||
|
||||
#define SERVER_LEVEL_SIZE 0xb80
|
||||
|
||||
typedef unsigned char *(*ServerLevel_t)(unsigned char *server_level, unsigned char *storage, unsigned char *name, struct LevelSettings *settings, int param_4, unsigned char *dimension);
|
||||
static ServerLevel_t ServerLevel = (ServerLevel_t) 0x7692c;
|
||||
static ServerLevel_t ServerLevel = (ServerLevel_t) 0x9b6c4;
|
||||
|
||||
// Packet
|
||||
|
||||
@ -228,16 +187,16 @@ typedef void (*Packet_read_t)(unsigned char *packet, unsigned char *bit_stream);
|
||||
|
||||
// LoginPacket
|
||||
|
||||
static Packet_read_t LoginPacket_read = (Packet_read_t) 0x6e5f8;
|
||||
static void *LoginPacket_read_vtable_addr = (void *) 0x108dcc;
|
||||
static Packet_read_t LoginPacket_read = (Packet_read_t) 0x8fc4c;
|
||||
static void *LoginPacket_read_vtable_addr = (void *) 0x169e64;
|
||||
|
||||
static uint32_t LoginPacket_username_property_offset = 0xc; // RakString
|
||||
|
||||
// StartGamePacket
|
||||
|
||||
typedef void (*StartGamePacket_read_t)(unsigned char *packet, unsigned char *bit_stream);
|
||||
static StartGamePacket_read_t StartGamePacket_read = (StartGamePacket_read_t) 0x72c58;
|
||||
static void *StartGamePacket_read_vtable_addr = (void *) 0x109264;
|
||||
static StartGamePacket_read_t StartGamePacket_read = (StartGamePacket_read_t) 0x96e50;
|
||||
static void *StartGamePacket_read_vtable_addr = (void *) 0x16a2cc;
|
||||
|
||||
static uint32_t StartGamePacket_game_mode_property_offset = 0x14; // int32_t
|
||||
|
||||
@ -251,16 +210,9 @@ static uint32_t HitResult_type_property_offset = 0x0;
|
||||
|
||||
// Options
|
||||
|
||||
typedef void (*Options_initDefaultValue_t)(unsigned char *options);
|
||||
static Options_initDefaultValue_t Options_initDefaultValue = (Options_initDefaultValue_t) 0x18a54;
|
||||
|
||||
typedef bool (*Options_getBooleanValue_t)(unsigned char *options, unsigned char *option);
|
||||
static Options_getBooleanValue_t Options_getBooleanValue = (Options_getBooleanValue_t) 0x1cd74;
|
||||
|
||||
static uint32_t Options_options_file_property_offset = 0x10c; // OptionsFile
|
||||
static uint32_t Options_fancy_graphics_property_offset = 0x17; // unsigned char / bool
|
||||
static uint32_t Options_split_controls_property_offset = 0x105; // int32_t
|
||||
static uint32_t Options_game_difficulty_property_offset = 0xe8; // int32_t
|
||||
static uint32_t Options_split_controls_property_offset = 0x105; // unsigned char / bool
|
||||
static uint32_t Options_3d_anaglyph_property_offset = 0x15; // unsigned char / bool
|
||||
static uint32_t Options_ambient_occlusion_property_offset = 0x18; // unsigned char / bool
|
||||
static uint32_t Options_hide_gui_property_offset = 0xec; // unsigned char / bool
|
||||
@ -269,38 +221,25 @@ static uint32_t Options_render_distance_property_offset = 0x10; // int32_t
|
||||
static uint32_t Options_sound_property_offset = 0x4; // int32_t
|
||||
static uint32_t Options_debug_property_offset = 0xee; // unsigned char / bool
|
||||
static uint32_t Options_server_visible_property_offset = 0x104; // unsigned char / bool
|
||||
static uint32_t Options_username_property_offset = 0x100; // std::string
|
||||
|
||||
// OptionButton
|
||||
|
||||
typedef unsigned char *(*OptionButton_t)(unsigned char *option_button, unsigned char *option);
|
||||
static OptionButton_t OptionButton = (OptionButton_t) 0x1c968;
|
||||
|
||||
typedef void (*OptionButton_updateImage_t)(unsigned char *option_button, unsigned char *options);
|
||||
static OptionButton_updateImage_t OptionButton_updateImage = (OptionButton_updateImage_t) 0x1ca58;
|
||||
|
||||
// MouseBuildInput
|
||||
|
||||
typedef int32_t (*MouseBuildInput_tickBuild_t)(unsigned char *mouse_build_input, unsigned char *player, uint32_t *build_action_intention_return);
|
||||
static MouseBuildInput_tickBuild_t MouseBuildInput_tickBuild = (MouseBuildInput_tickBuild_t) 0x17c98;
|
||||
static void *MouseBuildInput_tickBuild_vtable_addr = (void *) 0x102564;
|
||||
static MouseBuildInput_tickBuild_t MouseBuildInput_tickBuild = (MouseBuildInput_tickBuild_t) 0x19118;
|
||||
static void *MouseBuildInput_tickBuild_vtable_addr = (void *) 0x16405c;
|
||||
|
||||
// Item
|
||||
|
||||
static uint32_t Item_id_property_offset = 0x4; // int32_t
|
||||
static uint32_t Item_is_stacked_by_data_property_offset = 0x19; // unsigned char / bool
|
||||
static uint32_t Item_category_property_offset = 0x10; // int32_t
|
||||
static uint32_t Item_max_damage_property_offset = 0x8; // int32_t
|
||||
|
||||
// TileItem
|
||||
|
||||
typedef unsigned char *(*TileItem_t)(unsigned char *tile_item, int32_t id);
|
||||
static TileItem_t TileItem = (TileItem_t) 0xce3a4;
|
||||
|
||||
// AuxDataTileItem
|
||||
|
||||
#define AUX_DATA_TILE_ITEM_SIZE 0x2c
|
||||
|
||||
static unsigned char *AuxDataTileItem_vtable = (unsigned char *) 0x114a58;
|
||||
static unsigned char *AuxDataTileItem_vtable = (unsigned char *) 0x175220;
|
||||
|
||||
static uint32_t AuxDataTileItem_icon_tile_property_offset = 0x28; // Tile *
|
||||
|
||||
@ -313,12 +252,12 @@ typedef struct {
|
||||
} ItemInstance;
|
||||
|
||||
typedef ItemInstance *(*ItemInstance_constructor_t)(ItemInstance *item_instance, unsigned char *item);
|
||||
static ItemInstance_constructor_t ItemInstance_constructor_item = (ItemInstance_constructor_t) 0x9992c;
|
||||
static ItemInstance_constructor_t ItemInstance_constructor_tile = (ItemInstance_constructor_t) 0x998e4;
|
||||
static ItemInstance_constructor_t ItemInstance_constructor_item = (ItemInstance_constructor_t) 0xdf40c;
|
||||
static ItemInstance_constructor_t ItemInstance_constructor_tile = (ItemInstance_constructor_t) 0xdf3c8;
|
||||
|
||||
typedef ItemInstance *(*ItemInstance_constructor_extra_t)(ItemInstance *item_instance, unsigned char *item, int32_t count, int32_t auxiliary);
|
||||
static ItemInstance_constructor_extra_t ItemInstance_constructor_tile_extra = (ItemInstance_constructor_extra_t) 0x99918;
|
||||
static ItemInstance_constructor_extra_t ItemInstance_constructor_item_extra = (ItemInstance_constructor_extra_t) 0x99960;
|
||||
static ItemInstance_constructor_extra_t ItemInstance_constructor_tile_extra = (ItemInstance_constructor_extra_t) 0xdf3fc;
|
||||
static ItemInstance_constructor_extra_t ItemInstance_constructor_item_extra = (ItemInstance_constructor_extra_t) 0xdf440;
|
||||
|
||||
// Entity
|
||||
|
||||
@ -334,10 +273,8 @@ static uint32_t Entity_old_yaw_property_offset = 0x48; // float
|
||||
// Mob
|
||||
|
||||
typedef void (*Mob_actuallyHurt_t)(unsigned char *entity, int32_t damage);
|
||||
static Mob_actuallyHurt_t Mob_actuallyHurt = (Mob_actuallyHurt_t) 0x7f11c;
|
||||
static uint32_t Mob_actuallyHurt_vtable_offset = 0x16c;
|
||||
|
||||
typedef float (*Mob_getWalkingSpeedModifier_t)(unsigned char *entity);
|
||||
static Mob_actuallyHurt_t Mob_actuallyHurt = (Mob_actuallyHurt_t) 0xab2d4;
|
||||
static uint32_t Mob_actuallyHurt_vtable_offset = 0x1a0;
|
||||
|
||||
typedef void (*Mob_die_t)(unsigned char *entity, unsigned char *cause);
|
||||
static uint32_t Mob_die_vtable_offset = 0x130;
|
||||
@ -347,48 +284,44 @@ static uint32_t Mob_health_property_offset = 0xec; // int32_t
|
||||
// Player
|
||||
|
||||
typedef int (*Player_isUsingItem_t)(unsigned char *player);
|
||||
static Player_isUsingItem_t Player_isUsingItem = (Player_isUsingItem_t) 0x8f15c;
|
||||
static Player_isUsingItem_t Player_isUsingItem = (Player_isUsingItem_t) 0xceb24;
|
||||
|
||||
typedef void (*Player_drop_t)(unsigned char *player, ItemInstance *item_instance, bool is_death);
|
||||
static uint32_t Player_drop_vtable_offset = 0x208;
|
||||
static uint32_t Player_drop_vtable_offset = 0x1f8;
|
||||
|
||||
static Mob_getWalkingSpeedModifier_t Player_getWalkingSpeedModifier = (Mob_getWalkingSpeedModifier_t) 0x8ea0c;
|
||||
|
||||
static uint32_t Player_username_property_offset = 0xbf4; // std::string
|
||||
static uint32_t Player_inventory_property_offset = 0xbe0; // Inventory *
|
||||
static uint32_t Player_username_property_offset = 0xbec; // std::string
|
||||
static uint32_t Player_inventory_property_offset = 0xbd8; // Inventory *
|
||||
|
||||
// LocalPlayer
|
||||
|
||||
static Mob_actuallyHurt_t LocalPlayer_actuallyHurt = (Mob_actuallyHurt_t) 0x44010;
|
||||
static void *LocalPlayer_actuallyHurt_vtable_addr = (void *) 0x10639c;
|
||||
static Mob_actuallyHurt_t LocalPlayer_actuallyHurt = (Mob_actuallyHurt_t) 0x59f48;
|
||||
static void *LocalPlayer_actuallyHurt_vtable_addr = (void *) 0x1676d0;
|
||||
|
||||
static void *LocalPlayer_openTextEdit_vtable_addr = (void *) 0x106460;
|
||||
static Mob_die_t LocalPlayer_die = (Mob_die_t) 0x5b208;
|
||||
static void *LocalPlayer_die_vtable_addr = (void *) 0x167660;
|
||||
|
||||
static Mob_die_t LocalPlayer_die = (Mob_die_t) 0x45078;
|
||||
static void *LocalPlayer_die_vtable_addr = (void *) 0x106360;
|
||||
|
||||
static uint32_t LocalPlayer_minecraft_property_offset = 0xc90; // Minecraft *
|
||||
static uint32_t LocalPlayer_minecraft_property_offset = 0xc58; // Minecraft *
|
||||
|
||||
// ServerPlayer
|
||||
|
||||
static void *ServerPlayer_actuallyHurt_vtable_addr = (void *) 0x109fa4;
|
||||
static void *ServerPlayer_actuallyHurt_vtable_addr = (void *) 0x16b020;
|
||||
|
||||
static uint32_t ServerPlayer_minecraft_property_offset = 0xc8c; // Minecraft *
|
||||
static uint32_t ServerPlayer_guid_property_offset = 0xc08; // RakNetGUID
|
||||
static uint32_t ServerPlayer_minecraft_property_offset = 0xc54; // Minecraft *
|
||||
static uint32_t ServerPlayer_guid_property_offset = 0xc00; // RakNetGUID
|
||||
|
||||
// Gui
|
||||
|
||||
typedef void (*Gui_tick_t)(unsigned char *gui);
|
||||
static Gui_tick_t Gui_tick = (Gui_tick_t) 0x27778;
|
||||
static Gui_tick_t Gui_tick = (Gui_tick_t) 0x2b0b0;
|
||||
|
||||
typedef void (*Gui_handleClick_t)(unsigned char *gui, int32_t param_2, int32_t param_3, int32_t param_4);
|
||||
static Gui_handleClick_t Gui_handleClick = (Gui_handleClick_t) 0x2599c;
|
||||
static Gui_handleClick_t Gui_handleClick = (Gui_handleClick_t) 0x2a8f0;
|
||||
|
||||
typedef void (*Gui_renderOnSelectItemNameText_t)(unsigned char *gui, int32_t param_1, unsigned char *font, int32_t param_2);
|
||||
static Gui_renderOnSelectItemNameText_t Gui_renderOnSelectItemNameText = (Gui_renderOnSelectItemNameText_t) 0x26aec;
|
||||
static Gui_renderOnSelectItemNameText_t Gui_renderOnSelectItemNameText = (Gui_renderOnSelectItemNameText_t) 0x2bcb8;
|
||||
|
||||
typedef void (*Gui_renderChatMessages_t)(unsigned char *gui, int32_t y_offset, uint32_t max_messages, bool disable_fading, unsigned char *font);
|
||||
static Gui_renderChatMessages_t Gui_renderChatMessages = (Gui_renderChatMessages_t) 0x273d8;
|
||||
static Gui_renderChatMessages_t Gui_renderChatMessages = (Gui_renderChatMessages_t) 0x2bed8;
|
||||
|
||||
static uint32_t Gui_minecraft_property_offset = 0x9f4; // Minecraft *
|
||||
static uint32_t Gui_selected_item_text_timer_property_offset = 0x9fc; // float
|
||||
@ -396,88 +329,65 @@ static uint32_t Gui_selected_item_text_timer_property_offset = 0x9fc; // float
|
||||
// Textures
|
||||
|
||||
typedef void (*Textures_tick_t)(unsigned char *textures, bool param_1);
|
||||
static Textures_tick_t Textures_tick = (Textures_tick_t) 0x531c4;
|
||||
static Textures_tick_t Textures_tick = (Textures_tick_t) 0x6bee4;
|
||||
|
||||
// GameMode Constructors
|
||||
|
||||
#define CREATOR_MODE_SIZE 0x1c
|
||||
static void *CreatorMode = (void *) 0x1a044;
|
||||
static void *CreatorMode = (void *) 0x1d254;
|
||||
#define SURVIVAL_MODE_SIZE 0x24
|
||||
static void *SurvivalMode = (void *) 0x1b7d8;
|
||||
static void *SurvivalMode = (void *) 0x1fecc;
|
||||
|
||||
// LevelData
|
||||
|
||||
typedef uint32_t (*LevelData_getSpawnMobs_t)(unsigned char *level_data);
|
||||
static LevelData_getSpawnMobs_t LevelData_getSpawnMobs = (LevelData_getSpawnMobs_t) 0xbabec;
|
||||
static LevelData_getSpawnMobs_t LevelData_getSpawnMobs = (LevelData_getSpawnMobs_t) 0x1171e0;
|
||||
|
||||
// Level
|
||||
|
||||
typedef void (*Level_saveLevelData_t)(unsigned char *level);
|
||||
static Level_saveLevelData_t Level_saveLevelData = (Level_saveLevelData_t) 0xa2e94;
|
||||
static Level_saveLevelData_t Level_saveLevelData = (Level_saveLevelData_t) 0xeef98;
|
||||
|
||||
typedef void (*Level_setTileAndData_t)(unsigned char *level, int32_t x, int32_t y, int32_t z, int32_t id, int32_t data);
|
||||
static Level_setTileAndData_t Level_setTileAndData = (Level_setTileAndData_t) 0xa38b4;
|
||||
static Level_setTileAndData_t Level_setTileAndData = (Level_setTileAndData_t) 0xefa8c;
|
||||
|
||||
static uint32_t Level_players_property_offset = 0x60; // std::vector<ServerPlayer *>
|
||||
|
||||
// LevelRenderer
|
||||
|
||||
typedef void (*LevelRenderer_render_t)(unsigned char *level_renderer, unsigned char *mob, int param_1, float delta);
|
||||
static LevelRenderer_render_t LevelRenderer_render = (LevelRenderer_render_t) 0x4f710;
|
||||
static LevelRenderer_render_t LevelRenderer_render = (LevelRenderer_render_t) 0x67604;
|
||||
|
||||
typedef void (*LevelRenderer_renderDebug_t)(unsigned char *level_renderer, struct AABB *aabb, float delta);
|
||||
static LevelRenderer_renderDebug_t LevelRenderer_renderDebug = (LevelRenderer_renderDebug_t) 0x4d310;
|
||||
static LevelRenderer_renderDebug_t LevelRenderer_renderDebug = (LevelRenderer_renderDebug_t) 0x65c34;
|
||||
|
||||
static uint32_t LevelRenderer_minecraft_property_offset = 0x4; // Minecraft *
|
||||
|
||||
// PerfRenderer
|
||||
|
||||
typedef void (*PerfRenderer_debugFpsMeterKeyPress_t)(unsigned char *perf_renderer, int key);
|
||||
static PerfRenderer_debugFpsMeterKeyPress_t PerfRenderer_debugFpsMeterKeyPress = (PerfRenderer_debugFpsMeterKeyPress_t) 0x79118;
|
||||
|
||||
// TextEditScreen
|
||||
|
||||
#define TEXT_EDIT_SCREEN_SIZE 0xa9
|
||||
|
||||
typedef unsigned char *(*TextEditScreen_t)(unsigned char *text_edit_screen, unsigned char *sign);
|
||||
static TextEditScreen_t TextEditScreen = (TextEditScreen_t) 0x3a840;
|
||||
|
||||
static void *TextEditScreen_updateEvents_vtable_addr = (void *) 0x10531c;
|
||||
|
||||
// ProgressScreen
|
||||
|
||||
#define PROGRESS_SCREEN_SIZE 0x4c
|
||||
#define PROGRESS_SCREEN_SIZE 0x40
|
||||
|
||||
typedef void *(*ProgressScreen_t)(unsigned char *obj);
|
||||
static ProgressScreen_t ProgressScreen = (ProgressScreen_t) 0x37044;
|
||||
static ProgressScreen_t ProgressScreen = (ProgressScreen_t) 0x42a08;
|
||||
|
||||
// OptionsScreen
|
||||
|
||||
static void *OptionsScreen_handleBackEvent_vtable_addr = (void *) 0x10499c;
|
||||
static void *OptionsScreen_handleBackEvent_vtable_addr = (void *) 0x165fb8;
|
||||
|
||||
// FurnaceScreen
|
||||
|
||||
typedef int32_t (*FurnaceScreen_handleAddItem_t)(unsigned char *furnace_screen, int32_t slot, ItemInstance const *item);
|
||||
static FurnaceScreen_handleAddItem_t FurnaceScreen_handleAddItem = (FurnaceScreen_handleAddItem_t) 0x327a0;
|
||||
static FurnaceScreen_handleAddItem_t FurnaceScreen_handleAddItem = (FurnaceScreen_handleAddItem_t) 0x3c534;
|
||||
|
||||
static uint32_t FurnaceScreen_tile_entity_property_offset = 0x1d0; // FurnaceTileEntity *
|
||||
static uint32_t FurnaceScreen_tile_entity_property_offset = 0x1b0; // FurnaceTileEntity *
|
||||
|
||||
// FurnaceTileEntity
|
||||
|
||||
typedef ItemInstance *(*FurnaceTileEntity_getItem_t)(unsigned char *furnace_tile_entity, int32_t slot);
|
||||
static uint32_t FurnaceTileEntity_getItem_vtable_offset = 0x2c;
|
||||
static uint32_t FurnaceTileEntity_getItem_vtable_offset = 0x28;
|
||||
|
||||
// Screen
|
||||
|
||||
typedef void (*Screen_updateEvents_t)(unsigned char *screen);
|
||||
static Screen_updateEvents_t Screen_updateEvents = (Screen_updateEvents_t) 0x28eb8;
|
||||
|
||||
typedef void (*Screen_keyboardNewChar_t)(unsigned char *screen, char key);
|
||||
static uint32_t Screen_keyboardNewChar_vtable_offset = 0x70;
|
||||
|
||||
typedef void (*Screen_keyPressed_t)(unsigned char *screen, int32_t key);
|
||||
static uint32_t Screen_keyPressed_vtable_offset = 0x6c;
|
||||
|
||||
typedef void (*Screen_init_t)(unsigned char *screen);
|
||||
|
||||
typedef void (*Screen_tick_t)(unsigned char *screen);
|
||||
@ -486,52 +396,52 @@ typedef int32_t (*Screen_handleBackEvent_t)(unsigned char *screen, bool param_1)
|
||||
|
||||
static uint32_t Screen_minecraft_property_offset = 0x14; // Minecraft *
|
||||
static uint32_t Screen_rendered_buttons_property_offset = 0x18; // std::vector<Button *>
|
||||
static uint32_t Screen_selectable_buttons_property_offset = 0x30; // std::vector<Button *>
|
||||
static uint32_t Screen_selectable_buttons_property_offset = 0x24; // std::vector<Button *>
|
||||
|
||||
// StartMenuScreen
|
||||
// DemoChooseLevelScreen
|
||||
|
||||
static Screen_init_t StartMenuScreen_init = (Screen_init_t) 0x39cc0;
|
||||
static void *StartMenuScreen_init_vtable_addr = (void *) 0x105194;
|
||||
#define DEMO_LEVEL_CHOOSE_SCREEN_SIZE 0x49
|
||||
|
||||
static uint32_t StartMenuScreen_options_button_property_offset = 0x98; // Button
|
||||
typedef unsigned char *(*DemoChooseLevelScreen_t)(unsigned char *demo_choose_level_screen);
|
||||
static DemoChooseLevelScreen_t DemoChooseLevelScreen = (DemoChooseLevelScreen_t) 0x3a470;
|
||||
|
||||
// PauseScreen
|
||||
|
||||
static Screen_init_t PauseScreen_init = (Screen_init_t) 0x36810;
|
||||
static void *PauseScreen_init_vtable_addr = (void *) 0x104b2c;
|
||||
static Screen_init_t PauseScreen_init = (Screen_init_t) 0x41ba8;
|
||||
static void *PauseScreen_init_vtable_addr = (void *) 0x16602c;
|
||||
|
||||
typedef void (*PauseScreen_updateServerVisibilityText_t)(unsigned char *screen);
|
||||
static PauseScreen_updateServerVisibilityText_t PauseScreen_updateServerVisibilityText = (PauseScreen_updateServerVisibilityText_t) 0x366b8;
|
||||
static PauseScreen_updateServerVisibilityText_t PauseScreen_updateServerVisibilityText = (PauseScreen_updateServerVisibilityText_t) 0x41a08;
|
||||
|
||||
static uint32_t PauseScreen_server_visibility_button_property_offset = 0x60; // Button *
|
||||
static uint32_t PauseScreen_server_visibility_button_property_offset = 0x54; // Button *
|
||||
|
||||
// Touch::IngameBlockSelectionScreen
|
||||
|
||||
#define TOUCH_INGAME_BLOCK_SELECTION_SCREEN_SIZE 0x16c
|
||||
#define TOUCH_INGAME_BLOCK_SELECTION_SCREEN_SIZE 0x128
|
||||
|
||||
typedef unsigned char *(*Touch_IngameBlockSelectionScreen_t)(unsigned char *screen);
|
||||
static Touch_IngameBlockSelectionScreen_t Touch_IngameBlockSelectionScreen = (Touch_IngameBlockSelectionScreen_t) 0x3afbc;
|
||||
static Touch_IngameBlockSelectionScreen_t Touch_IngameBlockSelectionScreen = (Touch_IngameBlockSelectionScreen_t) 0x4c640;
|
||||
|
||||
// SelectWorldScreen
|
||||
|
||||
static Screen_tick_t SelectWorldScreen_tick = (Screen_tick_t) 0x38a2c;
|
||||
static void *SelectWorldScreen_tick_vtable_addr = (void *) 0x104f78;
|
||||
static Screen_tick_t SelectWorldScreen_tick = (Screen_tick_t) 0x46228;
|
||||
static void *SelectWorldScreen_tick_vtable_addr = (void *) 0x16642c;
|
||||
|
||||
static uint32_t SelectWorldScreen_should_create_world_property_offset = 0xfc; // bool
|
||||
static uint32_t SelectWorldScreen_world_created_property_offset = 0xf9; // bool
|
||||
static uint32_t SelectWorldScreen_should_create_world_property_offset = 0xe0; // bool
|
||||
static uint32_t SelectWorldScreen_world_created_property_offset = 0xdd; // bool
|
||||
|
||||
// Touch::SelectWorldScreen
|
||||
|
||||
static Screen_tick_t Touch_SelectWorldScreen_tick = (Screen_tick_t) 0x3d96c;
|
||||
static void *Touch_SelectWorldScreen_tick_vtable_addr = (void *) 0x105780;
|
||||
static Screen_tick_t Touch_SelectWorldScreen_tick = (Screen_tick_t) 0x50cb0;
|
||||
static void *Touch_SelectWorldScreen_tick_vtable_addr = (void *) 0x166b64;
|
||||
|
||||
static uint32_t Touch_SelectWorldScreen_should_create_world_property_offset = 0x154; // bool
|
||||
static uint32_t Touch_SelectWorldScreen_world_created_property_offset = 0x151; // bool
|
||||
static uint32_t Touch_SelectWorldScreen_should_create_world_property_offset = 0x134; // bool
|
||||
static uint32_t Touch_SelectWorldScreen_world_created_property_offset = 0x131; // bool
|
||||
|
||||
// FillingContainer
|
||||
|
||||
typedef int32_t (*FillingContainer_addItem_t)(unsigned char *filling_container, ItemInstance *item_instance);
|
||||
static FillingContainer_addItem_t FillingContainer_addItem = (FillingContainer_addItem_t) 0x92aa0;
|
||||
static FillingContainer_addItem_t FillingContainer_addItem = (FillingContainer_addItem_t) 0xd563c;
|
||||
|
||||
typedef ItemInstance *(*FillingContainer_getItem_t)(unsigned char *filling_container, int32_t slot);
|
||||
static uint32_t FillingContainer_getItem_vtable_offset = 0x8;
|
||||
@ -540,13 +450,13 @@ typedef void (*FillingContainer_setItem_t)(unsigned char *filling_container, int
|
||||
static uint32_t FillingContainer_setItem_vtable_offset = 0xc;
|
||||
|
||||
typedef void (*FillingContainer_clearSlot_t)(unsigned char *filling_container, int32_t slot);
|
||||
static FillingContainer_clearSlot_t FillingContainer_clearSlot = (FillingContainer_clearSlot_t) 0x922f8;
|
||||
static FillingContainer_clearSlot_t FillingContainer_clearSlot = (FillingContainer_clearSlot_t) 0xd4fd4;
|
||||
|
||||
typedef void (*FillingContainer_release_t)(unsigned char *filling_container, int32_t slot);
|
||||
static FillingContainer_release_t FillingContainer_release = (FillingContainer_release_t) 0x92058;
|
||||
static FillingContainer_release_t FillingContainer_release = (FillingContainer_release_t) 0xd4d58;
|
||||
|
||||
typedef void (*FillingContainer_compressLinkedSlotList_t)(unsigned char *filling_container, int32_t slot);
|
||||
static FillingContainer_compressLinkedSlotList_t FillingContainer_compressLinkedSlotList = (FillingContainer_compressLinkedSlotList_t) 0x92280;
|
||||
static FillingContainer_compressLinkedSlotList_t FillingContainer_compressLinkedSlotList = (FillingContainer_compressLinkedSlotList_t) 0xd4f58;
|
||||
|
||||
static uint32_t FillingContainer_linked_slots_property_offset = 0xc; // int32_t[]
|
||||
static uint32_t FillingContainer_linked_slots_length_property_offset = 0x14; // int32_t
|
||||
@ -554,10 +464,10 @@ static uint32_t FillingContainer_linked_slots_length_property_offset = 0x14; //
|
||||
// RakNet::RakString
|
||||
|
||||
typedef unsigned char *(*RakNet_RakString_t)(unsigned char *rak_string, const char *format, ...);
|
||||
static RakNet_RakString_t RakNet_RakString = (RakNet_RakString_t) 0xea5cc;
|
||||
static RakNet_RakString_t RakNet_RakString = (RakNet_RakString_t) 0x151f10;
|
||||
|
||||
typedef void (*RakNet_RakString_Assign_t)(unsigned char *rak_string, const char *str);
|
||||
static RakNet_RakString_Assign_t RakNet_RakString_Assign = (RakNet_RakString_Assign_t) 0xe9e34;
|
||||
static RakNet_RakString_Assign_t RakNet_RakString_Assign = (RakNet_RakString_Assign_t) 0x15189c;
|
||||
|
||||
static uint32_t RakNet_RakString_sharedString_property_offset = 0x0; // RakNet::RakString::SharedString *
|
||||
|
||||
@ -574,12 +484,12 @@ typedef uint32_t (*RakNetInstance_isServer_t)(unsigned char *rak_net_instance);
|
||||
static uint32_t RakNetInstance_isServer_vtable_offset = 0x48;
|
||||
|
||||
typedef void (*RakNetInstance_pingForHosts_t)(unsigned char *rak_net_instance, int32_t base_port);
|
||||
static RakNetInstance_pingForHosts_t RakNetInstance_pingForHosts = (RakNetInstance_pingForHosts_t) 0x73538;
|
||||
static RakNetInstance_pingForHosts_t RakNetInstance_pingForHosts = (RakNetInstance_pingForHosts_t) 0x97da8;
|
||||
static uint32_t RakNetInstance_pingForHosts_vtable_offset = 0x14;
|
||||
static void *RakNetInstance_pingForHosts_vtable_addr = (void *) 0x109afc;
|
||||
static void *RakNetInstance_pingForHosts_vtable_addr = (void *) 0x16ab4c;
|
||||
|
||||
typedef unsigned char *(*RakNetInstance_t)(unsigned char *rak_net_instance);
|
||||
static RakNetInstance_t RakNetInstance = (RakNetInstance_t) 0x73b20;
|
||||
static RakNetInstance_t RakNetInstance = (RakNetInstance_t) 0x98318;
|
||||
|
||||
static uint32_t RakNetInstance_peer_property_offset = 0x4; // RakNet::RakPeer *
|
||||
static uint32_t RakNetInstance_pinging_for_hosts_property_offset = 0x24; // unsigned char
|
||||
@ -601,45 +511,48 @@ typedef enum {
|
||||
STARTUP_OTHER_FAILURE
|
||||
} RakNet_StartupResult;
|
||||
typedef RakNet_StartupResult (*RakNet_RakPeer_Startup_t)(unsigned char *rak_peer, unsigned short maxConnections, unsigned char *socketDescriptors, uint32_t socketDescriptorCount, int32_t threadPriority);
|
||||
static RakNet_RakPeer_Startup_t RakNet_RakPeer_Startup = (RakNet_RakPeer_Startup_t) 0xe1654;
|
||||
static void *RakNet_RakPeer_Startup_vtable_addr = (void *) 0x135438;
|
||||
static RakNet_RakPeer_Startup_t RakNet_RakPeer_Startup = (RakNet_RakPeer_Startup_t) 0x14a5e4;
|
||||
static void *RakNet_RakPeer_Startup_vtable_addr = (void *) 0x176998;
|
||||
|
||||
typedef struct RakNet_SystemAddress (*RakNet_RakPeer_GetSystemAddressFromGuid_t)(unsigned char *rak_peer, struct RakNet_RakNetGUID guid);
|
||||
static uint32_t RakNet_RakPeer_GetSystemAddressFromGuid_vtable_offset = 0xd0;
|
||||
|
||||
typedef bool (*RakNet_RakPeer_IsBanned_t)(unsigned char *rak_peer, const char *ip);
|
||||
static RakNet_RakPeer_IsBanned_t RakNet_RakPeer_IsBanned = (RakNet_RakPeer_IsBanned_t) 0xda3b4;
|
||||
static RakNet_RakPeer_IsBanned_t RakNet_RakPeer_IsBanned = (RakNet_RakPeer_IsBanned_t) 0x144860;
|
||||
|
||||
typedef bool (*RakNet_RakPeer_Ping_t)(unsigned char *rak_peer, const char *host, unsigned short remotePort, bool onlyReplyOnAcceptingConnections, uint32_t connectionSocketIndex);
|
||||
static RakNet_RakPeer_Ping_t RakNet_RakPeer_Ping = (RakNet_RakPeer_Ping_t) 0xd9c2c;
|
||||
static RakNet_RakPeer_Ping_t RakNet_RakPeer_Ping = (RakNet_RakPeer_Ping_t) 0x1464f0;
|
||||
|
||||
// RakNet::SystemAddress
|
||||
|
||||
typedef char *(*RakNet_SystemAddress_ToString_t)(struct RakNet_SystemAddress *system_address, bool print_delimiter, char delimiter);
|
||||
static RakNet_SystemAddress_ToString_t RakNet_SystemAddress_ToString = (RakNet_SystemAddress_ToString_t) 0xd6198;
|
||||
static RakNet_SystemAddress_ToString_t RakNet_SystemAddress_ToString = (RakNet_SystemAddress_ToString_t) 0x143754;
|
||||
|
||||
// ServerSideNetworkHandler
|
||||
|
||||
typedef void (*ServerSideNetworkHandler_onDisconnect_t)(unsigned char *server_side_network_handler, struct RakNet_RakNetGUID *guid);
|
||||
static ServerSideNetworkHandler_onDisconnect_t ServerSideNetworkHandler_onDisconnect = (ServerSideNetworkHandler_onDisconnect_t) 0x75164;
|
||||
static void *ServerSideNetworkHandler_onDisconnect_vtable_addr = (void *) 0x109bb0;
|
||||
|
||||
typedef unsigned char *(*ServerSideNetworkHandler_getPlayer_t)(unsigned char *server_side_network_handler, struct RakNet_RakNetGUID *guid);
|
||||
static ServerSideNetworkHandler_getPlayer_t ServerSideNetworkHandler_getPlayer = (ServerSideNetworkHandler_getPlayer_t) 0x75464;
|
||||
static ServerSideNetworkHandler_onDisconnect_t ServerSideNetworkHandler_onDisconnect = (ServerSideNetworkHandler_onDisconnect_t) 0x99b78;
|
||||
static void *ServerSideNetworkHandler_onDisconnect_vtable_addr = (void *) 0x16ac00;
|
||||
|
||||
typedef unsigned char *(*ServerSideNetworkHandler_popPendingPlayer_t)(unsigned char *server_side_network_handler, struct RakNet_RakNetGUID *guid);
|
||||
static ServerSideNetworkHandler_popPendingPlayer_t ServerSideNetworkHandler_popPendingPlayer = (ServerSideNetworkHandler_popPendingPlayer_t) 0x75db4;
|
||||
static ServerSideNetworkHandler_popPendingPlayer_t ServerSideNetworkHandler_popPendingPlayer = (ServerSideNetworkHandler_popPendingPlayer_t) 0x99ee8;
|
||||
|
||||
typedef void (*ServerSideNetworkHandler_handle_t)(unsigned char *server_side_network_handler, struct RakNet_RakNetGUID *rak_net_guid, unsigned char *packet);
|
||||
|
||||
static void *ServerSideNetworkHandler_handle_ChatPacket_vtable_addr = (void *) 0x109c60;
|
||||
static void *ServerSideNetworkHandler_handle_ChatPacket_vtable_addr = (void *) 0x16aca8;
|
||||
|
||||
static uint32_t ServerSideNetworkHandler_level_property_offset = 0xc; // Level *
|
||||
static uint32_t ServerSideNetworkHandler_minecraft_property_offset = 0x8; // Minecraft *
|
||||
|
||||
// NetEventCallback
|
||||
|
||||
typedef unsigned char *(*NetEventCallback_findPlayer_t)(unsigned char *net_event_callback, unsigned char *level, struct RakNet_RakNetGUID *guid);
|
||||
static NetEventCallback_findPlayer_t NetEventCallback_findPlayer = (NetEventCallback_findPlayer_t) 0x91440;
|
||||
|
||||
// Inventory
|
||||
|
||||
typedef void (*Inventory_selectSlot_t)(unsigned char *inventory, int32_t slot);
|
||||
static Inventory_selectSlot_t Inventory_selectSlot = (Inventory_selectSlot_t) 0x8d13c;
|
||||
static Inventory_selectSlot_t Inventory_selectSlot = (Inventory_selectSlot_t) 0xccefc;
|
||||
|
||||
static uint32_t Inventory_selectedSlot_property_offset = 0x28; // int32_t
|
||||
|
||||
@ -648,15 +561,15 @@ static uint32_t Inventory_selectedSlot_property_offset = 0x28; // int32_t
|
||||
#define TRIPOD_CAMERA_RENDERER_SIZE 0x178
|
||||
|
||||
typedef unsigned char *(*TripodCameraRenderer_t)(unsigned char *renderer);
|
||||
static TripodCameraRenderer_t TripodCameraRenderer = (TripodCameraRenderer_t) 0x6583c;
|
||||
static TripodCameraRenderer_t TripodCameraRenderer = (TripodCameraRenderer_t) 0x81260;
|
||||
|
||||
// EntityRenderDispatcher
|
||||
|
||||
typedef unsigned char *(*EntityRenderDispatcher_t)(unsigned char *dispatcher);
|
||||
static EntityRenderDispatcher_t EntityRenderDispatcher = (EntityRenderDispatcher_t) 0x6096c;
|
||||
static EntityRenderDispatcher_t EntityRenderDispatcher = (EntityRenderDispatcher_t) 0x7a990;
|
||||
|
||||
typedef void (*EntityRenderDispatcher_assign_t)(unsigned char *dispatcher, unsigned char entity_id, unsigned char *renderer);
|
||||
static EntityRenderDispatcher_assign_t EntityRenderDispatcher_assign = (EntityRenderDispatcher_assign_t) 0x6094c;
|
||||
static EntityRenderDispatcher_assign_t EntityRenderDispatcher_assign = (EntityRenderDispatcher_assign_t) 0x7a968;
|
||||
|
||||
// TileEntity
|
||||
|
||||
@ -665,35 +578,35 @@ static uint32_t TileEntity_id_property_offset = 0x18; // int32_t
|
||||
// ItemRenderer
|
||||
|
||||
typedef void (*ItemRenderer_renderGuiItem_one_t)(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, bool param_3);
|
||||
static ItemRenderer_renderGuiItem_one_t ItemRenderer_renderGuiItem_one = (ItemRenderer_renderGuiItem_one_t) 0x63e58;
|
||||
static ItemRenderer_renderGuiItem_one_t ItemRenderer_renderGuiItem_one = (ItemRenderer_renderGuiItem_one_t) 0x7f8bc;
|
||||
|
||||
typedef void (*ItemRenderer_renderGuiItem_two_t)(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, float param_3, float param_4, bool param_5);
|
||||
static ItemRenderer_renderGuiItem_two_t ItemRenderer_renderGuiItem_two = (ItemRenderer_renderGuiItem_two_t) 0x63be0;
|
||||
static ItemRenderer_renderGuiItem_two_t ItemRenderer_renderGuiItem_two = (ItemRenderer_renderGuiItem_two_t) 0x7f5d8;
|
||||
|
||||
typedef void (*ItemRenderer_renderGuiItemCorrect_t)(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, int32_t param_1, int32_t param_2);
|
||||
static ItemRenderer_renderGuiItemCorrect_t ItemRenderer_renderGuiItemCorrect = (ItemRenderer_renderGuiItemCorrect_t) 0x639a0;
|
||||
static ItemRenderer_renderGuiItemCorrect_t ItemRenderer_renderGuiItemCorrect = (ItemRenderer_renderGuiItemCorrect_t) 0x7f260;
|
||||
|
||||
// Tesselator
|
||||
|
||||
typedef void (*Tesselator_begin_t)(unsigned char *tesselator, int32_t mode);
|
||||
static Tesselator_begin_t Tesselator_begin = (Tesselator_begin_t) 0x529d4;
|
||||
typedef void (*Tesselator_begin_t)(unsigned char *tesselator);
|
||||
static Tesselator_begin_t Tesselator_begin = (Tesselator_begin_t) 0x6b6f4;
|
||||
|
||||
typedef void (*Tesselator_colorABGR_t)(unsigned char *tesselator, int32_t color);
|
||||
static Tesselator_colorABGR_t Tesselator_colorABGR = (Tesselator_colorABGR_t) 0x52b54;
|
||||
static Tesselator_colorABGR_t Tesselator_colorABGR = (Tesselator_colorABGR_t) 0x6b878;
|
||||
|
||||
typedef void (*Tesselator_color_t)(unsigned char *tesselator, int32_t r, int32_t g, int32_t b, int32_t a);
|
||||
static Tesselator_color_t Tesselator_color = (Tesselator_color_t) 0x52a48;
|
||||
static Tesselator_color_t Tesselator_color = (Tesselator_color_t) 0x6b764;
|
||||
|
||||
// SoundEngine
|
||||
|
||||
typedef void (*SoundEngine_init_t)(unsigned char *sound_engine, unsigned char *minecraft, unsigned char *options);
|
||||
static SoundEngine_init_t SoundEngine_init = (SoundEngine_init_t) 0x67760;
|
||||
static SoundEngine_init_t SoundEngine_init = (SoundEngine_init_t) 0x835a4;
|
||||
|
||||
typedef void (*SoundEngine_enable_t)(unsigned char *sound_engine, bool state);
|
||||
static SoundEngine_enable_t SoundEngine_enable = (SoundEngine_enable_t) 0x6776c;
|
||||
static SoundEngine_enable_t SoundEngine_enable = (SoundEngine_enable_t) 0x835b0;
|
||||
|
||||
typedef void (*SoundEngine_update_t)(unsigned char *sound_engine, unsigned char *listener_mob, float listener_angle);
|
||||
static SoundEngine_update_t SoundEngine_update = (SoundEngine_update_t) 0x67778;
|
||||
static SoundEngine_update_t SoundEngine_update = (SoundEngine_update_t) 0x835bc;
|
||||
|
||||
static uint32_t SoundEngine_minecraft_property_offset = 0xa08; // Minecraft *
|
||||
static uint32_t SoundEngine_options_property_offset = 0x4; // Options *
|
||||
@ -702,7 +615,6 @@ static uint32_t SoundEngine_options_property_offset = 0x4; // Options *
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Structures
|
||||
|
||||
@ -725,15 +637,15 @@ static uint32_t Tile_setDescriptionId_vtable_offset = 0xe0;
|
||||
// AppPlatform
|
||||
|
||||
typedef void (*AppPlatform_saveScreenshot_t)(unsigned char *app_platform, std::string const& path, int32_t width, int32_t height);
|
||||
static void *AppPlatform_linux_saveScreenshot_vtable_addr = (void *) 0x102160;
|
||||
static void *AppPlatform_linux_saveScreenshot_vtable_addr = (void *) 0x163b70;
|
||||
|
||||
typedef AppPlatform_readAssetFile_return_value (*AppPlatform_readAssetFile_t)(unsigned char *app_platform, std::string const& path);
|
||||
static AppPlatform_readAssetFile_t AppPlatform_readAssetFile = (AppPlatform_readAssetFile_t) 0x12b10;
|
||||
static AppPlatform_readAssetFile_t AppPlatform_readAssetFile = (AppPlatform_readAssetFile_t) 0x12564;
|
||||
|
||||
// Minecraft
|
||||
|
||||
typedef void (*Minecraft_selectLevel_t)(unsigned char *minecraft, std::string const& level_dir, std::string const& level_name, LevelSettings const& settings);
|
||||
static Minecraft_selectLevel_t Minecraft_selectLevel = (Minecraft_selectLevel_t) 0x16f38;
|
||||
static Minecraft_selectLevel_t Minecraft_selectLevel = (Minecraft_selectLevel_t) 0x178fc;
|
||||
|
||||
// ExternalFileLevelStorageSource
|
||||
|
||||
@ -743,71 +655,44 @@ static uint32_t ExternalFileLevelStorageSource_deleteLevel_vtable_offset = 0x20;
|
||||
// CommandServer
|
||||
|
||||
typedef std::string (*CommandServer_parse_t)(unsigned char *command_server, struct ConnectedClient &client, std::string const& command);
|
||||
static CommandServer_parse_t CommandServer_parse = (CommandServer_parse_t) 0x6aa8c;
|
||||
static CommandServer_parse_t CommandServer_parse = (CommandServer_parse_t) 0x8b524;
|
||||
|
||||
// Level
|
||||
|
||||
typedef void (*Level_addParticle_t)(unsigned char *level, std::string const& particle, float x, float y, float z, float deltaX, float deltaY, float deltaZ, int count);
|
||||
static Level_addParticle_t Level_addParticle = (Level_addParticle_t) 0xa449c;
|
||||
static Level_addParticle_t Level_addParticle = (Level_addParticle_t) 0xf07b8;
|
||||
|
||||
// Gui
|
||||
|
||||
typedef void (*Gui_addMessage_t)(unsigned char *gui, std::string const& text);
|
||||
static Gui_addMessage_t Gui_addMessage = (Gui_addMessage_t) 0x27820;
|
||||
static Gui_addMessage_t Gui_addMessage = (Gui_addMessage_t) 0x2cec0;
|
||||
|
||||
// ServerSideNetworkHandler
|
||||
|
||||
typedef void (*ServerSideNetworkHandler_displayGameMessage_t)(unsigned char *server_side_network_handler, std::string const& message);
|
||||
static ServerSideNetworkHandler_displayGameMessage_t ServerSideNetworkHandler_displayGameMessage = (ServerSideNetworkHandler_displayGameMessage_t) 0x750c4;
|
||||
|
||||
// SimpleChooseLevelScreen
|
||||
|
||||
#define SIMPLE_LEVEL_CHOOSE_SCREEN_SIZE 0x68
|
||||
|
||||
typedef unsigned char *(*SimpleChooseLevelScreen_t)(unsigned char *simple_choose_level_screen, std::string const& world_name);
|
||||
static SimpleChooseLevelScreen_t SimpleChooseLevelScreen = (SimpleChooseLevelScreen_t) 0x31404;
|
||||
static ServerSideNetworkHandler_displayGameMessage_t ServerSideNetworkHandler_displayGameMessage = (ServerSideNetworkHandler_displayGameMessage_t) 0x99ad4;
|
||||
|
||||
// SelectWorldScreen
|
||||
|
||||
typedef std::string (*SelectWorldScreen_getUniqueLevelName_t)(unsigned char *screen, std::string const& name);
|
||||
static SelectWorldScreen_getUniqueLevelName_t SelectWorldScreen_getUniqueLevelName = (SelectWorldScreen_getUniqueLevelName_t) 0x388ec;
|
||||
static SelectWorldScreen_getUniqueLevelName_t SelectWorldScreen_getUniqueLevelName = (SelectWorldScreen_getUniqueLevelName_t) 0x459fc;
|
||||
|
||||
// Touch::SelectWorldScreen
|
||||
|
||||
static SelectWorldScreen_getUniqueLevelName_t Touch_SelectWorldScreen_getUniqueLevelName = (SelectWorldScreen_getUniqueLevelName_t) 0x3d82c;
|
||||
static SelectWorldScreen_getUniqueLevelName_t Touch_SelectWorldScreen_getUniqueLevelName = (SelectWorldScreen_getUniqueLevelName_t) 0x50b04;
|
||||
|
||||
// SoundEngine
|
||||
|
||||
typedef void (*SoundEngine_playUI_t)(unsigned char *sound_engine, std::string const& name, float pitch, float volume);
|
||||
static SoundEngine_playUI_t SoundEngine_playUI = (SoundEngine_playUI_t) 0x67864;
|
||||
static SoundEngine_playUI_t SoundEngine_playUI = (SoundEngine_playUI_t) 0x836a4;
|
||||
|
||||
typedef void (*SoundEngine_play_t)(unsigned char *sound_engine, std::string const& name, float x, float y, float z, float pitch, float volume);
|
||||
static SoundEngine_play_t SoundEngine_play = (SoundEngine_play_t) 0x67860;
|
||||
static SoundEngine_play_t SoundEngine_play = (SoundEngine_play_t) 0x836a0;
|
||||
|
||||
// Common
|
||||
|
||||
typedef std::string (*Common_getGameVersionString_t)(std::string const& version_suffix);
|
||||
static Common_getGameVersionString_t Common_getGameVersionString = (Common_getGameVersionString_t) 0x15068;
|
||||
|
||||
// Options
|
||||
|
||||
typedef void (*Options_addOptionToSaveOutput_t)(unsigned char *options, std::vector<std::string> &data, std::string option, int32_t value);
|
||||
static Options_addOptionToSaveOutput_t Options_addOptionToSaveOutput = (Options_addOptionToSaveOutput_t) 0x195e4;
|
||||
|
||||
// OptionsFile
|
||||
|
||||
typedef std::vector<std::string> (*OptionsFile_getOptionStrings_t)(unsigned char *options_file);
|
||||
static OptionsFile_getOptionStrings_t OptionsFile_getOptionStrings = (OptionsFile_getOptionStrings_t) 0x19c1c;
|
||||
|
||||
typedef void (*OptionsFile_save_t)(unsigned char *options_file, std::vector<std::string> const& data);
|
||||
static OptionsFile_save_t OptionsFile_save = (OptionsFile_save_t) 0x19bcc;
|
||||
|
||||
static uint32_t OptionsFile_options_txt_path_property_offset = 0x0; // std::string
|
||||
|
||||
// OptionsPane
|
||||
|
||||
typedef void (*OptionsPane_unknown_toggle_creating_function_t)(unsigned char *options_pane, unsigned char *unknown_object, std::string const& name, unsigned char *option);
|
||||
static OptionsPane_unknown_toggle_creating_function_t OptionsPane_unknown_toggle_creating_function = (OptionsPane_unknown_toggle_creating_function_t) 0x24470;
|
||||
static Common_getGameVersionString_t Common_getGameVersionString = (Common_getGameVersionString_t) 0x1523c;
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user