December 2014 files

This commit is contained in:
Loki Rautio
2026-03-01 11:00:23 -06:00
parent b691c43c44
commit 8fd3ac6e37
2049 changed files with 260190 additions and 134787 deletions

View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "net.minecraft.world.level.h"
#include "net.minecraft.world.level.levelgen.structure.h"
#include "StructureStart.h"
#include "StructurePiece.h"
#include "BoundingBox.h"
@@ -7,9 +8,17 @@
StructureStart::StructureStart()
{
chunkX = chunkZ = 0;
boundingBox = NULL; // 4J added initialiser
}
StructureStart::StructureStart(int x, int z)
{
this->chunkX = x;
this->chunkZ = z;
boundingBox = NULL;
}
StructureStart::~StructureStart()
{
for(AUTO_VAR(it, pieces.begin()); it != pieces.end(); it++ )
@@ -37,8 +46,8 @@ void StructureStart::postProcess(Level *level, Random *random, BoundingBox *chun
{
if( (*it)->getBoundingBox()->intersects(chunkBB) && !(*it)->postProcess(level, random, chunkBB))
{
// this piece can't be placed, so remove it to avoid future
// attempts
// this piece can't be placed, so remove it to avoid future
// attempts
it = pieces.erase(it);
}
else
@@ -50,7 +59,7 @@ void StructureStart::postProcess(Level *level, Random *random, BoundingBox *chun
void StructureStart::calculateBoundingBox()
{
boundingBox = BoundingBox::getUnknownBox();
boundingBox = BoundingBox::getUnknownBox();
for( AUTO_VAR(it, pieces.begin()); it != pieces.end(); it++ )
{
@@ -59,53 +68,113 @@ void StructureStart::calculateBoundingBox()
}
}
CompoundTag *StructureStart::createTag(int chunkX, int chunkZ)
{
CompoundTag *tag = new CompoundTag();
tag->putString(L"id", StructureFeatureIO::getEncodeId(this));
tag->putInt(L"ChunkX", chunkX);
tag->putInt(L"ChunkZ", chunkZ);
tag->put(L"BB", boundingBox->createTag(L"BB"));
ListTag<CompoundTag> *childrenTags = new ListTag<CompoundTag>(L"Children");
for(AUTO_VAR(it, pieces.begin()); it != pieces.end(); ++it)
{
StructurePiece *piece = *it;
childrenTags->add(piece->createTag());
}
tag->put(L"Children", childrenTags);
addAdditonalSaveData(tag);
return tag;
}
void StructureStart::addAdditonalSaveData(CompoundTag *tag)
{
}
void StructureStart::load(Level *level, CompoundTag *tag)
{
chunkX = tag->getInt(L"ChunkX");
chunkZ = tag->getInt(L"ChunkZ");
if (tag->contains(L"BB"))
{
boundingBox = new BoundingBox(tag->getIntArray(L"BB"));
}
ListTag<CompoundTag> *children = (ListTag<CompoundTag> *) tag->getList(L"Children");
for (int i = 0; i < children->size(); i++)
{
pieces.push_back(StructureFeatureIO::loadStaticPiece(children->get(i), level));
}
readAdditonalSaveData(tag);
}
void StructureStart::readAdditonalSaveData(CompoundTag *tag)
{
}
void StructureStart::moveBelowSeaLevel(Level *level, Random *random, int offset)
{
const int MAX_Y = level->seaLevel - offset;
// set lowest possible position (at bedrock)
int y1Pos = boundingBox->getYSpan() + 1;
// move up randomly within the available span
if (y1Pos < MAX_Y)
// set lowest possible position (at bedrock)
int y1Pos = boundingBox->getYSpan() + 1;
// move up randomly within the available span
if (y1Pos < MAX_Y)
{
y1Pos += random->nextInt(MAX_Y - y1Pos);
}
y1Pos += random->nextInt(MAX_Y - y1Pos);
}
// move all bounding boxes
int dy = y1Pos - boundingBox->y1;
boundingBox->move(0, dy, 0);
// move all bounding boxes
int dy = y1Pos - boundingBox->y1;
boundingBox->move(0, dy, 0);
for( AUTO_VAR(it, pieces.begin()); it != pieces.end(); it++ )
{
StructurePiece *piece = *it;
piece->getBoundingBox()->move(0, dy, 0);
}
piece->getBoundingBox()->move(0, dy, 0);
}
}
void StructureStart::moveInsideHeights(Level *level, Random *random, int lowestAllowed, int highestAllowed)
{
int heightSpan = highestAllowed - lowestAllowed + 1 - boundingBox->getYSpan();
int y0Pos = 1;
int heightSpan = highestAllowed - lowestAllowed + 1 - boundingBox->getYSpan();
int y0Pos = 1;
if (heightSpan > 1)
if (heightSpan > 1)
{
y0Pos = lowestAllowed + random->nextInt(heightSpan);
}
y0Pos = lowestAllowed + random->nextInt(heightSpan);
}
else
{
y0Pos = lowestAllowed;
}
y0Pos = lowestAllowed;
}
// move all bounding boxes
int dy = y0Pos - boundingBox->y0;
boundingBox->move(0, dy, 0);
// move all bounding boxes
int dy = y0Pos - boundingBox->y0;
boundingBox->move(0, dy, 0);
for( AUTO_VAR(it, pieces.begin()); it != pieces.end(); it++ )
{
StructurePiece *piece = *it;
piece->getBoundingBox()->move(0, dy, 0);
}
piece->getBoundingBox()->move(0, dy, 0);
}
}
bool StructureStart::isValid()
{
return true;
}
int StructureStart::getChunkX()
{
return chunkX;
}
int StructureStart::getChunkZ()
{
return chunkZ;
}