aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/FenceTile.cpp
diff options
context:
space:
mode:
authordaoge <3523206925@qq.com>2026-03-03 03:04:10 +0800
committerGitHub <noreply@github.com>2026-03-03 03:04:10 +0800
commitb3feddfef372618c8a9d7a0abcaf18cfad866c18 (patch)
tree267761c3bb39241ba5c347bfbe2254d06686e287 /Minecraft.World/FenceTile.cpp
parent84c31a2331f7a0ec85b9d438992e244f60e5020f (diff)
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 <lokirautio@gmail.com>
Diffstat (limited to 'Minecraft.World/FenceTile.cpp')
-rw-r--r--Minecraft.World/FenceTile.cpp146
1 files changed, 86 insertions, 60 deletions
diff --git a/Minecraft.World/FenceTile.cpp b/Minecraft.World/FenceTile.cpp
index 0d1f9bc4..39f4aac1 100644
--- a/Minecraft.World/FenceTile.cpp
+++ b/Minecraft.World/FenceTile.cpp
@@ -1,6 +1,6 @@
#include "stdafx.h"
+#include "net.minecraft.world.item.h"
#include "net.minecraft.world.level.h"
-#include "net.minecraft.world.phys.h"
#include "net.minecraft.world.h"
#include "FenceTile.h"
@@ -9,73 +9,89 @@ FenceTile::FenceTile(int id, const wstring &texture, Material *material) : Tile(
this->texture = texture;
}
-AABB *FenceTile::getAABB(Level *level, int x, int y, int z)
+void FenceTile::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, shared_ptr<Entity> source)
{
- bool n = connectsTo(level, x, y, z - 1);
- bool s = connectsTo(level, x, y, z + 1);
- bool w = connectsTo(level, x - 1, y, z);
- bool e = connectsTo(level, x + 1, y, z);
+ bool n = connectsTo(level, x, y, z - 1);
+ bool s = connectsTo(level, x, y, z + 1);
+ bool w = connectsTo(level, x - 1, y, z);
+ bool e = connectsTo(level, x + 1, y, z);
- float west = 6.0f / 16.0f;
- float east = 10.0f / 16.0f;
- float north = 6.0f / 16.0f;
- float south = 10.0f / 16.0f;
+ float west = 6.0f / 16.0f;
+ float east = 10.0f / 16.0f;
+ float north = 6.0f / 16.0f;
+ float south = 10.0f / 16.0f;
- if (n)
+ if (n)
{
- north = 0;
- }
- if (s)
+ north = 0;
+ }
+ if (s)
{
- south = 1;
- }
- if (w)
+ south = 1;
+ }
+ if (n || s)
{
- west = 0;
- }
- if (e)
+ setShape(west, 0, north, east, 1.5f, south);
+ Tile::addAABBs(level, x, y, z, box, boxes, source);
+ }
+ north = 6.0f / 16.0f;
+ south = 10.0f / 16.0f;
+ if (w)
{
- east = 1;
- }
+ west = 0;
+ }
+ if (e)
+ {
+ east = 1;
+ }
+ if (w || e || (!n && !s))
+ {
+ setShape(west, 0, north, east, 1.5f, south);
+ Tile::addAABBs(level, x, y, z, box, boxes, source);
+ }
+
+ if (n)
+ {
+ north = 0;
+ }
+ if (s)
+ {
+ south = 1;
+ }
- return AABB::newTemp(x + west, y, z + north, x + east, y + 1.5f, z + south);
+ setShape(west, 0, north, east, 1.0f, south);
}
void FenceTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param
{
- bool n = connectsTo(level, x, y, z - 1);
- bool s = connectsTo(level, x, y, z + 1);
- bool w = connectsTo(level, x - 1, y, z);
- bool e = connectsTo(level, x + 1, y, z);
+ bool n = connectsTo(level, x, y, z - 1);
+ bool s = connectsTo(level, x, y, z + 1);
+ bool w = connectsTo(level, x - 1, y, z);
+ bool e = connectsTo(level, x + 1, y, z);
- float west = 6.0f / 16.0f;
- float east = 10.0f / 16.0f;
- float north = 6.0f / 16.0f;
- float south = 10.0f / 16.0f;
+ float west = 6.0f / 16.0f;
+ float east = 10.0f / 16.0f;
+ float north = 6.0f / 16.0f;
+ float south = 10.0f / 16.0f;
- if (n)
+ if (n)
{
- north = 0;
- }
- if (s)
+ north = 0;
+ }
+ if (s)
{
- south = 1;
- }
- if (w)
+ south = 1;
+ }
+ if (w)
{
- west = 0;
- }
- if (e)
+ west = 0;
+ }
+ if (e)
{
- east = 1;
- }
+ east = 1;
+ }
- setShape(west, 0, north, east, 1.0f, south);
-}
-
-bool FenceTile::blocksLight()
-{
- return false;
+ setShape(west, 0, north, east, 1.0f, south);
}
bool FenceTile::isSolidRender(bool isServerLevel)
@@ -100,20 +116,20 @@ int FenceTile::getRenderShape()
bool FenceTile::connectsTo(LevelSource *level, int x, int y, int z)
{
- int tile = level->getTile(x, y, z);
- if (tile == id || tile == Tile::fenceGate_Id)
+ int tile = level->getTile(x, y, z);
+ if (tile == id || tile == Tile::fenceGate_Id)
{
- return true;
- }
- Tile *tileInstance = Tile::tiles[tile];
- if (tileInstance != NULL)
+ return true;
+ }
+ Tile *tileInstance = Tile::tiles[tile];
+ if (tileInstance != NULL)
{
- if (tileInstance->material->isSolidBlocking() && tileInstance->isCubeShaped())
+ if (tileInstance->material->isSolidBlocking() && tileInstance->isCubeShaped())
{
- return tileInstance->material != Material::vegetable;
- }
- }
- return false;
+ return tileInstance->material != Material::vegetable;
+ }
+ }
+ return false;
}
bool FenceTile::isFence(int tile)
@@ -129,4 +145,14 @@ void FenceTile::registerIcons(IconRegister *iconRegister)
bool FenceTile::shouldRenderFace(LevelSource *level, int x, int y, int z, int face)
{
return true;
+}
+
+bool FenceTile::use(Level *level, int x, int y, int z, shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly)
+{
+ if (level->isClientSide) return true;
+ if (LeashItem::bindPlayerMobs(player, level, x, y, z))
+ {
+ return true;
+ }
+ return false;
} \ No newline at end of file