diff --git a/launcher/src/client/available-feature-flags b/launcher/src/client/available-feature-flags index e987638..7c7a72c 100644 --- a/launcher/src/client/available-feature-flags +++ b/launcher/src/client/available-feature-flags @@ -46,3 +46,4 @@ FALSE Disable Speed Bridging FALSE Disable Creative Mode Mining Delay FALSE Add Biome Colors To Grass TRUE Generate Caves +FALSE Night Vision diff --git a/mods/src/misc/misc.c b/mods/src/misc/misc.c index 1bc8d6a..5d49fce 100644 --- a/mods/src/misc/misc.c +++ b/mods/src/misc/misc.c @@ -390,6 +390,11 @@ static void RandomLevelSource_buildSurface_injection(unsigned char *random_level (*LargeCaveFeature_apply)(cave_feature, random_level_source, level, chunk_x, chunk_y, chunk_data, 0); } +// Night Vision +static float LevelSource_getBrightness_injection(__attribute__((unused)) unsigned char *level_source, __attribute__((unused)) int32_t x, __attribute__((unused)) int32_t y, __attribute__((unused)) int32_t z) { + return 1.0f; +} + // Init static void nop() { } @@ -506,6 +511,12 @@ void init_misc() { overwrite_calls((void *) RandomLevelSource_buildSurface, (void *) RandomLevelSource_buildSurface_injection); } + // Night Vision + if (feature_has("Night Vision", server_disabled)) { + overwrite((void *) Level_getBrightness, (void *) LevelSource_getBrightness_injection); + overwrite((void *) Region_getBrightness, (void *) LevelSource_getBrightness_injection); + } + // Init C++ And Logging _init_misc_cpp(); _init_misc_logging(); diff --git a/symbols/include/symbols/minecraft.h b/symbols/include/symbols/minecraft.h index b611ed5..fa41843 100644 --- a/symbols/include/symbols/minecraft.h +++ b/symbols/include/symbols/minecraft.h @@ -501,6 +501,13 @@ static void *SurvivalMode = (void *) 0x1b7d8; typedef uint32_t (*LevelData_getSpawnMobs_t)(unsigned char *level_data); static LevelData_getSpawnMobs_t LevelData_getSpawnMobs = (LevelData_getSpawnMobs_t) 0xbabec; +// LevelSource + +typedef unsigned char *(*LevelSource_getBiome_t)(unsigned char *level_source, int32_t x, int32_t z); +static uint32_t LevelSource_getBiome_vtable_offset = 0x24; + +typedef float (*LevelSource_getBrightness_t)(unsigned char *level_source, int32_t x, int32_t y, int32_t z); + // Level typedef void (*Level_saveLevelData_t)(unsigned char *level); @@ -518,12 +525,13 @@ static Level_getMaterial_t Level_getMaterial = (Level_getMaterial_t) 0xa27f8; typedef HitResult (*Level_clip_t)(unsigned char *level, unsigned char *param_1, unsigned char *param_2, bool clip_liquids, bool param_3); static Level_clip_t Level_clip = (Level_clip_t) 0xa3db0; +static LevelSource_getBrightness_t Level_getBrightness = (LevelSource_getBrightness_t) 0xa3b84; + static uint32_t Level_players_property_offset = 0x60; // std::vector -// LevelSource +// Region -typedef unsigned char *(*LevelSource_getBiome_t)(unsigned char *level_source, int32_t x, int32_t z); -static uint32_t LevelSource_getBiome_vtable_offset = 0x24; +static LevelSource_getBrightness_t Region_getBrightness = (LevelSource_getBrightness_t) 0xadaa8; // Material