From b3feddfef372618c8a9d7a0abcaf18cfad866c18 Mon Sep 17 00:00:00 2001 From: daoge <3523206925@qq.com> Date: Tue, 3 Mar 2026 03:04:10 +0800 Subject: feat: TU19 (Dec 2014) Features & Content (#155) * try to resolve merge conflict * feat: TU19 (Dec 2014) Features & Content (#32) * December 2014 files * Working release build * Fix compilation issues * Add sound to Windows64Media * Add DLC content and force Tutorial DLC * Revert "Add DLC content and force Tutorial DLC" This reverts commit 97a43994725008e35fceb984d5549df9c8cea470. * Disable broken light packing * Disable breakpoint during DLC texture map load Allows DLC loading but the DLC textures are still broken * Fix post build not working * ... * fix vs2022 build * fix cmake build --------- Co-authored-by: Loki --- Minecraft.World/CauldronTile.cpp | 111 +++++++++++++++++++++++---------------- 1 file changed, 66 insertions(+), 45 deletions(-) (limited to 'Minecraft.World/CauldronTile.cpp') diff --git a/Minecraft.World/CauldronTile.cpp b/Minecraft.World/CauldronTile.cpp index 4d5640ca..f7a8d044 100644 --- a/Minecraft.World/CauldronTile.cpp +++ b/Minecraft.World/CauldronTile.cpp @@ -13,9 +13,9 @@ const wstring CauldronTile::TEXTURE_BOTTOM = L"cauldron_bottom"; CauldronTile::CauldronTile(int id) : Tile(id, Material::metal, isSolidRender()) { - iconInner = NULL; - iconTop = NULL; - iconBottom = NULL; + iconInner = NULL; + iconTop = NULL; + iconBottom = NULL; } Icon *CauldronTile::getTexture(int face, int data) @@ -48,19 +48,19 @@ Icon *CauldronTile::getTexture(const wstring &name) void CauldronTile::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, shared_ptr source) { - setShape(0, 0, 0, 1, 5.0f / 16.0f, 1); - Tile::addAABBs(level, x, y, z, box, boxes, source); - float thickness = 2.0f / 16.0f; - setShape(0, 0, 0, thickness, 1, 1); - Tile::addAABBs(level, x, y, z, box, boxes, source); - setShape(0, 0, 0, 1, 1, thickness); - Tile::addAABBs(level, x, y, z, box, boxes, source); - setShape(1 - thickness, 0, 0, 1, 1, 1); - Tile::addAABBs(level, x, y, z, box, boxes, source); - setShape(0, 0, 1 - thickness, 1, 1, 1); - Tile::addAABBs(level, x, y, z, box, boxes, source); - - updateDefaultShape(); + setShape(0, 0, 0, 1, 5.0f / 16.0f, 1); + Tile::addAABBs(level, x, y, z, box, boxes, source); + float thickness = 2.0f / 16.0f; + setShape(0, 0, 0, thickness, 1, 1); + Tile::addAABBs(level, x, y, z, box, boxes, source); + setShape(0, 0, 0, 1, 1, thickness); + Tile::addAABBs(level, x, y, z, box, boxes, source); + setShape(1 - thickness, 0, 0, 1, 1, 1); + Tile::addAABBs(level, x, y, z, box, boxes, source); + setShape(0, 0, 1 - thickness, 1, 1, 1); + Tile::addAABBs(level, x, y, z, box, boxes, source); + + updateDefaultShape(); } void CauldronTile::updateDefaultShape() @@ -87,43 +87,45 @@ bool CauldronTile::use(Level *level, int x, int y, int z, shared_ptr pla { if(soundOnly) return false; - if (level->isClientSide) + if (level->isClientSide) { - return true; - } + return true; + } - shared_ptr item = player->inventory->getSelected(); - if (item == NULL) + shared_ptr item = player->inventory->getSelected(); + if (item == NULL) { - return true; - } + return true; + } - int currentData = level->getData(x, y, z); + int currentData = level->getData(x, y, z); + int fillLevel = getFillLevel(currentData); - if (item->id == Item::bucket_water_Id) + if (item->id == Item::bucket_water_Id) { - if (currentData < 3) + if (fillLevel < 3) { - if (!player->abilities.instabuild) + if (!player->abilities.instabuild) { - player->inventory->setItem(player->inventory->selected, shared_ptr(new ItemInstance(Item::bucket_empty))); - } + player->inventory->setItem(player->inventory->selected, shared_ptr(new ItemInstance(Item::bucket_empty))); + } - level->setData(x, y, z, 3); - } - return true; - } + level->setData(x, y, z, 3, Tile::UPDATE_CLIENTS); + level->updateNeighbourForOutputSignal(x, y, z, id); + } + return true; + } else if (item->id == Item::glassBottle_Id) { - if (currentData > 0) + if (fillLevel > 0) { - shared_ptr potion = shared_ptr(new ItemInstance(Item::potion, 1, 0)); - if (!player->inventory->add(potion)) + shared_ptr potion = shared_ptr(new ItemInstance(Item::potion, 1, 0)); + if (!player->inventory->add(potion)) { - level->addEntity(shared_ptr(new ItemEntity(level, x + 0.5, y + 1.5, z + 0.5, potion))); - } + level->addEntity(shared_ptr(new ItemEntity(level, x + 0.5, y + 1.5, z + 0.5, potion))); + } // 4J Stu - Brought forward change to update inventory when filling bottles with water - else if (dynamic_pointer_cast( player ) != NULL) + else if (player->instanceof(eTYPE_SERVERPLAYER)) { dynamic_pointer_cast( player )->refreshContainer(player->inventoryMenu); } @@ -136,21 +138,23 @@ bool CauldronTile::use(Level *level, int x, int y, int z, shared_ptr pla player->inventory->setItem(player->inventory->selected, nullptr); } } - level->setData(x, y, z, currentData - 1); - } + level->setData(x, y, z, fillLevel - 1, Tile::UPDATE_CLIENTS); + level->updateNeighbourForOutputSignal(x, y, z, id); + } } - else if (currentData > 0) + else if (fillLevel > 0) { ArmorItem *armor = dynamic_cast(item->getItem()); if(armor && armor->getMaterial() == ArmorItem::ArmorMaterial::CLOTH) { armor->clearColor(item); - level->setData(x, y, z, currentData - 1); + level->setData(x, y, z, fillLevel - 1, Tile::UPDATE_CLIENTS); + level->updateNeighbourForOutputSignal(x, y, z, id); return true; } } - return true; + return true; } @@ -162,7 +166,7 @@ void CauldronTile::handleRain(Level *level, int x, int y, int z) if (data < 3) { - level->setData(x, y, z, data + 1); + level->setData(x, y, z, data + 1, Tile::UPDATE_CLIENTS); } } @@ -174,4 +178,21 @@ int CauldronTile::getResource(int data, Random *random, int playerBonusLevel) int CauldronTile::cloneTileId(Level *level, int x, int y, int z) { return Item::cauldron_Id; +} + +bool CauldronTile::hasAnalogOutputSignal() +{ + return true; +} + +int CauldronTile::getAnalogOutputSignal(Level *level, int x, int y, int z, int dir) +{ + int data = level->getData(x, y, z); + + return getFillLevel(data); +} + +int CauldronTile::getFillLevel(int data) +{ + return data; } \ No newline at end of file -- cgit v1.2.3