diff --git a/Minecraft.Client/TerrainParticle.cpp b/Minecraft.Client/TerrainParticle.cpp index b0cb0511..ef10f8f9 100644 --- a/Minecraft.Client/TerrainParticle.cpp +++ b/Minecraft.Client/TerrainParticle.cpp @@ -18,6 +18,13 @@ TerrainParticle::TerrainParticle(Level *level, double x, double y, double z, dou shared_ptr TerrainParticle::init(int x, int y, int z, int data) // 4J - added data parameter { if (tile == nullptr) return nullptr; // tu31 tutorial world fix + // double check particle texture cause sunflowers are dysfunctional for whatever reason + Icon *resolvedIcon = tile->getTexture(level, x, y, z, 0); + if (resolvedIcon != nullptr) + { + setTex(Minecraft::GetInstance()->textures, resolvedIcon); + } + if (tile == Tile::grass) return dynamic_pointer_cast( shared_from_this() ); int col = tile->getColor(level, x, y, z, data); // 4J - added data parameter rCol *= ((col >> 16) & 0xff) / 255.0f; diff --git a/Minecraft.Client/TileRenderer.cpp b/Minecraft.Client/TileRenderer.cpp index 55c6e8e3..c6001c37 100644 --- a/Minecraft.Client/TileRenderer.cpp +++ b/Minecraft.Client/TileRenderer.cpp @@ -12,6 +12,7 @@ #include "../Minecraft.World/JavaMath.h" #include "Tesselator.h" #include "EntityTileRenderer.h" +#include "LevelRenderer.h" #include "Options.h" #include "../Minecraft.World/TallGrass2.h" @@ -4199,6 +4200,10 @@ bool TileRenderer::tesselateCrossInWorld( Tile* tt, int x, int y, int z ) { const int data = level->getData(x, y, z); const bool isUpper = (data & TallGrass2::UPPER_BIT) != 0; + if (isUpper && level->getTile(x, y - 1, z) != Tile::double_plant_Id) + { + return true; + } int lowerData = data; if (isUpper && level->getTile(x, y - 1, z) == Tile::double_plant_Id) { @@ -4209,7 +4214,8 @@ bool TileRenderer::tesselateCrossInWorld( Tile* tt, int x, int y, int z ) if (isUpper && variant == TallGrass2::SUNFLOWER) { // cut off stem height (i think thats how it was in the original LCE?) - tesselateCrossStemHeight(tt, data, xt, yt, zt, 0.875f); + const int stemRenderData = (lowerData & ~TallGrass2::UPPER_BIT) | TallGrass2::UPPER_BIT; + tesselateCrossStemHeight(tt, stemRenderData, xt, yt, zt, 0.875f); TallGrass2* tallGrass = static_cast(tt); Icon* frontTex = tallGrass->getSunflowerHeadFrontIcon(); Icon* backTex = tallGrass->getSunflowerHeadBackIcon(); diff --git a/Minecraft.World/TallGrass2.cpp b/Minecraft.World/TallGrass2.cpp index fb2a7977..53c5245e 100644 --- a/Minecraft.World/TallGrass2.cpp +++ b/Minecraft.World/TallGrass2.cpp @@ -8,10 +8,9 @@ #include "../Minecraft.Client/Minecraft.h" #include "net.minecraft.stats.h" - // tranq please i beg you make sure the ids are correct so we dont get corrupted worlds from people static const int TILE_IDS[TallGrass2::VARIANT_COUNT] = { - IDS_TILE_SUNFLOWER, // 0 - Sunflower, not implemented yet + IDS_TILE_SUNFLOWER, // 0 - Sunflower IDS_TILE_LILAC, // 1 - Lilac IDS_TILE_DOUBLE_TALL_GRASS, // 2 - Tall Grass IDS_TILE_LARGE_FERN, // 3 - Large Fern @@ -20,7 +19,7 @@ static const int TILE_IDS[TallGrass2::VARIANT_COUNT] = { }; static const int DESCRIPTION_IDS[TallGrass2::VARIANT_COUNT] = { - IDS_DESC_SUNFLOWER, // 0 - Sunflower, not implemented yet + IDS_DESC_SUNFLOWER, // 0 - Sunflower IDS_DESC_LILAC, // 1 - Lilac IDS_DESC_DOUBLE_TALL_GRASS, // 2 - Tall Grass IDS_DESC_LARGE_FERN, // 3 - Large Fern @@ -133,7 +132,7 @@ void TallGrass2::registerIcons(IconRegister* iconRegister) } // sunflower item - icon = iconHeadFront[SUNFLOWER] != nullptr ? iconHeadFront[SUNFLOWER] : iconTop[TALL_GRASS]; + icon = iconHeadFront[SUNFLOWER] != nullptr ? iconHeadFront[SUNFLOWER] : iconTop[SUNFLOWER]; } @@ -326,11 +325,12 @@ void TallGrass2::tick(Level* level, int x, int y, int z, Random* random) int TallGrass2::getResource(int data, Random* random, int playerBonusLevel) { (void)playerBonusLevel; + if ((data & UPPER_BIT) != 0) return -1; int variant = data & ~UPPER_BIT; if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; - if (variant == TALL_GRASS) + if (variant == TALL_GRASS || variant == LARGE_FERN) { if (random->nextInt(8) == 0) { @@ -338,6 +338,7 @@ int TallGrass2::getResource(int data, Random* random, int playerBonusLevel) } return -1; } + return Tile::double_plant_Id; } @@ -365,13 +366,16 @@ shared_ptr TallGrass2::getSilkTouchItemInstance(int data) void TallGrass2::playerDestroy(Level* level, shared_ptr player, int x, int y, int z, int data) { - if ((data & ~UPPER_BIT) == SUNFLOWER) + int resolvedVariant = getVariant(level, x, y, z); + int resolvedData = (data & UPPER_BIT) | resolvedVariant; + + if (resolvedVariant == SUNFLOWER) { if (!level->isClientSide && !player->abilities.instabuild) { player->awardStat( GenericStats::blocksMined(id), - GenericStats::param_blocksMined(id, data, 1)); + GenericStats::param_blocksMined(id, resolvedData, 1)); popResource(level, x, y, z, std::make_shared(this, 1, SUNFLOWER)); } @@ -384,18 +388,17 @@ void TallGrass2::playerDestroy(Level* level, shared_ptr player, int x, i { player->awardStat( GenericStats::blocksMined(id), - GenericStats::param_blocksMined(id, data, 1)); + GenericStats::param_blocksMined(id, resolvedData, 1)); - if ((data & UPPER_BIT) == 0) + if ((resolvedData & UPPER_BIT) == 0) { - int variant = data & ~UPPER_BIT; - popResource(level, x, y, z, std::make_shared(this, 1, variant)); + popResource(level, x, y, z, std::make_shared(this, 1, resolvedVariant)); } } else { - Tile::playerDestroy(level, player, x, y, z, data); + Tile::playerDestroy(level, player, x, y, z, resolvedData); } }