2022-06-27 18:47:55 +00:00
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include <libreborn/libreborn.h>
|
|
|
|
#include <symbols/minecraft.h>
|
|
|
|
|
|
|
|
#include <mods/misc/misc.h>
|
|
|
|
#include "misc-internal.h"
|
|
|
|
|
2022-07-10 14:37:19 +00:00
|
|
|
// Callbacks
|
2024-02-03 03:25:22 +00:00
|
|
|
#define STORE_CALLBACK(name, type) \
|
|
|
|
static std::vector<misc_update_function_##type##_t> &get_misc_##name##_functions() { \
|
2024-01-06 11:30:23 +00:00
|
|
|
static std::vector<misc_update_function_##type##_t> functions; \
|
2022-07-10 14:37:19 +00:00
|
|
|
return functions; \
|
|
|
|
} \
|
2024-02-03 03:25:22 +00:00
|
|
|
void misc_run_on_##name(misc_update_function_##type##_t function) { \
|
|
|
|
get_misc_##name##_functions().push_back(function); \
|
|
|
|
}
|
|
|
|
#define SETUP_CALLBACK(name, type) \
|
|
|
|
STORE_CALLBACK(name, type) \
|
2024-01-06 11:30:23 +00:00
|
|
|
static void handle_misc_##name(type *obj) { \
|
|
|
|
for (misc_update_function_##type##_t function : get_misc_##name##_functions()) { \
|
2024-01-07 08:23:43 +00:00
|
|
|
function(obj); \
|
2022-07-10 14:37:19 +00:00
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
2022-06-27 18:47:55 +00:00
|
|
|
// Run Functions On Update
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(update, Minecraft);
|
2022-06-27 18:47:55 +00:00
|
|
|
// Handle Custom Update Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
static void Minecraft_update_injection(Minecraft *minecraft) {
|
2022-06-27 18:47:55 +00:00
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
Minecraft_update_non_virtual(minecraft);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Run Functions
|
2022-07-10 14:37:19 +00:00
|
|
|
handle_misc_update(minecraft);
|
2022-06-27 18:47:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Run Functions On Tick
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(tick, Minecraft);
|
2022-06-27 18:47:55 +00:00
|
|
|
// Handle Custom Tick Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
static void Minecraft_tick_injection(Minecraft *minecraft, int32_t param_1, int32_t param_2) {
|
2022-06-27 18:47:55 +00:00
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
Minecraft_tick(minecraft, param_1, param_2);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Run Functions
|
2022-07-10 14:37:19 +00:00
|
|
|
handle_misc_tick(minecraft);
|
2022-06-27 18:47:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Run Functions On Recipes Setup
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(recipes_setup, Recipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
// Handle Custom Recipes Setup Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
static Recipes *Recipes_injection(Recipes *recipes) {
|
2022-06-27 18:47:55 +00:00
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
Recipes_constructor(recipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Run Functions
|
2022-07-10 14:37:19 +00:00
|
|
|
handle_misc_recipes_setup(recipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Return
|
|
|
|
return recipes;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Run Functions On Furnace Recipes Setup
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(furnace_recipes_setup, FurnaceRecipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
// Handle Custom Furnace Recipes Setup Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
static FurnaceRecipes *FurnaceRecipes_injection(FurnaceRecipes *recipes) {
|
2022-06-27 18:47:55 +00:00
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
FurnaceRecipes_constructor(recipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Run Functions
|
2022-07-10 14:37:19 +00:00
|
|
|
handle_misc_furnace_recipes_setup(recipes);
|
2022-06-27 18:47:55 +00:00
|
|
|
|
|
|
|
// Return
|
|
|
|
return recipes;
|
|
|
|
}
|
|
|
|
|
2022-07-10 14:37:19 +00:00
|
|
|
// Run Functions On Creative Inventory Setup
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(creative_inventory_setup, FillingContainer);
|
2022-07-10 14:37:19 +00:00
|
|
|
// Handle Custom Creative Inventory Setup Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
static void Inventory_setupDefault_FillingContainer_addItem_call_injection(FillingContainer *filling_container, ItemInstance *item_instance) {
|
2022-07-10 14:37:19 +00:00
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
FillingContainer_addItem(filling_container, item_instance);
|
2024-02-07 06:47:46 +00:00
|
|
|
|
2022-07-10 14:37:19 +00:00
|
|
|
// Run Functions
|
|
|
|
handle_misc_creative_inventory_setup(filling_container);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Run Functions On Tiles Setup
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(tiles_setup, void);
|
2022-07-10 14:37:19 +00:00
|
|
|
// Handle Custom Tiles Setup Behavior
|
|
|
|
static void Tile_initTiles_injection() {
|
|
|
|
// Run Functions
|
|
|
|
handle_misc_tiles_setup(NULL);
|
|
|
|
|
|
|
|
// Call Original Method
|
2024-01-07 08:23:43 +00:00
|
|
|
Tile_initTiles();
|
2022-07-10 14:37:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Run Functions On Items Setup
|
2024-01-06 11:30:23 +00:00
|
|
|
SETUP_CALLBACK(items_setup, void);
|
2022-07-10 14:37:19 +00:00
|
|
|
// Handle Custom Items Setup Behavior
|
|
|
|
static void Item_initItems_injection() {
|
2024-02-07 06:47:46 +00:00
|
|
|
// Call Original Method
|
|
|
|
Item_initItems();
|
|
|
|
|
2022-07-10 14:37:19 +00:00
|
|
|
// Run Functions
|
|
|
|
handle_misc_items_setup(NULL);
|
2024-02-07 06:47:46 +00:00
|
|
|
}
|
2022-07-10 14:37:19 +00:00
|
|
|
|
2024-02-07 06:47:46 +00:00
|
|
|
// Run Functions On Language Setup
|
|
|
|
SETUP_CALLBACK(language_setup, void);
|
|
|
|
// Handle Custom Items Setup Behavior
|
|
|
|
static void I18n_loadLanguage_injection(AppPlatform *app, std::string language_name) {
|
2022-07-10 14:37:19 +00:00
|
|
|
// Call Original Method
|
2024-02-07 06:47:46 +00:00
|
|
|
I18n_loadLanguage(app, language_name);
|
|
|
|
|
|
|
|
// Run Functions
|
|
|
|
handle_misc_language_setup(NULL);
|
2022-07-10 14:37:19 +00:00
|
|
|
}
|
|
|
|
|
2024-02-03 03:25:22 +00:00
|
|
|
// Run Functions On GUI Key Press
|
|
|
|
STORE_CALLBACK(game_key_press, key_press)
|
|
|
|
static bool handle_misc_game_key_press(Minecraft *minecraft, int key) {
|
|
|
|
for (misc_update_function_key_press_t function : get_misc_game_key_press_functions()) {
|
|
|
|
if (function(minecraft, key)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// Handle Key Presses
|
|
|
|
static void Gui_handleKeyPressed_injection(Gui *self, int key) {
|
|
|
|
// Run Functions
|
|
|
|
if (handle_misc_game_key_press(self->minecraft, key)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Call Original Method
|
|
|
|
Gui_handleKeyPressed(self, key);
|
|
|
|
}
|
|
|
|
|
2022-06-27 18:47:55 +00:00
|
|
|
// Init
|
|
|
|
void _init_misc_api() {
|
|
|
|
// Handle Custom Update Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
overwrite_calls((void *) Minecraft_update_non_virtual, (void *) Minecraft_update_injection);
|
2022-06-27 18:47:55 +00:00
|
|
|
// Handle Custom Tick Behavior
|
|
|
|
overwrite_calls((void *) Minecraft_tick, (void *) Minecraft_tick_injection);
|
|
|
|
// Handle Custom Recipe Setup Behavior
|
2024-01-06 11:30:23 +00:00
|
|
|
overwrite_calls((void *) Recipes_constructor, (void *) Recipes_injection);
|
|
|
|
overwrite_calls((void *) FurnaceRecipes_constructor, (void *) FurnaceRecipes_injection);
|
2022-07-10 14:37:19 +00:00
|
|
|
// Handle Custom Creative Inventory Setup Behavior
|
|
|
|
overwrite_call((void *) 0x8e0fc, (void *) Inventory_setupDefault_FillingContainer_addItem_call_injection);
|
|
|
|
// Handle Custom Item/Tile Init Behavior
|
|
|
|
overwrite_calls((void *) Tile_initTiles, (void *) Tile_initTiles_injection);
|
|
|
|
overwrite_calls((void *) Item_initItems, (void *) Item_initItems_injection);
|
2024-02-07 06:47:46 +00:00
|
|
|
// Handle Custom Language Entries
|
|
|
|
overwrite_calls((void *) I18n_loadLanguage, (void *) I18n_loadLanguage_injection);
|
2024-02-03 03:25:22 +00:00
|
|
|
// Handle Key Presses
|
|
|
|
overwrite_calls((void *) Gui_handleKeyPressed, (void *) Gui_handleKeyPressed_injection);
|
2022-06-27 18:47:55 +00:00
|
|
|
}
|