Partly added leaves. just need to fix colors

This commit is contained in:
Lord Cambion 2026-03-17 17:53:23 +01:00
parent ea2f6daf41
commit 566570c776
13 changed files with 220 additions and 2 deletions

View file

@ -207,6 +207,8 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM_AUX(Tile::leaves_Id, LeafTile::EVERGREEN_LEAF)
ITEM_AUX(Tile::leaves_Id, LeafTile::BIRCH_LEAF)
ITEM_AUX(Tile::leaves_Id, LeafTile::JUNGLE_LEAF)
ITEM_AUX(Tile::leaves2_Id, LeafTile2::ACACIA_LEAF)
ITEM_AUX(Tile::leaves2_Id, LeafTile2::DARK_OAK_LEAF)
ITEM(Tile::vine)
ITEM(Tile::waterLily_Id)
ITEM(Tile::torch_Id)

View file

@ -1000,6 +1000,8 @@ void PreStitchedTextureMap::loadUVs()
ADD_ICON(20, 8, L"log_acacia");
ADD_ICON(20, 9, L"log_acacia_top");
ADD_ICON(20, 10, L"planks_acacia");
ADD_ICON(20, 11, L"leaves_acacia");
ADD_ICON(20, 12, L"leaves_acacia_opaque");
ADD_ICON(20, 14, L"red_sand");
ADD_ICON(20, 15, L"red_sandstone_top");
@ -1008,6 +1010,8 @@ void PreStitchedTextureMap::loadUVs()
ADD_ICON(21, 8, L"log_dark");
ADD_ICON(21, 9, L"log_dark_top");
ADD_ICON(21, 10, L"planks_dark");
ADD_ICON(21, 11, L"leaves_dark_oak");
ADD_ICON(21, 12, L"leaves_dark_oak_opaque");
ADD_ICON(21, 14, L"red_sandstone_bottom");
ADD_ICON(21, 15, L"red_sandstone_normal");

View file

@ -1,6 +1,7 @@
#pragma once
#include "TransparentTile.h"
class IconRegister;
class Random;
class ChunkRebuildData;

View file

@ -0,0 +1,101 @@
#include "stdafx.h"
#include "LeafTile2.h"
#include "net.minecraft.world.level.tile.h"
#include "net.minecraft.world.level.h"
#include "net.minecraft.world.item.h"
#include "net.minecraft.world.entity.player.h"
#include "net.minecraft.stats.h"
#include "net.minecraft.world.level.biome.h"
#include "FoliageColor.h"
#include "IconRegister.h"
const unsigned int LeafTile2::LEAF2_NAMES[LEAF2_NAMES_SIZE] = {
IDS_TILE_LEAVES_BIRCH,
IDS_TILE_LEAVES_SPRUCE
};
const wstring LeafTile2::TEXTURES[2][2] = {
{ L"leaves_acacia", L"leaves_dark_oak" }, // Indice 0: Fancy
{ L"leaves_acacia_opaque", L"leaves_dark_oak_opaque" } // Indice 1: Veloce/Opaca
};
LeafTile2::LeafTile2(int id) : LeafTile(id)
{
// Non serve fare checkBuffer qui, ci pensa già la classe padre LeafTile!
}
Icon *LeafTile2::getTexture(int face, int data)
{
int type = data & 3;
if (type >= LEAF2_NAMES_SIZE) type = 0;
// isSolidRender() in LeafTile restituisce 'true' se la grafica è su Veloce/Opaca.
// Quindi se è true usiamo l'indice 1, se è false (Trasparente) usiamo l'indice 0.
int textureSet = isSolidRender(false) ? 1 : 0;
return icons[textureSet][type];
}
unsigned int LeafTile2::getDescriptionId(int iData)
{
int type = iData & 3;
if (type < 0 || type >= LEAF2_NAMES_SIZE) type = 0;
return LeafTile2::LEAF2_NAMES[type];
}
void LeafTile2::registerIcons(IconRegister *iconRegister)
{
for (int fancy = 0; fancy < 2; fancy++)
{
for (int i = 0; i < 2; i++)
{
icons[fancy][i] = iconRegister->registerIcon(TEXTURES[fancy][i]);
}
}
}
int LeafTile2::getColor(int data)
{
// In inventario o in mano, l'Acacia e la Dark Oak usano il verde base
return FoliageColor::getDefaultColor();
}
int LeafTile2::getColor(LevelSource *level, int x, int y, int z, int data)
{
// Codice di blending per il colore del bioma (copiato dal tuo LeafTile.cpp)
int totalRed = 0;
int totalGreen = 0;
int totalBlue = 0;
for (int oz = -1; oz <= 1; oz++)
{
for (int ox = -1; ox <= 1; ox++)
{
int foliageColor = level->getBiome(x + ox, z + oz)->getFolageColor(); // Attento, nel tuo engine si chiama getFolageColor() senza la 'i'
totalRed += (foliageColor & 0xff0000) >> 16;
totalGreen += (foliageColor & 0xff00) >> 8;
totalBlue += (foliageColor & 0xff);
}
}
return (((totalRed / 9) & 0xFF) << 16) | (((totalGreen / 9) & 0xFF) << 8) | (((totalBlue / 9) & 0xFF));
}
void LeafTile2::playerDestroy(Level *level, shared_ptr<Player> player, int x, int y, int z, int data)
{
// Se il giocatore usa le cesoie, vogliamo droppare "leaves2" (ID 161) e non "leaves" (ID 18)
if (!level->isClientSide && player->getSelectedItem() != nullptr && player->getSelectedItem()->id == Item::shears->id)
{
player->awardStat(
GenericStats::blocksMined(id),
GenericStats::param_blocksMined(id, data, 1)
);
popResource(level, x, y, z, std::make_shared<ItemInstance>(Tile::leaves2_Id, 1, data & 3));
}
else
{
// Altrimenti usa la distruzione standard di TransparentTile
TransparentTile::playerDestroy(level, player, x, y, z, data);
}
}

View file

@ -0,0 +1,33 @@
#pragma once
#include "LeafTile.h"
class IconRegister;
class LeafTile2 : public LeafTile
{
public:
static const int ACACIA_LEAF = 0;
static const int DARK_OAK_LEAF = 1;
static const int LEAF2_NAMES_SIZE = 2;
static const unsigned int LEAF2_NAMES[LEAF2_NAMES_SIZE];
private:
//[0] = Fancy (Trasparenti), [1] = Fast (Opache)
static const wstring TEXTURES[2][2];
Icon *icons[2][2];
public:
LeafTile2(int id);
virtual Icon *getTexture(int face, int data);
virtual unsigned int getDescriptionId(int iData = -1);
virtual void registerIcons(IconRegister *iconRegister);
// Override per la colorazione del bioma
virtual int getColor(int data);
virtual int getColor(LevelSource *level, int x, int y, int z, int data);
// Override per permettere alle cesoie di droppare il blocco giusto (leaves2)
virtual void playerDestroy(Level *level, shared_ptr<Player> player, int x, int y, int z, int data);
};

View file

@ -0,0 +1,38 @@
#include "stdafx.h"
#include "LeafTileItem2.h"
#include "LeafTile2.h"
#include "net.minecraft.world.level.tile.h"
#include "FoliageColor.h"
LeafTileItem2::LeafTileItem2(int id) : LeafTileItem(id)
{
setMaxDamage(0);
setStackedByData(true);
}
int LeafTileItem2::getLevelDataForAuxValue(int auxValue)
{
return auxValue;
}
Icon *LeafTileItem2::getIcon(int itemAuxValue)
{
return Tile::leaves2->getTexture(0, itemAuxValue);
}
unsigned int LeafTileItem2::getDescriptionId(shared_ptr<ItemInstance> instance)
{
int auxValue = instance->getAuxValue();
if (auxValue < 0 || auxValue >= LeafTile2::LEAF2_NAMES_SIZE)
{
auxValue = 0;
}
return LeafTile2::LEAF2_NAMES[auxValue];
}
int LeafTileItem2::getColor(shared_ptr<ItemInstance> item, int spriteLayer)
{
return FoliageColor::getDefaultColor();
}

View file

@ -0,0 +1,14 @@
#pragma once
#include "LeafTileItem.h"
class LeafTileItem2 : public LeafTileItem
{
public:
LeafTileItem2(int id);
virtual int getLevelDataForAuxValue(int auxValue);
virtual Icon *getIcon(int itemAuxValue);
virtual int getColor(shared_ptr<ItemInstance> item, int spriteLayer) override;
virtual unsigned int getDescriptionId(shared_ptr<ItemInstance> instance);
};

View file

@ -2490,6 +2490,8 @@
<ClInclude Include="HorseInventoryMenu.h" />
<ClInclude Include="HtmlString.h" />
<ClInclude Include="LargeFireball.h" />
<ClInclude Include="LeafTile2.h" />
<ClInclude Include="LeafTileItem2.h" />
<ClInclude Include="LeashItem.h" />
<ClInclude Include="MapCloningRecipe.h" />
<ClInclude Include="MapExtendingRecipe.h" />
@ -3566,6 +3568,8 @@
<ClCompile Include="HorseInventoryMenu.cpp" />
<ClCompile Include="HtmlString.cpp" />
<ClCompile Include="LargeFireball.cpp" />
<ClCompile Include="LeafTile2.cpp" />
<ClCompile Include="LeafTileItem2.cpp" />
<ClCompile Include="LeashItem.cpp" />
<ClCompile Include="MinecartChest.cpp" />
<ClCompile Include="MinecartContainer.cpp" />

View file

@ -818,6 +818,9 @@
<ClCompile Include="ZoneIo.cpp" />
<ClCompile Include="ZoomLayer.cpp" />
<ClCompile Include="SeaLanternTile.cpp" />
<ClCompile Include="PackedIceTile.cpp" />
<ClCompile Include="LeafTile2.cpp" />
<ClCompile Include="LeafTileItem2.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="AABB.h" />
@ -1805,6 +1808,9 @@
<ClInclude Include="ZoomLayer.h" />
<ClInclude Include="Rose.h" />
<ClInclude Include="SeaLanternTile.h" />
<ClInclude Include="PackedIceTile.h" />
<ClInclude Include="LeafTile2.h" />
<ClInclude Include="LeafTileItem2.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\Minecraft.Client\Xbox\res\audio\Minecraft.xgs" />

View file

@ -16,8 +16,7 @@
#include "net.minecraft.world.h"
#include "net.minecraft.h"
#include "Tile.h"
#include "SeaLanternTile.h"
#include "SeaLanternTile.cpp"
wstring Tile::TILE_DESCRIPTION_PREFIX = L"Tile.";
@ -64,6 +63,7 @@ Tile *Tile::ironOre = nullptr;
Tile *Tile::coalOre = nullptr;
Tile *Tile::treeTrunk = nullptr;
LeafTile *Tile::leaves = nullptr;
LeafTile2 *Tile::leaves2 = nullptr;
Tile *Tile::sponge = nullptr;
Tile *Tile::glass = nullptr;
Tile *Tile::lapisOre = nullptr;
@ -311,6 +311,7 @@ void Tile::staticCtor()
Tile::treeTrunk = (new TreeTile(17))->setDestroyTime(2.0f) ->setSoundType(Tile::SOUND_WOOD)->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->sendTileData()->setUseDescriptionId(IDS_DESC_LOG);
// 4J - for leaves, have specified that only the data bits that encode the type of leaf are important to be sent
Tile::leaves = static_cast<LeafTile *>((new LeafTile(18))->setDestroyTime(0.2f)->setLightBlock(1)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"leaves")->setDescriptionId(IDS_TILE_LEAVES)->sendTileData(LeafTile::LEAF_TYPE_MASK)->setUseDescriptionId(IDS_DESC_LEAVES));
Tile::leaves2 = static_cast<LeafTile2 *>((new LeafTile2(161))->setDestroyTime(0.2f)->setLightBlock(1)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"leaves_acacia")->setDescriptionId(IDS_TILE_LEAVES)->sendTileData(LeafTile::LEAF_TYPE_MASK)->setUseDescriptionId(IDS_DESC_LEAVES));
Tile::sponge = (new Sponge(19)) ->setDestroyTime(0.6f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"sponge")->setDescriptionId(IDS_TILE_SPONGE)->setUseDescriptionId(IDS_DESC_SPONGE)->sendTileData();
Tile::glass = (new GlassTile(20, Material::glass, false)) ->setDestroyTime(0.3f)->setSoundType(Tile::SOUND_GLASS)->setIconName(L"glass")->setDescriptionId(IDS_TILE_GLASS)->setUseDescriptionId(IDS_DESC_GLASS);
@ -524,6 +525,7 @@ void Tile::staticCtor()
Item::items[woodSlab_Id] = ( new StoneSlabTileItem(Tile::woodSlab_Id - 256, Tile::woodSlabHalf, Tile::woodSlab, true))->setIconName(L"woodSlab")->setDescriptionId(IDS_DESC_WOODSLAB)->setUseDescriptionId(IDS_DESC_WOODSLAB);
Item::items[sapling_Id] = ( new MultiTextureTileItem(Tile::sapling_Id - 256, Tile::sapling, Sapling::SAPLING_NAMES, 4) )->setIconName(L"sapling")->setDescriptionId(IDS_TILE_SAPLING)->setUseDescriptionId(IDS_DESC_SAPLING);
Item::items[leaves_Id] = ( new LeafTileItem(Tile::leaves_Id - 256) )->setIconName(L"leaves")->setDescriptionId(IDS_TILE_LEAVES)->setUseDescriptionId(IDS_DESC_LEAVES);
Item::items[leaves2_Id] = ( new LeafTileItem(Tile::leaves2_Id - 256) )->setIconName(L"leaves_acacia")->setDescriptionId(IDS_TILE_LEAVES)->setUseDescriptionId(IDS_DESC_LEAVES);
Item::items[vine_Id] = ( new ColoredTileItem(Tile::vine_Id - 256, false))->setDescriptionId(IDS_TILE_VINE)->setUseDescriptionId(IDS_DESC_VINE);
int idsData[3] = {IDS_TILE_SHRUB, IDS_TILE_TALL_GRASS, IDS_TILE_FERN};
intArray ids = intArray(idsData, 3);
@ -542,6 +544,7 @@ void Tile::staticCtor()
Item::items[tree2Trunk_Id] = (new MultiTextureTileItem(Tile::tree2Trunk_Id - 256, tree2Trunk, (int*)TreeTile2::TREE_NAMES, TreeTile2::TREE_NAMES_LENGTH))->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->setUseDescriptionId(IDS_DESC_LOG);
Item::items[sponge_Id] = (new MultiTextureTileItem(Tile::sponge_Id - 256, sponge, (int*)Sponge::SPONGE_NAMES, Sponge::SPONGE_NAMES_LENGTH))->setIconName(L"sponge")->setDescriptionId(IDS_TILE_SPONGE)->setUseDescriptionId(IDS_DESC_SPONGE);
for (int i = 0; i < 256; i++)
{
if ( Tile::tiles[i] != nullptr )
@ -858,8 +861,10 @@ Icon *Tile::getTexture(LevelSource *level, int x, int y, int z, int face)
if(opaque)
{
Tile::leaves->setFancy(false);
Tile::leaves2->setFancy(false);
icon = getTexture(face, tileData);
Tile::leaves->setFancy(true);
Tile::leaves2->setFancy(true);
}
else
{
@ -1643,6 +1648,7 @@ const int Tile::ironOre_Id;
const int Tile::coalOre_Id;
const int Tile::treeTrunk_Id;
const int Tile::leaves_Id;
const int Tile::leaves2_Id;
const int Tile::sponge_Id;
const int Tile::glass_Id;
const int Tile::lapisOre_Id;

View file

@ -3,10 +3,13 @@
#include "Vec3.h"
#include "Definitions.h"
#include "SoundTypes.h"
using namespace std;
class GrassTile;
class LeafTile;
class LeafTile2;
class TallGrass;
class DeadBushTile;
class FireTile;
@ -203,6 +206,8 @@ public:
static const int coalOre_Id = 16;
static const int treeTrunk_Id = 17;
static const int leaves_Id = 18;
static const int leaves2_Id = 161;
static const int sponge_Id = 19;
static const int glass_Id = 20;
@ -409,6 +414,7 @@ public:
static Tile *coalOre;
static Tile *treeTrunk;
static LeafTile *leaves;
static LeafTile2 *leaves2;
static Tile *sponge;
static Tile *glass;
static Tile *lapisOre;

View file

@ -21,6 +21,7 @@
#include "Item.h"
#include "ItemInstance.h"
#include "LeafTileItem.h"
#include "LeafTileItem2.h"
#include "MapItem.h"
#include "MinecartItem.h"
//#include "PaintingItem.h"

View file

@ -133,5 +133,7 @@
#include "SandTile.h"
#include "RedSandStoneTile.h"
#include "TreeTile2.h"
#include "SeaLanternTile.h"
#include "LeafTile2.h"
#include "PackedIceTile.h"