Added Foliage and Grass Color tinting, Started Basic Work on restoring ravines, New Option to Toggle Tinting.

This commit is contained in:
Shredder
2026-04-03 14:55:33 +05:00
parent eac71a93d1
commit ff5c57f6ba
27 changed files with 241 additions and 57 deletions

View File

@@ -0,0 +1,13 @@
#include "FoliageColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool FoliageColor::useTint = true;
int FoliageColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* FoliageColor::pixels = nullptr;

View File

@@ -6,31 +6,49 @@
class FoliageColor
{
public:
// static void init(int[] pixels) {
// FoliageColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static bool useTint;
static int getEvergreenColor() {
return 0x619961;
}
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
static int getBirchColor() {
return 0x80a755;
}
// static void init(int[] pixels) {
// FoliageColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static int getDefaultColor() {
return 0x48b518;
}
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
static int getEvergreenColor() {
return 0x619961;
}
static int getBirchColor() {
return 0x80a755;
}
static int getDefaultColor() {
return 0xFFFFFF;
}
private:
//static int pixels[256*256];
// static int pixels[256*256];
static int* pixels;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/

View File

@@ -0,0 +1,13 @@
#include "GrassColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool GrassColor::useTint = true;
int GrassColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* GrassColor::pixels = nullptr;

View File

@@ -0,0 +1,42 @@
#ifndef NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
#define NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
//package net.minecraft.world.level;
class GrassColor
{
public:
static bool useTint;
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
// static void init(int[] pixels) {
// GrassColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
private:
// static int pixels[256*256];
static int* pixels;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__*/

View File

@@ -3,8 +3,9 @@
//package net.minecraft.world.level;
/*
class BiomeSource;
/*
class TileEntity;
*/
class Material;
@@ -29,7 +30,7 @@ public:
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
virtual bool isSolidBlockingTile(int x, int i, int z) = 0;
//virtual BiomeSource* getBiomeSource() = 0;
virtual BiomeSource* getBiomeSource() = 0;
virtual Biome* getBiome(int x, int z) = 0;
};

View File

@@ -5,6 +5,7 @@
#include "LevelSource.h"
class Level;
class Material;
class LevelChunk;
@@ -27,6 +28,7 @@ public:
int getData(int x, int y, int z);
const Material* getMaterial(int x, int y, int z);
Biome* getBiome(int x, int z);
BiomeSource* getBiomeSource() override;
private:
int xc1, zc1;
LevelChunk*** chunks;

View File

@@ -149,13 +149,7 @@ Feature* Biome::getGrassFeature( Random* random ) {
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
}
Feature* Biome::getBasicTreeFeature( Random* random )
{
if (random->nextInt(10) == 0) {
return new BasicTree(false);
}
}
Biome* Biome::getBiome( float temperature, float downfall )

View File

@@ -71,7 +71,6 @@ public:
virtual Feature* getTreeFeature(Random* random);
virtual Feature* getGrassFeature(Random* random);
virtual Feature* getBasicTreeFeature(Random* random);
static Biome* getBiome(float temperature, float downfall);
static Biome* _getBiome(float temperature, float downfall);

View File

@@ -69,11 +69,11 @@ Biome* BiomeSource::getBiome( int x, int z )
return getBiomeBlock(x, z, 1, 1)[0];
}
//float BiomeSource::getTemperature( int x, int z )
//{
// temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
// return temperatures[0];
//}
float BiomeSource::getTemperature( int x, int z )
{
temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
return temperatures[0];
}
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
{
@@ -123,7 +123,7 @@ Biome** BiomeSource::getBiomeBlock( Biome** biomes__, int x, int z, int w, int h
return biomes;
}
float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z, int w, int h )
float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, int w, int h )
{
//LOGI("gTempBlock: 1\n");
//const int size = w * h;
@@ -164,8 +164,8 @@ float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z
return temperatures;
}
//float* BiomeSource::getDownfallBlock( /*float* downfalls__,*/ int x, int z, int w, int h )
//{
float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, int h )
{
// //const int size = w * h;
// //if (lenDownfalls < size) {
// // delete[] downfalls;
@@ -173,6 +173,6 @@ float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z
// // lenDownfalls = size;
// //}
//
// downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
// return downfalls;
//}
downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
return downfalls;
}

View File

@@ -31,13 +31,13 @@ public:
virtual Biome* getBiome(const ChunkPos& chunk);
virtual Biome* getBiome(int x, int z);
//virtual float getTemperature(int x, int z);
virtual float getTemperature(int x, int z);
// Note: The arrays returned here are temporary in the meaning that their
// contents might change in the future. If you need to SAVE the
// values, do a shallow copy to an array of your own.
virtual float* getTemperatureBlock(/*float* temperatures, */ int x, int z, int w, int h);
//virtual float* getDownfallBlock(/*float* downfalls, */int x, int z, int w, int h);
virtual float* getTemperatureBlock(float* temperatures, int x, int z, int w, int h);
virtual float* getDownfallBlock(float* downfalls, int x, int z, int w, int h);
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
private:

View File

@@ -1,4 +1,4 @@
#if 0
#include "CanyonFeature.h"
@@ -138,7 +138,7 @@ void CanyonFeature::addTunnel( int xOffs, int zOffs, unsigned char* blocks, floa
}
}
void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs, char* blocks )
void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks)
{
if (random.nextInt(15) != 0) return;
@@ -151,6 +151,7 @@ void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs,
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
}
/* //private
@@ -165,4 +166,4 @@ void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs,
for (int z = zOffs - r; z <= zOffs + r; z++) {
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
#endif

View File

@@ -1,7 +1,7 @@
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
#if 0
//package net.minecraft.world.level.levelgen;
@@ -12,8 +12,8 @@ class CanyonFeature: public LargeFeature {
/*protected*/
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
/*protected*/
void addFeature(Level level, int x, int z, int xOffs, int zOffs, char* blocks);
void addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks);
};
#endif
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/

View File

@@ -473,7 +473,7 @@ void RandomLevelSource::postProcess(ChunkSource* parent, int xt, int zt) {
MobSpawner::postProcessSpawnMobs(level, biome, xo + 8, zo + 8, 16, 16, &random);
//LOGI("Reading temp: 1\n");
float* temperatures = level->getBiomeSource()->getTemperatureBlock(/*NULL,*/ xo + 8, zo + 8, 16, 16);
float* temperatures = level->getBiomeSource()->getTemperatureBlock(NULL, xo + 8, zo + 8, 16, 16);
for (int x = xo + 8; x < xo + 8 + 16; x++)
for (int z = zo + 8; z < zo + 8 + 16; z++) {
int xp = x - (xo + 8);

View File

@@ -1,6 +1,11 @@
#include "GrassTile.h"
#include "../material/Material.h"
#include "../../entity/item/ItemEntity.h"
#include "../GrassColor.h"
#include "../Level.h"
#include "../LevelSource.h"
#include "../biome/BiomeSource.h"
#include "../../../client/Minecraft.h"
GrassTile::GrassTile(int id)
: super(id, Material::dirt)
@@ -24,11 +29,18 @@ int GrassTile::getTexture( int face, int data ) {
}
int GrassTile::getColor( LevelSource* level, int x, int y, int z ) {
//level.getBiomeSource().getBiomeBlock(x, z, 1, 1);
//float temp = level.getBiomeSource().temperatures[0];
//float rain = level.getBiomeSource().downfalls[0];
return 0x339933;//GrassColor.get(temp, rain);
if(!GrassColor::useTint){
return 0x339933;
}
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
float temp = level->getBiomeSource()->temperatures[0];
float rain = level->getBiomeSource()->downfalls[0];
// return 0x339933;//GrassColor.get(temp, rain); // we need to hook this up with OPTION_FOLIAGE_TINT
return GrassColor::get(temp, rain);
}
void GrassTile::tick( Level* level, int x, int y, int z, Random* random ) {

View File

@@ -14,6 +14,7 @@ class GrassTile: public Tile
{
typedef Tile super;
public:
static const int MIN_BRIGHTNESS = 4;
GrassTile(int id);

View File

@@ -9,6 +9,8 @@
#include "../../item/Item.h"
#include "../../item/ItemInstance.h"
#include "../FoliageColor.h"
#include "../LevelSource.h"
#include "../biome/BiomeSource.h"
class Entity;
@@ -54,8 +56,16 @@ public:
if (data == BIRCH_LEAF) {
return FoliageColor::getBirchColor();
}
if (!FoliageColor::useTint){
return FoliageColor::getDefaultColor();
}
return FoliageColor::getDefaultColor();
// return FoliageColor::getDefaultColor(); we need to hook this up with OPTION_FOLIAGE_TINT
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
float temperature = level->getBiomeSource()->temperatures[0];
float rainfall = level->getBiomeSource()->downfalls[0];
return FoliageColor::get(temperature, rainfall);
}
void onRemove(Level* level, int x, int y, int z) {