aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client
diff options
context:
space:
mode:
authorModMaker101 <119018978+ModMaker101@users.noreply.github.com>2026-03-04 10:43:29 -0500
committerGitHub <noreply@github.com>2026-03-04 22:43:29 +0700
commit2be856a2d447ab758e02bfeaaa9cac5e1114dbfc (patch)
tree45522b197014c467126fce318f963b5d50d76664 /Minecraft.Client
parentca5fde56fed613a8f45767868636e2321b03d3f3 (diff)
Fix Chunk destructor segfault using smart pointers #112 (#414)
Diffstat (limited to 'Minecraft.Client')
-rw-r--r--Minecraft.Client/Chunk.cpp20
-rw-r--r--Minecraft.Client/Chunk.h6
2 files changed, 12 insertions, 14 deletions
diff --git a/Minecraft.Client/Chunk.cpp b/Minecraft.Client/Chunk.cpp
index d039227b..63cd0501 100644
--- a/Minecraft.Client/Chunk.cpp
+++ b/Minecraft.Client/Chunk.cpp
@@ -52,7 +52,7 @@ Chunk::Chunk(Level *level, LevelRenderer::rteMap &globalRenderableTileEntities,
: globalRenderableTileEntities( &globalRenderableTileEntities ), globalRenderableTileEntities_cs(&globalRenderableTileEntities_cs)
{
clipChunk->visible = false;
- bb = NULL;
+ bb = nullptr;
id = 0;
this->level = level;
@@ -101,15 +101,15 @@ void Chunk::setPos(int x, int y, int z)
float g = 6.0f;
// 4J - changed to just set the value rather than make a new one, if we've already created storage
- if( bb == NULL )
+ if( !bb )
{
- bb = AABB::newPermanent(-g, -g, -g, XZSIZE+g, SIZE+g, XZSIZE+g);
+ bb = shared_ptr<AABB>(AABB::newPermanent(-g, -g, -g, XZSIZE+g, SIZE+g, XZSIZE+g));
}
- else
- {
+ else
+ {
// 4J MGH - bounds are relative to the position now, so the AABB will be setup already, either above, or from the tesselator bounds.
// bb->set(-g, -g, -g, SIZE+g, SIZE+g, SIZE+g);
- }
+ }
clipChunk->aabb[0] = bb->x0 + x;
clipChunk->aabb[1] = bb->y0 + y;
clipChunk->aabb[2] = bb->z0 + z;
@@ -154,6 +154,7 @@ void Chunk::translateToPos()
Chunk::Chunk()
{
+ bb = nullptr;
}
void Chunk::makeCopyForRebuild(Chunk *source)
@@ -998,7 +999,7 @@ int Chunk::getList(int layer)
void Chunk::cull(Culler *culler)
{
- clipChunk->visible = culler->isVisible(bb);
+ clipChunk->visible = culler->isVisible(bb.get());
}
void Chunk::renderBB()
@@ -1027,10 +1028,7 @@ void Chunk::clearDirty()
#endif
}
-Chunk::~Chunk()
-{
- delete bb;
-}
+Chunk::~Chunk() = default;
bool Chunk::emptyFlagSet(int layer)
{
diff --git a/Minecraft.Client/Chunk.h b/Minecraft.Client/Chunk.h
index f7947156..e0ae016e 100644
--- a/Minecraft.Client/Chunk.h
+++ b/Minecraft.Client/Chunk.h
@@ -46,11 +46,11 @@ public:
int xRender, yRender, zRender;
int xRenderOffs, yRenderOffs, zRenderOffs;
- int xm, ym, zm;
- AABB *bb;
+ int xm, ym, zm;
+ shared_ptr<AABB> bb;
ClipChunk *clipChunk;
- int id;
+ int id;
//public:
// vector<shared_ptr<TileEntity> > renderableTileEntities; // 4J - removed