diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index aac10048..34e135b1 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -73,8 +73,8 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::treeTrunk_Id, TreeTile::SPRUCE_TRUNK) ITEM_AUX(Tile::treeTrunk_Id, TreeTile::BIRCH_TRUNK) ITEM_AUX(Tile::treeTrunk_Id, TreeTile::JUNGLE_TRUNK) - ITEM_AUX(Tile::treeTrunk_Id, TreeTile::ACACIA_TRUNK) - ITEM_AUX(Tile::treeTrunk_Id, TreeTile::DARK_TRUNK) + ITEM_AUX(Tile::tree2Trunk_Id, TreeTile2::ACACIA_TRUNK) + ITEM_AUX(Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK) ITEM(Tile::gravel_Id) ITEM(Tile::redBrick_Id) ITEM(Tile::mossyCobblestone_Id) diff --git a/Minecraft.World/RotatedPillarTile.h b/Minecraft.World/RotatedPillarTile.h index aff49821..76e52997 100644 --- a/Minecraft.World/RotatedPillarTile.h +++ b/Minecraft.World/RotatedPillarTile.h @@ -5,11 +5,11 @@ class RotatedPillarTile : public Tile { public: - static const int MASK_TYPE = 0x7; - static const int MASK_FACING = 0x18; - static const int FACING_Y = 0 << 3; - static const int FACING_X = 1 << 3; - static const int FACING_Z = 2 << 3; + static const int MASK_TYPE = 0x3; + static const int MASK_FACING = 0xC; + static const int FACING_Y = 0 << 2; + static const int FACING_X = 1 << 2; + static const int FACING_Z = 2 << 2; protected: Icon *iconTop; diff --git a/Minecraft.World/TreeTile.cpp b/Minecraft.World/TreeTile.cpp index 29d41823..e87ddebe 100644 --- a/Minecraft.World/TreeTile.cpp +++ b/Minecraft.World/TreeTile.cpp @@ -11,13 +11,11 @@ const unsigned int TreeTile::TREE_NAMES[ TreeTile::TREE_NAMES_LENGTH] = { IDS_TI IDS_TILE_LOG_SPRUCE, IDS_TILE_LOG_BIRCH, IDS_TILE_LOG_JUNGLE, - IDS_TILE_LOG_ACACIA, - IDS_TILE_LOG_DARK_OAK }; -const wstring TreeTile::TREE_STRING_NAMES[TreeTile::TREE_NAMES_LENGTH] = { L"oak", L"spruce", L"birch", L"jungle", L"acacia", L"dark" }; +const wstring TreeTile::TREE_STRING_NAMES[TreeTile::TREE_NAMES_LENGTH] = { L"oak", L"spruce", L"birch", L"jungle" }; -const wstring TreeTile::TREE_TEXTURES[] = { L"tree_side", L"tree_spruce", L"tree_birch", L"tree_jungle", L"tree_acacia", L"tree_dark" }; +const wstring TreeTile::TREE_TEXTURES[] = { L"tree_side", L"tree_spruce", L"tree_birch", L"tree_jungle"}; TreeTile::TreeTile(int id) : RotatedPillarTile(id, Material::wood) { diff --git a/Minecraft.World/TreeTile.h b/Minecraft.World/TreeTile.h index 829abdcf..a372e249 100644 --- a/Minecraft.World/TreeTile.h +++ b/Minecraft.World/TreeTile.h @@ -16,13 +16,13 @@ public: static const int ACACIA_TRUNK = 4; static const int DARK_TRUNK = 5; - static const int MASK_TYPE = 0x7; - static const int MASK_FACING = 0x18; - static const int FACING_Y = 0 << 3; - static const int FACING_X = 1 << 3; - static const int FACING_Z = 2 << 3; + static const int MASK_TYPE = 0x3; + static const int MASK_FACING = 0xC; + static const int FACING_Y = 0 << 2; + static const int FACING_X = 1 << 2; + static const int FACING_Z = 2 << 2; - static const int TREE_NAMES_LENGTH = 6; + static const int TREE_NAMES_LENGTH = 4; static const unsigned int TREE_NAMES[TREE_NAMES_LENGTH]; diff --git a/Minecraft.World/TreeTile2.cpp b/Minecraft.World/TreeTile2.cpp new file mode 100644 index 00000000..24f27081 --- /dev/null +++ b/Minecraft.World/TreeTile2.cpp @@ -0,0 +1,90 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.piston.h" +#include "net.minecraft.h" +#include "net.minecraft.world.h" +#include "LeafTile.h" + +#include "TreeTile2.h" + +const unsigned int TreeTile2::TREE_NAMES[TreeTile2::TREE_NAMES_LENGTH] = { IDS_TILE_LOG_ACACIA, IDS_TILE_LOG_DARK_OAK}; + +const wstring TreeTile2::TREE_STRING_NAMES[TreeTile2::TREE_NAMES_LENGTH] = { L"acacia", L"dark" }; + +const wstring TreeTile2::TREE_TEXTURES[] = { L"tree_acacia", L"tree_dark" }; + +TreeTile2::TreeTile2(int id) : RotatedPillarTile(id, Material::wood) +{ +} + +int TreeTile2::getResourceCount(Random* random) +{ + return 1; +} + +int TreeTile2::getResource(int data, Random* random, int playerBonusLevel) +{ + return Tile::tree2Trunk_Id; +} + +void TreeTile2::onRemove(Level* level, int x, int y, int z, int id, int data) +{ + int r = LeafTile::REQUIRED_WOOD_RANGE; + int r2 = r + 1; + + if (level->hasChunksAt(x - r2, y - r2, z - r2, x + r2, y + r2, z + r2)) + { + for (int xo = -r; xo <= r; xo++) + for (int yo = -r; yo <= r; yo++) + for (int zo = -r; zo <= r; zo++) + { + int t = level->getTile(x + xo, y + yo, z + zo); + if (t == Tile::leaves_Id) + { + int currentData = level->getData(x + xo, y + yo, z + zo); + if ((currentData & LeafTile::UPDATE_LEAF_BIT) == 0) + { + level->setData(x + xo, y + yo, z + zo, currentData | LeafTile::UPDATE_LEAF_BIT, Tile::UPDATE_NONE); + } + } + } + } +} + + +unsigned int TreeTile2::getDescriptionId(int iData /*= -1*/) +{ + int type = iData & MASK_TYPE; + if (type < 0 || type >= TreeTile2::TREE_NAMES_LENGTH) type = 0; + return TreeTile2::TREE_NAMES[type]; +} + +Icon* TreeTile2::getTypeTexture(int type) +{ + return icons_side[type]; +} + +Icon* TreeTile2::getTopTexture(int type) +{ + return icons_top[type]; +} + +int TreeTile2::getWoodType(int data) +{ + return data & MASK_TYPE; +} + +shared_ptr TreeTile2::getSilkTouchItemInstance(int data) +{ + // fix to avoid getting silktouched sideways logs + return std::make_shared(id, 1, getWoodType(data)); +} + +void TreeTile2::registerIcons(IconRegister* iconRegister) +{ + for (int i = 0; i < TREE_NAMES_LENGTH; i++) + { + icons_side[i] = iconRegister->registerIcon(getIconName() + L"_" + TREE_STRING_NAMES[i]); + icons_top[i] = iconRegister->registerIcon(getIconName() + L"_" + TREE_STRING_NAMES[i] + L"_top"); + } +} \ No newline at end of file diff --git a/Minecraft.World/TreeTile2.h b/Minecraft.World/TreeTile2.h new file mode 100644 index 00000000..ec097ce1 --- /dev/null +++ b/Minecraft.World/TreeTile2.h @@ -0,0 +1,54 @@ +#pragma once + +#include "RotatedPillarTile.h" + +class ChunkRebuildData; +class Player; + +class TreeTile2 : public RotatedPillarTile +{ + friend class Tile; + friend class ChunkRebuildData; +public: + static const int ACACIA_TRUNK = 0; + static const int DARK_TRUNK = 1; + + static const int MASK_TYPE = 0x3; + static const int MASK_FACING = 0xC; + static const int FACING_Y = 0 << 2; + static const int FACING_X = 1 << 2; + static const int FACING_Z = 2 << 2; + + static const int TREE_NAMES_LENGTH = 2; + + + static const unsigned int TREE_NAMES[TREE_NAMES_LENGTH]; + + static const wstring TREE_STRING_NAMES[TREE_NAMES_LENGTH]; + + static const wstring TREE_TEXTURES[]; + +private: + Icon* icons_side[TREE_NAMES_LENGTH]; + Icon* icons_top[TREE_NAMES_LENGTH]; + +protected: + TreeTile2(int id); + +public: + virtual int getResourceCount(Random* random); + virtual int getResource(int data, Random* random, int playerBonusLevel); + virtual void onRemove(Level* level, int x, int y, int z, int id, int data); + virtual unsigned int getDescriptionId(int iData = -1); + +protected: + virtual Icon* getTypeTexture(int type); + virtual Icon* getTopTexture(int type); + +public: + static int getWoodType(int data); + void registerIcons(IconRegister* iconRegister); + +protected: + virtual shared_ptr getSilkTouchItemInstance(int data); +}; \ No newline at end of file diff --git a/Minecraft.World/net.minecraft.world.level.tile.h b/Minecraft.World/net.minecraft.world.level.tile.h index 35af92df..0a398641 100644 --- a/Minecraft.World/net.minecraft.world.level.tile.h +++ b/Minecraft.World/net.minecraft.world.level.tile.h @@ -132,4 +132,5 @@ #include "Rose.h" #include "SandTile.h" #include "RedSandStoneTile.h" +#include "TreeTile2.h"