aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/LakeFeature.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/LakeFeature.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/LakeFeature.cpp')
-rw-r--r--Minecraft.World/LakeFeature.cpp179
1 files changed, 89 insertions, 90 deletions
diff --git a/Minecraft.World/LakeFeature.cpp b/Minecraft.World/LakeFeature.cpp
index 7450450d..ac240e61 100644
--- a/Minecraft.World/LakeFeature.cpp
+++ b/Minecraft.World/LakeFeature.cpp
@@ -11,16 +11,16 @@ LakeFeature::LakeFeature(int tile)
bool LakeFeature::place(Level *level, Random *random, int x, int y, int z)
{
- x -= 8;
- z -= 8;
- while (y > 5 && level->isEmptyTile(x, y, z))
- y--;
+ x -= 8;
+ z -= 8;
+ while (y > 5 && level->isEmptyTile(x, y, z))
+ y--;
if (y <= 4)
{
return false;
}
- y -= 4;
+ y -= 4;
bool grid[16*16*8] = {0};
@@ -32,7 +32,7 @@ bool LakeFeature::place(Level *level, Random *random, int x, int y, int z)
int minX = x;
int minY = y;
int minZ = z;
-
+
int maxX = x + 16;
int maxY = y + 8;
int maxZ = z + 16;
@@ -45,98 +45,97 @@ bool LakeFeature::place(Level *level, Random *random, int x, int y, int z)
}
}
- int spots = random->nextInt(4) + 4;
- for (int i = 0; i < spots; i++)
+ int spots = random->nextInt(4) + 4;
+ for (int i = 0; i < spots; i++)
{
- double xr = random->nextDouble() * 6 + 3;
- double yr = random->nextDouble() * 4 + 2;
- double zr = random->nextDouble() * 6 + 3;
+ double xr = random->nextDouble() * 6 + 3;
+ double yr = random->nextDouble() * 4 + 2;
+ double zr = random->nextDouble() * 6 + 3;
- double xp = random->nextDouble() * (16 - xr - 2) + 1 + xr / 2;
- double yp = random->nextDouble() * (8 - yr - 4) + 2 + yr / 2;
- double zp = random->nextDouble() * (16 - zr - 2) + 1 + zr / 2;
+ double xp = random->nextDouble() * (16 - xr - 2) + 1 + xr / 2;
+ double yp = random->nextDouble() * (8 - yr - 4) + 2 + yr / 2;
+ double zp = random->nextDouble() * (16 - zr - 2) + 1 + zr / 2;
- for (int xx = 1; xx < 15; xx++)
+ for (int xx = 1; xx < 15; xx++)
{
- for (int zz = 1; zz < 15; zz++)
+ for (int zz = 1; zz < 15; zz++)
{
- for (int yy = 1; yy < 7; yy++)
+ for (int yy = 1; yy < 7; yy++)
{
- double xd = ((xx - xp) / (xr / 2));
- double yd = ((yy - yp) / (yr / 2));
- double zd = ((zz - zp) / (zr / 2));
- double d = xd * xd + yd * yd + zd * zd;
- if (d < 1) grid[((xx) * 16 + (zz)) * 8 + (yy)] = true;
- }
- }
- }
- }
-
- for (int xx = 0; xx < 16; xx++)
+ double xd = ((xx - xp) / (xr / 2));
+ double yd = ((yy - yp) / (yr / 2));
+ double zd = ((zz - zp) / (zr / 2));
+ double d = xd * xd + yd * yd + zd * zd;
+ if (d < 1) grid[((xx) * 16 + (zz)) * 8 + (yy)] = true;
+ }
+ }
+ }
+ }
+
+ for (int xx = 0; xx < 16; xx++)
{
- for (int zz = 0; zz < 16; zz++)
+ for (int zz = 0; zz < 16; zz++)
{
- for (int yy = 0; yy < 8; yy++)
+ for (int yy = 0; yy < 8; yy++)
{
- bool check = !grid[((xx) * 16 + (zz)) * 8 + (yy)] && (
- (xx < 15 && grid[((xx + 1) * 16 + (zz)) * 8 + (yy)])
- || (xx > 0 && grid[((xx - 1) * 16 + (zz)) * 8 + (yy)])
- || (zz < 15 && grid[((xx) * 16 + (zz + 1)) * 8 + (yy)])
- || (zz > 0 && grid[((xx) * 16 + (zz - 1)) * 8 + (yy)])
- || (yy < 7 && grid[((xx) * 16 + (zz)) * 8 + (yy + 1)])
- || (yy > 0 && grid[((xx) * 16 + (zz)) * 8 + (yy - 1)]));
-
- if (check)
+ bool check = !grid[((xx) * 16 + (zz)) * 8 + (yy)] && ((xx < 15 && grid[((xx + 1) * 16 + (zz)) * 8 + (yy)])//
+ || (xx > 0 && grid[((xx - 1) * 16 + (zz)) * 8 + (yy)])
+ || (zz < 15 && grid[((xx) * 16 + (zz + 1)) * 8 + (yy)])
+ || (zz > 0 && grid[((xx) * 16 + (zz - 1)) * 8 + (yy)])
+ || (yy < 7 && grid[((xx) * 16 + (zz)) * 8 + (yy + 1)])
+ || (yy > 0 && grid[((xx) * 16 + (zz)) * 8 + (yy - 1)]));
+
+ if (check)
{
- Material *m = level->getMaterial(x + xx, y + yy, z + zz);
- if (yy >= 4 && m->isLiquid()) return false;
- if (yy < 4 && (!m->isSolid() && level->getTile(x + xx, y + yy, z + zz) != tile)) return false;
+ Material *m = level->getMaterial(x + xx, y + yy, z + zz);
+ if (yy >= 4 && m->isLiquid()) return false;
+ if (yy < 4 && (!m->isSolid() && level->getTile(x + xx, y + yy, z + zz) != tile)) return false;
- }
- }
- }
- }
+ }
+ }
+ }
+ }
- for (int xx = 0; xx < 16; xx++)
+ for (int xx = 0; xx < 16; xx++)
{
- for (int zz = 0; zz < 16; zz++)
+ for (int zz = 0; zz < 16; zz++)
{
- for (int yy = 0; yy < 8; yy++)
+ for (int yy = 0; yy < 8; yy++)
{
- if (grid[((xx) * 16 + (zz)) * 8 + (yy)])
+ if (grid[((xx) * 16 + (zz)) * 8 + (yy)])
{
- level->setTileNoUpdate(x + xx, y + yy, z + zz, yy >= 4 ? 0 : tile);
- }
- }
- }
- }
+ level->setTileAndData(x + xx, y + yy, z + zz, yy >= 4 ? 0 : tile, 0, Tile::UPDATE_CLIENTS);
+ }
+ }
+ }
+ }
- for (int xx = 0; xx < 16; xx++)
+ for (int xx = 0; xx < 16; xx++)
{
- for (int zz = 0; zz < 16; zz++)
+ for (int zz = 0; zz < 16; zz++)
{
- for (int yy = 4; yy < 8; yy++)
+ for (int yy = 4; yy < 8; yy++)
{
- if (grid[((xx) * 16 + (zz)) * 8 + (yy)])
+ if (grid[((xx) * 16 + (zz)) * 8 + (yy)])
{
- if (level->getTile(x + xx, y + yy - 1, z + zz) == Tile::dirt_Id && level->getBrightness(LightLayer::Sky, x + xx, y + yy, z + zz) > 0)
+ if (level->getTile(x + xx, y + yy - 1, z + zz) == Tile::dirt_Id && level->getBrightness(LightLayer::Sky, x + xx, y + yy, z + zz) > 0)
{
Biome *b = level->getBiome(x + xx, z + zz);
- if (b->topMaterial == Tile::mycel_Id) level->setTileNoUpdate(x + xx, y + yy - 1, z + zz, Tile::mycel_Id);
- else level->setTileNoUpdate(x + xx, y + yy - 1, z + zz, Tile::grass_Id);
- }
- }
- }
- }
- }
-
- if (Tile::tiles[tile]->material == Material::lava)
+ if (b->topMaterial == Tile::mycel_Id) level->setTileAndData(x + xx, y + yy - 1, z + zz, Tile::mycel_Id, 0, Tile::UPDATE_CLIENTS);
+ else level->setTileAndData(x + xx, y + yy - 1, z + zz, Tile::grass_Id, 0, Tile::UPDATE_CLIENTS);
+ }
+ }
+ }
+ }
+ }
+
+ if (Tile::tiles[tile]->material == Material::lava)
{
- for (int xx = 0; xx < 16; xx++)
+ for (int xx = 0; xx < 16; xx++)
{
- for (int zz = 0; zz < 16; zz++)
+ for (int zz = 0; zz < 16; zz++)
{
- for (int yy = 0; yy < 8; yy++)
+ for (int yy = 0; yy < 8; yy++)
{
bool check = !grid[((xx) * 16 + (zz)) * 8 + (yy)] && (
(xx < 15 && grid[(((xx + 1) * 16 + (zz)) * 8 + (yy))])
@@ -146,30 +145,30 @@ bool LakeFeature::place(Level *level, Random *random, int x, int y, int z)
|| (yy < 7 && grid[(((xx) * 16 + (zz)) * 8 + (yy + 1))])
|| (yy > 0 && grid[(((xx) * 16 + (zz)) * 8 + (yy - 1))]));
- if (check)
+ if (check)
{
- if ((yy<4 || random->nextInt(2)!=0) && level->getMaterial(x + xx, y + yy, z + zz)->isSolid())
+ if ((yy<4 || random->nextInt(2)!=0) && level->getMaterial(x + xx, y + yy, z + zz)->isSolid())
{
- level->setTileNoUpdate(x + xx, y + yy, z + zz, Tile::rock_Id);
- }
- }
- }
- }
- }
- }
+ level->setTileAndData(x + xx, y + yy, z + zz, Tile::stone_Id, 0, Tile::UPDATE_CLIENTS);
+ }
+ }
+ }
+ }
+ }
+ }
// 4J - brought forward from 1.8.2
- if (Tile::tiles[tile]->material == Material::water)
+ if (Tile::tiles[tile]->material == Material::water)
{
- for (int xx = 0; xx < 16; xx++)
+ for (int xx = 0; xx < 16; xx++)
{
- for (int zz = 0; zz < 16; zz++)
+ for (int zz = 0; zz < 16; zz++)
{
- int yy = 4;
- if (level->shouldFreezeIgnoreNeighbors(x + xx, y + yy, z + zz)) level->setTileNoUpdate(x + xx, y + yy, z + zz, Tile::ice_Id);
- }
- }
- }
+ int yy = 4;
+ if (level->shouldFreezeIgnoreNeighbors(x + xx, y + yy, z + zz)) level->setTileAndData(x + xx, y + yy, z + zz, Tile::ice_Id, 0, Tile::UPDATE_CLIENTS);
+ }
+ }
+ }
- return true;
+ return true;
} \ No newline at end of file