aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/LadderTile.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/LadderTile.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/LadderTile.cpp')
-rw-r--r--Minecraft.World/LadderTile.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/Minecraft.World/LadderTile.cpp b/Minecraft.World/LadderTile.cpp
new file mode 100644
index 00000000..32f35ed8
--- /dev/null
+++ b/Minecraft.World/LadderTile.cpp
@@ -0,0 +1,112 @@
+#include "stdafx.h"
+#include "net.minecraft.world.level.h"
+#include "LadderTile.h"
+
+
+LadderTile::LadderTile(int id) : Tile(id, Material::decoration,isSolidRender())
+{
+}
+
+AABB *LadderTile::getAABB(Level *level, int x, int y, int z)
+{
+ updateShape(level, x, y, z);
+ return Tile::getAABB(level, x, y, z);
+}
+
+AABB *LadderTile::getTileAABB(Level *level, int x, int y, int z)
+{
+ updateShape(level, x, y, z);
+ return Tile::getTileAABB(level, x, y, z);
+}
+
+void LadderTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param
+{
+ setShape(level->getData(x, y, z));
+}
+
+void LadderTile::setShape(int data)
+{
+ int dir = data;
+ float r = 2 / 16.0f;
+
+ if (dir == 2) setShape(0, 0, 1 - r, 1, 1, 1);
+ if (dir == 3) setShape(0, 0, 0, 1, 1, r);
+ if (dir == 4) setShape(1 - r, 0, 0, 1, 1, 1);
+ if (dir == 5) setShape(0, 0, 0, r, 1, 1);
+}
+
+bool LadderTile::blocksLight()
+{
+ return false;
+}
+
+bool LadderTile::isSolidRender(bool isServerLevel)
+{
+ return false;
+}
+
+bool LadderTile::isCubeShaped()
+{
+ return false;
+}
+
+int LadderTile::getRenderShape()
+{
+ return Tile::SHAPE_LADDER;
+}
+
+bool LadderTile::mayPlace(Level *level, int x, int y, int z)
+{
+ if (level->isSolidBlockingTile(x - 1, y, z))
+ {
+ return true;
+ }
+ else if (level->isSolidBlockingTile(x + 1, y, z))
+ {
+ return true;
+ }
+ else if (level->isSolidBlockingTile(x, y, z - 1))
+ {
+ return true;
+ }
+ else if (level->isSolidBlockingTile(x, y, z + 1))
+ {
+ return true;
+ }
+ return false;
+}
+
+int LadderTile::getPlacedOnFaceDataValue(Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, int itemValue)
+{
+ int dir = level->getData(x, y, z);
+
+ if ((dir == 0 || face == 2) && level->isSolidBlockingTile(x, y, z + 1)) dir = 2;
+ if ((dir == 0 || face == 3) && level->isSolidBlockingTile(x, y, z - 1)) dir = 3;
+ if ((dir == 0 || face == 4) && level->isSolidBlockingTile(x + 1, y, z)) dir = 4;
+ if ((dir == 0 || face == 5) && level->isSolidBlockingTile(x - 1, y, z)) dir = 5;
+
+ return dir;
+}
+
+void LadderTile::neighborChanged(Level *level, int x, int y, int z, int type)
+{
+ int face = level->getData(x, y, z);
+ bool ok = false;
+
+ if (face == 2 && level->isSolidBlockingTile(x, y, z + 1)) ok = true;
+ if (face == 3 && level->isSolidBlockingTile(x, y, z - 1)) ok = true;
+ if (face == 4 && level->isSolidBlockingTile(x + 1, y, z)) ok = true;
+ if (face == 5 && level->isSolidBlockingTile(x - 1, y, z)) ok = true;
+ if (!ok)
+ {
+ spawnResources(level, x, y, z, face, 0);
+ level->setTile(x, y, z, 0);
+ }
+
+ Tile::neighborChanged(level, x, y, z, type);
+}
+
+int LadderTile::getResourceCount(Random* random)
+{
+ return 1;
+} \ No newline at end of file