Fix More Furnace UI
This commit is contained in:
parent
33c7d025a5
commit
5636abc051
@ -7,7 +7,7 @@
|
|||||||
#include "../init/init.h"
|
#include "../init/init.h"
|
||||||
|
|
||||||
// Fix Grass And Leaves Inventory Rendering When The gui_blocks Atlas Is Disabled
|
// Fix Grass And Leaves Inventory Rendering When The gui_blocks Atlas Is Disabled
|
||||||
static float ItemRenderer_renderGuiItemCorrect_injection(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, int32_t param_1, int32_t param_2) {
|
static void ItemRenderer_renderGuiItemCorrect_injection(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, int32_t param_1, int32_t param_2) {
|
||||||
int32_t leaves_id = *(int32_t *) (*Tile_leaves + Tile_id_property_offset);
|
int32_t leaves_id = *(int32_t *) (*Tile_leaves + Tile_id_property_offset);
|
||||||
int32_t grass_id = *(int32_t *) (*Tile_grass + Tile_id_property_offset);
|
int32_t grass_id = *(int32_t *) (*Tile_grass + Tile_id_property_offset);
|
||||||
// Replace Rendered Item With Carried Variant
|
// Replace Rendered Item With Carried Variant
|
||||||
@ -28,28 +28,39 @@ static float ItemRenderer_renderGuiItemCorrect_injection(unsigned char *font, un
|
|||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
// Call Original Method
|
// Call Original Method
|
||||||
float ret = (*ItemRenderer_renderGuiItemCorrect)(font, textures, use_carried ? &carried_item_instance : item_instance, param_1, param_2);
|
(*ItemRenderer_renderGuiItemCorrect)(font, textures, use_carried ? &carried_item_instance : item_instance, param_1, param_2);
|
||||||
|
|
||||||
// Revert GL State Changes
|
// Revert GL State Changes
|
||||||
if (depth_test_was_enabled) {
|
if (depth_test_was_enabled) {
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix Translucent Preview Items In Furnace UI Being Fully Opaque When The gui_blocks Atlas Is Disabled
|
// Fix Translucent Preview Items In Furnace UI Being Fully Opaque When The gui_blocks Atlas Is Disabled
|
||||||
static bool use_furnace_fix = false;
|
static int item_color_fix_mode = 0;
|
||||||
#define FURNACE_ITEM_TRANSPARENCY 0x33
|
#define FURNACE_ITEM_TRANSPARENCY 0x33
|
||||||
|
#define INVALID_FURNACE_ITEM_VALUE 0x40
|
||||||
|
#define FURNACE_ITEM_DEFAULT_COLOR 0x33ffffff
|
||||||
|
#define INVALID_FURNACE_ITEM_DEFAULT_COLOR 0xff404040
|
||||||
static void Tesselator_colorABGR_injection(unsigned char *tesselator, int32_t color) {
|
static void Tesselator_colorABGR_injection(unsigned char *tesselator, int32_t color) {
|
||||||
// Fix Furnace UI
|
// Fix Furnace UI
|
||||||
if (use_furnace_fix) {
|
if (item_color_fix_mode != 0) {
|
||||||
|
int32_t a;
|
||||||
|
int32_t b;
|
||||||
|
int32_t g;
|
||||||
|
int32_t r;
|
||||||
// Force Translucent
|
// Force Translucent
|
||||||
int32_t a = FURNACE_ITEM_TRANSPARENCY;
|
if (item_color_fix_mode == 1) {
|
||||||
int32_t b = (color & 0x00ff0000) >> 16;
|
a = FURNACE_ITEM_TRANSPARENCY;
|
||||||
int32_t g = (color & 0x0000ff00) >> 8;
|
b = (color & 0x00ff0000) >> 16;
|
||||||
int32_t r = (color & 0x000000ff) >> 0;
|
g = (color & 0x0000ff00) >> 8;
|
||||||
|
r = (color & 0x000000ff) >> 0;
|
||||||
|
} else {
|
||||||
|
a = 0xff;
|
||||||
|
b = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
g = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
r = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
}
|
||||||
// New Color
|
// New Color
|
||||||
color = r | (g << 8) | (b << 16) | (a << 24);
|
color = r | (g << 8) | (b << 16) | (a << 24);
|
||||||
}
|
}
|
||||||
@ -62,37 +73,55 @@ static void Tesselator_begin_injection(unsigned char *tesselator, int32_t mode)
|
|||||||
(*Tesselator_begin)(tesselator, mode);
|
(*Tesselator_begin)(tesselator, mode);
|
||||||
|
|
||||||
// Fix Furnace UI
|
// Fix Furnace UI
|
||||||
if (use_furnace_fix) {
|
if (item_color_fix_mode != 0) {
|
||||||
// Implict Translucent
|
// Implict Translucent
|
||||||
(*Tesselator_colorABGR_injection)(tesselator, 0xffffffff);
|
(*Tesselator_colorABGR_injection)(tesselator, item_color_fix_mode == 1 ? FURNACE_ITEM_DEFAULT_COLOR : INVALID_FURNACE_ITEM_DEFAULT_COLOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void Tesselator_color_injection(unsigned char *tesselator, int32_t r, int32_t g, int32_t b, int32_t a) {
|
static void Tesselator_color_injection(unsigned char *tesselator, int32_t r, int32_t g, int32_t b, int32_t a) {
|
||||||
// Fix Furnace UI
|
// Fix Furnace UI
|
||||||
if (use_furnace_fix) {
|
if (item_color_fix_mode != 0) {
|
||||||
// Force Translucent
|
// Force Translucent
|
||||||
|
if (item_color_fix_mode == 1) {
|
||||||
a = FURNACE_ITEM_TRANSPARENCY;
|
a = FURNACE_ITEM_TRANSPARENCY;
|
||||||
|
} else {
|
||||||
|
a = 0xff;
|
||||||
|
b = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
g = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
r = INVALID_FURNACE_ITEM_VALUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call Original Method
|
// Call Original Method
|
||||||
(*Tesselator_color)(tesselator, r, g, b, a);
|
(*Tesselator_color)(tesselator, r, g, b, a);
|
||||||
}
|
}
|
||||||
static float FurnaceScreen_render_ItemRenderer_renderGuiItem_injection(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, bool param_3) {
|
static void InventoryPane_renderBatch_Tesselator_color_injection(unsigned char *tesselator, int32_t r, int32_t g, int32_t b) {
|
||||||
// Enable Furnace UI Fix
|
// Call Original Method
|
||||||
use_furnace_fix = true;
|
(*Tesselator_color)(tesselator, r, g, b, 0xff);
|
||||||
|
|
||||||
|
// Enable Item Color Fix
|
||||||
|
item_color_fix_mode = 2;
|
||||||
|
}
|
||||||
|
static void ItemRenderer_renderGuiItem_two_injection(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, float param_3, float param_4, bool param_5) {
|
||||||
|
// Call Original Method
|
||||||
|
(*ItemRenderer_renderGuiItem_two)(font, textures, item_instance, param_1, param_2, param_3, param_4, param_5);
|
||||||
|
|
||||||
|
// Disable Item Color Fix
|
||||||
|
item_color_fix_mode = 0;
|
||||||
|
}
|
||||||
|
static void FurnaceScreen_render_ItemRenderer_renderGuiItem_one_injection(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, bool param_3) {
|
||||||
|
// Enable Item Color Fix
|
||||||
|
item_color_fix_mode = 1;
|
||||||
|
|
||||||
// Call Original Method
|
// Call Original Method
|
||||||
float ret = (*ItemRenderer_renderGuiItem)(font, textures, item_instance, param_1, param_2, param_3);
|
(*ItemRenderer_renderGuiItem_one)(font, textures, item_instance, param_1, param_2, param_3);
|
||||||
|
|
||||||
// Disable Furnace UI Fix
|
|
||||||
use_furnace_fix = false;
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
void init_atlas() {
|
void init_atlas() {
|
||||||
|
// Add Better NULL-Check (And More UI Fixes When The gui_blocks Atlas Is Disabled)
|
||||||
|
overwrite_calls((void *) ItemRenderer_renderGuiItem_two, (void *) ItemRenderer_renderGuiItem_two_injection);
|
||||||
|
|
||||||
// Disable The gui_blocks Atlas Which Contains Pre-Rendered Textures For Blocks In The Inventory
|
// Disable The gui_blocks Atlas Which Contains Pre-Rendered Textures For Blocks In The Inventory
|
||||||
if (feature_has("Disable \"gui_blocks\" Atlas", 0)) {
|
if (feature_has("Disable \"gui_blocks\" Atlas", 0)) {
|
||||||
unsigned char disable_gui_blocks_atlas_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
unsigned char disable_gui_blocks_atlas_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||||
@ -103,6 +132,7 @@ void init_atlas() {
|
|||||||
overwrite_calls((void *) Tesselator_colorABGR, (void *) Tesselator_colorABGR_injection);
|
overwrite_calls((void *) Tesselator_colorABGR, (void *) Tesselator_colorABGR_injection);
|
||||||
overwrite_calls((void *) Tesselator_begin, (void *) Tesselator_begin_injection);
|
overwrite_calls((void *) Tesselator_begin, (void *) Tesselator_begin_injection);
|
||||||
overwrite_calls((void *) Tesselator_color, (void *) Tesselator_color_injection);
|
overwrite_calls((void *) Tesselator_color, (void *) Tesselator_color_injection);
|
||||||
overwrite_call((void *) 0x32324, (void *) FurnaceScreen_render_ItemRenderer_renderGuiItem_injection);
|
overwrite_call((void *) 0x32324, (void *) FurnaceScreen_render_ItemRenderer_renderGuiItem_one_injection);
|
||||||
|
overwrite_call((void *) 0x1e21c, (void *) InventoryPane_renderBatch_Tesselator_color_injection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -567,10 +567,13 @@ static uint32_t TileEntity_id_property_offset = 0x18; // int32_t
|
|||||||
|
|
||||||
// ItemRenderer
|
// ItemRenderer
|
||||||
|
|
||||||
typedef float (*ItemRenderer_renderGuiItem_t)(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, float param_1, float param_2, bool param_3);
|
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_t ItemRenderer_renderGuiItem = (ItemRenderer_renderGuiItem_t) 0x63e58;
|
static ItemRenderer_renderGuiItem_one_t ItemRenderer_renderGuiItem_one = (ItemRenderer_renderGuiItem_one_t) 0x63e58;
|
||||||
|
|
||||||
typedef float (*ItemRenderer_renderGuiItemCorrect_t)(unsigned char *font, unsigned char *textures, ItemInstance *item_instance, int32_t param_1, int32_t param_2);
|
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;
|
||||||
|
|
||||||
|
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) 0x639a0;
|
||||||
|
|
||||||
// Tesselator
|
// Tesselator
|
||||||
|
Loading…
Reference in New Issue
Block a user