Move Some Stuff Around
This commit is contained in:
parent
596ff01f75
commit
66d2e43f55
@ -70,6 +70,7 @@
|
|||||||
* `Screenshot Support`
|
* `Screenshot Support`
|
||||||
* `Fix Camera Functionality`
|
* `Fix Camera Functionality`
|
||||||
* `Property Scale Animated Textures`
|
* `Property Scale Animated Textures`
|
||||||
|
* `Enable Text Input`
|
||||||
* Split Up `Remove Creative Mode Restrictions` Feature Flag
|
* Split Up `Remove Creative Mode Restrictions` Feature Flag
|
||||||
* `Remove Creative Mode Restrictions` (Disabled By Default)
|
* `Remove Creative Mode Restrictions` (Disabled By Default)
|
||||||
* `Display Slot Count In Creative Mode` (Disabled By Default)
|
* `Display Slot Count In Creative Mode` (Disabled By Default)
|
||||||
@ -79,6 +80,7 @@
|
|||||||
* Rename Feature Flags
|
* Rename Feature Flags
|
||||||
* `Disable Buggy Held Item Caching` To `Fix Held Item Caching`
|
* `Disable Buggy Held Item Caching` To `Fix Held Item Caching`
|
||||||
* `Disable 'gui_blocks' Atlas` To `Regenerate "gui_blocks" Atlas`
|
* `Disable 'gui_blocks' Atlas` To `Regenerate "gui_blocks" Atlas`
|
||||||
|
* `Fix Sign Placement` To `Enable Sign Screen`
|
||||||
* Add Milk Buckets
|
* Add Milk Buckets
|
||||||
* Included In The `Add Buckets` Feature Flag
|
* Included In The `Add Buckets` Feature Flag
|
||||||
* Removed `Property Scale Animated Textures` Feature Flag
|
* Removed `Property Scale Animated Textures` Feature Flag
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// GLFW Helpers
|
// GLFW Helpers
|
||||||
#ifdef GLFW_VERSION_MAJOR
|
#ifndef GLFW_VERSION_MAJOR
|
||||||
|
#error "Missing GLFW"
|
||||||
|
#endif
|
||||||
|
|
||||||
void init_glfw();
|
void init_glfw();
|
||||||
GLFWwindow *create_glfw_window(const char *title, int width, int height);
|
GLFWwindow *create_glfw_window(const char *title, int width, int height);
|
||||||
void cleanup_glfw(GLFWwindow *window);
|
void cleanup_glfw(GLFWwindow *window);
|
||||||
void get_glfw_scale(GLFWwindow *window, float *x_scale, float *y_scale);
|
void get_glfw_scale(GLFWwindow *window, float *x_scale, float *y_scale);
|
||||||
|
|
||||||
#endif
|
|
@ -1,10 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <libreborn/config.h>
|
|
||||||
#include "env.h"
|
|
||||||
#include "log.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "string.h"
|
|
||||||
#include "exec.h"
|
|
||||||
#include "patch.h"
|
|
||||||
#include "glfw.h"
|
|
@ -3,7 +3,9 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
// Patching Functions
|
// Patching Functions
|
||||||
#ifdef REBORN_HAS_PATCH_CODE
|
#ifndef REBORN_HAS_PATCH_CODE
|
||||||
|
#error "Missing Patching Functions"
|
||||||
|
#endif
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
void reborn_init_patch();
|
void reborn_init_patch();
|
||||||
@ -50,5 +52,3 @@ void patch_vtable(const T *start, typename T::ptr_type target) {
|
|||||||
}
|
}
|
||||||
patch_address((void *) start->get_vtable_addr(), (void *) target);
|
patch_address((void *) start->get_vtable_addr(), (void *) target);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -26,6 +26,7 @@ CATEGORY User Interface
|
|||||||
TRUE Implement Create World Dialog
|
TRUE Implement Create World Dialog
|
||||||
TRUE Display Date In Select World Screen
|
TRUE Display Date In Select World Screen
|
||||||
TRUE Add Welcome Screen
|
TRUE Add Welcome Screen
|
||||||
|
TRUE Enable Sign Screen
|
||||||
CATEGORY HUD
|
CATEGORY HUD
|
||||||
TRUE Classic HUD
|
TRUE Classic HUD
|
||||||
TRUE Translucent Toolbar
|
TRUE Translucent Toolbar
|
||||||
@ -84,6 +85,7 @@ CATEGORY Input
|
|||||||
FALSE Disable Raw Mouse Motion (Not Recommended)
|
FALSE Disable Raw Mouse Motion (Not Recommended)
|
||||||
FALSE Disable Speed Bridging
|
FALSE Disable Speed Bridging
|
||||||
FALSE Disable Creative Mode Mining Delay
|
FALSE Disable Creative Mode Mining Delay
|
||||||
|
TRUE Enable Text Input
|
||||||
CATEGORY Multiplayer
|
CATEGORY Multiplayer
|
||||||
CATEGORY Chat
|
CATEGORY Chat
|
||||||
TRUE Implement Chat
|
TRUE Implement Chat
|
||||||
@ -96,7 +98,6 @@ CATEGORY Gameplay
|
|||||||
TRUE Implement Death Messages
|
TRUE Implement Death Messages
|
||||||
TRUE Implement Game-Mode Switching
|
TRUE Implement Game-Mode Switching
|
||||||
FALSE Force Mob Spawning
|
FALSE Force Mob Spawning
|
||||||
TRUE Fix Sign Placement
|
|
||||||
TRUE Add Buckets
|
TRUE Add Buckets
|
||||||
TRUE Load Custom Skins
|
TRUE Load Custom Skins
|
||||||
TRUE Add Cake
|
TRUE Add Cake
|
||||||
|
@ -4,12 +4,12 @@ project(mods)
|
|||||||
add_library(mods SHARED
|
add_library(mods SHARED
|
||||||
# compat
|
# compat
|
||||||
src/compat/compat.cpp
|
src/compat/compat.cpp
|
||||||
src/compat/egl.cpp
|
src/compat/readdir.cpp
|
||||||
src/compat/x11.cpp
|
|
||||||
src/compat/bcm_host.cpp
|
|
||||||
src/compat/sdl.cpp
|
src/compat/sdl.cpp
|
||||||
# readdir
|
src/compat/stubs/egl.cpp
|
||||||
src/readdir/readdir.cpp
|
src/compat/stubs/x11.cpp
|
||||||
|
src/compat/stubs/bcm_host.cpp
|
||||||
|
src/compat/stubs/sdl.cpp
|
||||||
# feature
|
# feature
|
||||||
src/feature/feature.cpp
|
src/feature/feature.cpp
|
||||||
# version
|
# version
|
||||||
@ -63,8 +63,6 @@ add_library(mods SHARED
|
|||||||
src/input/misc.cpp
|
src/input/misc.cpp
|
||||||
src/input/drop.cpp
|
src/input/drop.cpp
|
||||||
src/input/keys.cpp
|
src/input/keys.cpp
|
||||||
# sign
|
|
||||||
src/sign/sign.cpp
|
|
||||||
# atlas
|
# atlas
|
||||||
src/atlas/atlas.cpp
|
src/atlas/atlas.cpp
|
||||||
# title-screen
|
# title-screen
|
||||||
|
@ -8,7 +8,6 @@ void init_multiplayer();
|
|||||||
void init_benchmark();
|
void init_benchmark();
|
||||||
void init_sound();
|
void init_sound();
|
||||||
void init_input();
|
void init_input();
|
||||||
void init_sign();
|
|
||||||
void init_camera();
|
void init_camera();
|
||||||
void init_atlas();
|
void init_atlas();
|
||||||
void init_title_screen();
|
void init_title_screen();
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
void sign_key_press(char key);
|
|
||||||
}
|
|
@ -1,2 +1,2 @@
|
|||||||
# `compat` Mod
|
# `compat` Mod
|
||||||
This utility mod sends keyboard input to other mods. It also patches out all EGL and X11 calls.
|
This utility mod ensures compatibility with the host system. This includes fixing events, handling signals, and patching out bad function calls.
|
@ -1,6 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
// Stubs
|
||||||
__attribute__((visibility("internal"))) void _patch_egl_calls();
|
__attribute__((visibility("internal"))) void _patch_egl_calls();
|
||||||
__attribute__((visibility("internal"))) void _patch_x11_calls();
|
__attribute__((visibility("internal"))) void _patch_x11_calls();
|
||||||
__attribute__((visibility("internal"))) void _patch_bcm_host_calls();
|
__attribute__((visibility("internal"))) void _patch_bcm_host_calls();
|
||||||
__attribute__((visibility("internal"))) void _patch_sdl_calls();
|
__attribute__((visibility("internal"))) void _patch_sdl_calls();
|
||||||
|
|
||||||
|
// Functionality
|
||||||
|
__attribute__((visibility("internal"))) void _init_compat_sdl();
|
||||||
|
@ -1,92 +1,19 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <csignal>
|
#include <csignal>
|
||||||
#include <cerrno>
|
|
||||||
|
|
||||||
#include <mods/compat/compat.h>
|
#include <mods/compat/compat.h>
|
||||||
#include <mods/init/init.h>
|
#include <mods/init/init.h>
|
||||||
|
|
||||||
#include "compat-internal.h"
|
#include "compat-internal.h"
|
||||||
|
|
||||||
#include <libreborn/log.h>
|
|
||||||
#include <libreborn/util.h>
|
|
||||||
#include <libreborn/config.h>
|
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
|
||||||
#include <media-layer/core.h>
|
|
||||||
|
|
||||||
#include <mods/input/input.h>
|
|
||||||
#include <mods/sign/sign.h>
|
|
||||||
|
|
||||||
// Custom Title
|
|
||||||
HOOK(media_SDL_WM_SetCaption, void, (__attribute__((unused)) const char *title, const char *icon)) {
|
|
||||||
real_media_SDL_WM_SetCaption()(MCPI_APP_TITLE, icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mouse Cursor Is Always Invisible In Vanilla MCPI
|
|
||||||
// Because In Vanilla MCPI, The GPU Overlay Covered The Normal Mouse Cursor
|
|
||||||
HOOK(media_SDL_ShowCursor, int, (int toggle)) {
|
|
||||||
return real_media_SDL_ShowCursor()(toggle == SDL_QUERY ? SDL_QUERY : SDL_DISABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Intercept SDL Events
|
|
||||||
HOOK(media_SDL_PollEvent, int, (SDL_Event *event)) {
|
|
||||||
// In Server Mode, Exit Requests Are Handled In src/server/server.cpp
|
|
||||||
// Check If Exit Is Requested
|
|
||||||
if (!reborn_is_server() && compat_check_exit_requested()) {
|
|
||||||
// Send SDL_QUIT
|
|
||||||
SDL_Event new_event;
|
|
||||||
new_event.type = SDL_QUIT;
|
|
||||||
media_SDL_PushEvent(&new_event);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Poll Events
|
|
||||||
int ret = real_media_SDL_PollEvent()(event);
|
|
||||||
|
|
||||||
// Handle Events
|
|
||||||
if (ret == 1 && event != nullptr) {
|
|
||||||
bool handled = false;
|
|
||||||
switch (event->type) {
|
|
||||||
case SDL_KEYDOWN:
|
|
||||||
case SDL_KEYUP: {
|
|
||||||
// Track Control Key
|
|
||||||
bool is_ctrl = (event->key.keysym.mod & KMOD_CTRL) != 0;
|
|
||||||
if (event->type == SDL_KEYUP) {
|
|
||||||
is_ctrl = false;
|
|
||||||
}
|
|
||||||
input_set_is_ctrl(is_ctrl);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SDL_USEREVENT: {
|
|
||||||
// SDL_UserEvent Is Never Used In MCPI, So It Is Repurposed For Character Events
|
|
||||||
if (event->user.code == USER_EVENT_CHARACTER) {
|
|
||||||
sign_key_press((char) event->user.data1);
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (handled) {
|
|
||||||
// Event Was Handled
|
|
||||||
return media_SDL_PollEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exit Handler
|
// Exit Handler
|
||||||
static void exit_handler(__attribute__((unused)) int data) {
|
static void exit_handler(__attribute__((unused)) int data) {
|
||||||
// Request Exit
|
// Request Exit
|
||||||
compat_request_exit();
|
compat_request_exit();
|
||||||
}
|
}
|
||||||
void init_compat() {
|
void init_compat() {
|
||||||
|
// SDL
|
||||||
|
_init_compat_sdl();
|
||||||
// Install Signal Handlers
|
// Install Signal Handlers
|
||||||
struct sigaction act_sigint = {};
|
struct sigaction act_sigint = {};
|
||||||
act_sigint.sa_flags = SA_RESTART;
|
act_sigint.sa_flags = SA_RESTART;
|
||||||
|
@ -1,43 +1,85 @@
|
|||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
#include <media-layer/core.h>
|
#include <media-layer/core.h>
|
||||||
#include <libreborn/patch.h>
|
|
||||||
|
#include <libreborn/util.h>
|
||||||
|
#include <libreborn/config.h>
|
||||||
|
|
||||||
|
#include <symbols/minecraft.h>
|
||||||
|
|
||||||
|
#include <mods/compat/compat.h>
|
||||||
|
#include <mods/input/input.h>
|
||||||
|
#include <mods/feature/feature.h>
|
||||||
|
|
||||||
#include "compat-internal.h"
|
#include "compat-internal.h"
|
||||||
|
|
||||||
// SDL Stub
|
// Custom Title
|
||||||
static void *SDL_SetVideoMode_injection(__attribute__((unused)) int width, __attribute__((unused)) int height, __attribute__((unused)) int bpp, __attribute__((unused)) uint32_t flags) {
|
HOOK(media_SDL_WM_SetCaption, void, (__attribute__((unused)) const char *title, const char *icon)) {
|
||||||
// Return Value Is Only Used For A NULL-Check
|
real_media_SDL_WM_SetCaption()(MCPI_APP_TITLE, icon);
|
||||||
return (void *) 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Window Information
|
// Mouse Cursor Is Always Invisible In Vanilla MCPI
|
||||||
static void x11_nop() {
|
// Because In Vanilla MCPI, The GPU Overlay Covered The Normal Mouse Cursor
|
||||||
// NOP
|
HOOK(media_SDL_ShowCursor, int, (int toggle)) {
|
||||||
}
|
return real_media_SDL_ShowCursor()(toggle == SDL_QUERY ? SDL_QUERY : SDL_DISABLE);
|
||||||
static int SDL_GetWMInfo_injection(SDL_SysWMinfo *info) {
|
|
||||||
// Return Fake Lock Functions Since XLib Isn't Directly Used
|
|
||||||
SDL_SysWMinfo ret;
|
|
||||||
ret.info.x11.lock_func = x11_nop;
|
|
||||||
ret.info.x11.unlock_func = x11_nop;
|
|
||||||
ret.info.x11.display = nullptr;
|
|
||||||
ret.info.x11.window = 0;
|
|
||||||
ret.info.x11.wmwindow = ret.info.x11.window;
|
|
||||||
*info = ret;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quit
|
// Intercept SDL Events
|
||||||
static void SDL_Quit_injection() {
|
static bool enable_text_events;
|
||||||
// Cleanup Media Layer
|
HOOK(media_SDL_PollEvent, int, (SDL_Event *event)) {
|
||||||
media_cleanup();
|
// In Server Mode, Exit Requests Are Handled In src/server/server.cpp
|
||||||
// Exit
|
// Check If Exit Is Requested
|
||||||
INFO("Stopped");
|
if (!reborn_is_server() && compat_check_exit_requested()) {
|
||||||
|
// Send SDL_QUIT
|
||||||
|
SDL_Event new_event;
|
||||||
|
new_event.type = SDL_QUIT;
|
||||||
|
media_SDL_PushEvent(&new_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Poll Events
|
||||||
|
int ret = real_media_SDL_PollEvent()(event);
|
||||||
|
|
||||||
|
// Handle Events
|
||||||
|
if (ret == 1 && event != nullptr) {
|
||||||
|
bool handled = false;
|
||||||
|
switch (event->type) {
|
||||||
|
case SDL_KEYDOWN:
|
||||||
|
case SDL_KEYUP: {
|
||||||
|
// Track Control Key
|
||||||
|
bool is_ctrl = (event->key.keysym.mod & KMOD_CTRL) != 0;
|
||||||
|
if (event->type == SDL_KEYUP) {
|
||||||
|
is_ctrl = false;
|
||||||
|
}
|
||||||
|
input_set_is_ctrl(is_ctrl);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SDL_USEREVENT: {
|
||||||
|
// SDL_UserEvent Is Never Used In MCPI, So It Is Repurposed For Character Events
|
||||||
|
if (event->user.code == USER_EVENT_CHARACTER) {
|
||||||
|
if (enable_text_events) {
|
||||||
|
Keyboard::_inputText.push_back(char(event->user.data1));
|
||||||
|
}
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (handled) {
|
||||||
|
// Event Was Handled
|
||||||
|
return media_SDL_PollEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Patch SDL Calls
|
// Init
|
||||||
void _patch_sdl_calls() {
|
void _init_compat_sdl() {
|
||||||
// Disable SDL Calls
|
enable_text_events = feature_has("Enable Text Input", server_disabled);
|
||||||
overwrite_call((void *) 0xe020, (void *) SDL_SetVideoMode_injection);
|
}
|
||||||
overwrite_call((void *) 0x13284, (void *) SDL_GetWMInfo_injection);
|
|
||||||
overwrite_call((void *) 0x12410, (void *) SDL_Quit_injection);
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
#include <libreborn/patch.h>
|
#include <libreborn/patch.h>
|
||||||
#include "compat-internal.h"
|
#include "../compat-internal.h"
|
||||||
|
|
||||||
// Do Nothing Function
|
// Do Nothing Function
|
||||||
static void do_nothing() {
|
static void do_nothing() {
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <libreborn/patch.h>
|
#include <libreborn/patch.h>
|
||||||
#include <media-layer/core.h>
|
#include <media-layer/core.h>
|
||||||
#include "compat-internal.h"
|
#include "../compat-internal.h"
|
||||||
|
|
||||||
// Functions That Have Their Return Values Used
|
// Functions That Have Their Return Values Used
|
||||||
static EGLSurface eglCreateWindowSurface_injection(__attribute__((unused)) EGLDisplay display, __attribute__((unused)) EGLConfig config, __attribute__((unused)) NativeWindowType native_window, __attribute__((unused)) EGLint const *attrib_list) {
|
static EGLSurface eglCreateWindowSurface_injection(__attribute__((unused)) EGLDisplay display, __attribute__((unused)) EGLConfig config, __attribute__((unused)) NativeWindowType native_window, __attribute__((unused)) EGLint const *attrib_list) {
|
43
mods/src/compat/stubs/sdl.cpp
Normal file
43
mods/src/compat/stubs/sdl.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
|
#include <media-layer/core.h>
|
||||||
|
#include <libreborn/patch.h>
|
||||||
|
#include "../compat-internal.h"
|
||||||
|
|
||||||
|
// SDL Stub
|
||||||
|
static void *SDL_SetVideoMode_injection(__attribute__((unused)) int width, __attribute__((unused)) int height, __attribute__((unused)) int bpp, __attribute__((unused)) uint32_t flags) {
|
||||||
|
// Return Value Is Only Used For A NULL-Check
|
||||||
|
return (void *) 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Window Information
|
||||||
|
static void x11_nop() {
|
||||||
|
// NOP
|
||||||
|
}
|
||||||
|
static int SDL_GetWMInfo_injection(SDL_SysWMinfo *info) {
|
||||||
|
// Return Fake Lock Functions Since XLib Isn't Directly Used
|
||||||
|
SDL_SysWMinfo ret;
|
||||||
|
ret.info.x11.lock_func = x11_nop;
|
||||||
|
ret.info.x11.unlock_func = x11_nop;
|
||||||
|
ret.info.x11.display = nullptr;
|
||||||
|
ret.info.x11.window = 0;
|
||||||
|
ret.info.x11.wmwindow = ret.info.x11.window;
|
||||||
|
*info = ret;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quit
|
||||||
|
static void SDL_Quit_injection() {
|
||||||
|
// Cleanup Media Layer
|
||||||
|
media_cleanup();
|
||||||
|
// Exit
|
||||||
|
INFO("Stopped");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch SDL Calls
|
||||||
|
void _patch_sdl_calls() {
|
||||||
|
// Disable SDL Calls
|
||||||
|
overwrite_call((void *) 0xe020, (void *) SDL_SetVideoMode_injection);
|
||||||
|
overwrite_call((void *) 0x13284, (void *) SDL_GetWMInfo_injection);
|
||||||
|
overwrite_call((void *) 0x12410, (void *) SDL_Quit_injection);
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <libreborn/patch.h>
|
#include <libreborn/patch.h>
|
||||||
#include <media-layer/core.h>
|
#include <media-layer/core.h>
|
||||||
#include "compat-internal.h"
|
#include "../compat-internal.h"
|
||||||
|
|
||||||
// Functions That Have Their Return Values Used
|
// Functions That Have Their Return Values Used
|
||||||
static int XTranslateCoordinates_injection(__attribute__((unused)) void *display, __attribute__((unused)) XID src_w, __attribute__((unused)) XID dest_w, int src_x, int src_y, int *dest_x_return, int *dest_y_return, __attribute__((unused)) XID *child_return) {
|
static int XTranslateCoordinates_injection(__attribute__((unused)) void *display, __attribute__((unused)) XID src_w, __attribute__((unused)) XID dest_w, int src_x, int src_y, int *dest_x_return, int *dest_y_return, __attribute__((unused)) XID *child_return) {
|
@ -18,7 +18,6 @@ __attribute__((constructor)) static void init() {
|
|||||||
init_shading();
|
init_shading();
|
||||||
}
|
}
|
||||||
init_input();
|
init_input();
|
||||||
init_sign();
|
|
||||||
init_camera();
|
init_camera();
|
||||||
if (!reborn_is_headless()) {
|
if (!reborn_is_headless()) {
|
||||||
init_atlas();
|
init_atlas();
|
||||||
|
@ -6,4 +6,4 @@ This mod has several miscellaneous mods that are too small to be their own mod,
|
|||||||
* Loading the bundled language file.
|
* Loading the bundled language file.
|
||||||
* Printing chat messages to the log.
|
* Printing chat messages to the log.
|
||||||
* Implementing crafting remainders.
|
* Implementing crafting remainders.
|
||||||
* Correct the profile directory.
|
* Correcting the profile directory.
|
@ -236,6 +236,16 @@ static void Minecraft_handleMouseDown_injection(Minecraft_handleMouseDown_t orig
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open Sign Screen
|
||||||
|
static void LocalPlayer_openTextEdit_injection(__attribute__((unused)) LocalPlayer_openTextEdit_t original, LocalPlayer *local_player, TileEntity *sign) {
|
||||||
|
if (sign->type == 4) {
|
||||||
|
Minecraft *minecraft = local_player->minecraft;
|
||||||
|
TextEditScreen *screen = TextEditScreen::allocate();
|
||||||
|
screen = screen->constructor((SignTileEntity *) sign);
|
||||||
|
minecraft->setScreen((Screen *) screen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
void _init_misc_ui() {
|
void _init_misc_ui() {
|
||||||
// Food Overlay
|
// Food Overlay
|
||||||
@ -327,4 +337,10 @@ void _init_misc_ui() {
|
|||||||
overwrite_calls(Minecraft_grabMouse, Minecraft_grabMouse_injection);
|
overwrite_calls(Minecraft_grabMouse, Minecraft_grabMouse_injection);
|
||||||
overwrite_calls(Minecraft_handleMouseDown, Minecraft_handleMouseDown_injection);
|
overwrite_calls(Minecraft_handleMouseDown, Minecraft_handleMouseDown_injection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Signs
|
||||||
|
if (feature_has("Enable Sign Screen", server_disabled)) {
|
||||||
|
// Fix Signs
|
||||||
|
overwrite_calls(LocalPlayer_openTextEdit, LocalPlayer_openTextEdit_injection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
# `readdir` Mod
|
|
||||||
This mod fixes a small bug where the contents of directories cannot be read on a 64-bit filesystem. This notably broke the world selection screen.
|
|
@ -1,2 +0,0 @@
|
|||||||
# `sign` Mod
|
|
||||||
This mod fixes sign placement.
|
|
@ -1,32 +0,0 @@
|
|||||||
#include <vector>
|
|
||||||
|
|
||||||
#include <libreborn/patch.h>
|
|
||||||
|
|
||||||
#include <symbols/minecraft.h>
|
|
||||||
|
|
||||||
#include <mods/init/init.h>
|
|
||||||
#include <mods/feature/feature.h>
|
|
||||||
#include <mods/sign/sign.h>
|
|
||||||
|
|
||||||
// Open Sign Screen
|
|
||||||
static void LocalPlayer_openTextEdit_injection(__attribute__((unused)) LocalPlayer_openTextEdit_t original, LocalPlayer *local_player, TileEntity *sign) {
|
|
||||||
if (sign->type == 4) {
|
|
||||||
Minecraft *minecraft = local_player->minecraft;
|
|
||||||
TextEditScreen *screen = TextEditScreen::allocate();
|
|
||||||
screen = screen->constructor((SignTileEntity *) sign);
|
|
||||||
minecraft->setScreen((Screen *) screen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store Text Input
|
|
||||||
void sign_key_press(const char key) {
|
|
||||||
Keyboard::_inputText.push_back(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init
|
|
||||||
void init_sign() {
|
|
||||||
if (feature_has("Fix Sign Placement", server_disabled)) {
|
|
||||||
// Fix Signs
|
|
||||||
overwrite_calls(LocalPlayer_openTextEdit, LocalPlayer_openTextEdit_injection);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user