mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/4jcraft.git
synced 2026-05-29 18:34:55 +00:00
TU19: merge Minecraft.World/Level
This commit is contained in:
@@ -33,6 +33,8 @@ MapItemSavedData::HoldingPlayer::HoldingPlayer(std::shared_ptr<Player> player,
|
||||
|
||||
tick = 0;
|
||||
sendPosTick = 0;
|
||||
step = 0;
|
||||
hasSentInitial = false;
|
||||
|
||||
// java ctor
|
||||
// this->player = player;
|
||||
@@ -50,6 +52,14 @@ MapItemSavedData::HoldingPlayer::~HoldingPlayer() {
|
||||
|
||||
charArray MapItemSavedData::HoldingPlayer::nextUpdatePacket(
|
||||
std::shared_ptr<ItemInstance> itemInstance) {
|
||||
if (!hasSentInitial) {
|
||||
charArray data(2);
|
||||
data[0] = HEADER_METADATA;
|
||||
data[1] = parent->scale;
|
||||
|
||||
hasSentInitial = true;
|
||||
return data;
|
||||
}
|
||||
if (--sendPosTick < 0) {
|
||||
sendPosTick = 4;
|
||||
|
||||
@@ -129,15 +139,13 @@ charArray MapItemSavedData::HoldingPlayer::nextUpdatePacket(
|
||||
std::shared_ptr<ServerPlayer> servPlayer =
|
||||
std::dynamic_pointer_cast<ServerPlayer>(player);
|
||||
for (int d = 0; d < 10; d++) {
|
||||
int column = (tick * 11) % (MapItem::IMAGE_WIDTH);
|
||||
tick++;
|
||||
|
||||
if (rowsDirtyMin[column] >= 0) {
|
||||
int len = rowsDirtyMax[column] - rowsDirtyMin[column] + 1;
|
||||
int min = rowsDirtyMin[column];
|
||||
|
||||
charArray data = charArray(len + 3);
|
||||
data[0] = 0;
|
||||
data[0] = HEADER_COLOURS;
|
||||
data[1] = (char)column;
|
||||
data[2] = (char)min;
|
||||
for (unsigned int y = 0; y < data.length - 3; y++) {
|
||||
@@ -157,7 +165,6 @@ MapItemSavedData::MapItemSavedData(const std::wstring& id) : SavedData(id) {
|
||||
dimension = 0;
|
||||
scale = 0;
|
||||
colors = byteArray(MapItem::IMAGE_WIDTH * MapItem::IMAGE_HEIGHT);
|
||||
step = 0;
|
||||
}
|
||||
|
||||
MapItemSavedData::~MapItemSavedData() {
|
||||
@@ -173,7 +180,7 @@ void MapItemSavedData::load(CompoundTag* tag) {
|
||||
z = tag->getInt(L"zCenter");
|
||||
scale = tag->getByte(L"scale");
|
||||
if (scale < 0) scale = 0;
|
||||
if (scale > 4) scale = 4;
|
||||
if (scale > MAX_SCALE) scale = MAX_SCALE;
|
||||
|
||||
int width = tag->getShort(L"width");
|
||||
int height = tag->getShort(L"height");
|
||||
@@ -246,8 +253,7 @@ void MapItemSavedData::tickCarriedBy(std::shared_ptr<Player> player,
|
||||
if (it2 != carriedByPlayers.end()) {
|
||||
carriedByPlayers.erase(it2);
|
||||
}
|
||||
it = carriedBy.erase(
|
||||
std::find(carriedBy.begin(), carriedBy.end(), hp));
|
||||
it = carriedBy.erase(find(carriedBy.begin(), carriedBy.end(), hp));
|
||||
} else {
|
||||
++it;
|
||||
|
||||
@@ -330,7 +336,9 @@ void MapItemSavedData::tickCarriedBy(std::shared_ptr<Player> player,
|
||||
int size = MAP_SIZE - 1;
|
||||
char rot = (char)((item->getFrame()->dir * 90) * 16 / 360);
|
||||
if (dimension < 0) {
|
||||
int s = step / 10;
|
||||
int s =
|
||||
(int)(playerLevel->getLevelData()->getDayTime() /
|
||||
10);
|
||||
rot = (char)((s * s * 34187121 + s * 121) >> 15 & 15);
|
||||
}
|
||||
#ifdef _LARGE_WORLDS
|
||||
@@ -416,7 +424,9 @@ void MapItemSavedData::tickCarriedBy(std::shared_ptr<Player> player,
|
||||
rot =
|
||||
(char)(decorationPlayer->yRot * 16 / 360 + 0.5);
|
||||
if (dimension < 0) {
|
||||
int s = step / 10;
|
||||
int s = (int)(playerLevel->getLevelData()
|
||||
->getDayTime() /
|
||||
10);
|
||||
rot =
|
||||
(char)((s * s * 34187121 + s * 121) >> 15 &
|
||||
15);
|
||||
@@ -460,11 +470,10 @@ void MapItemSavedData::tickCarriedBy(std::shared_ptr<Player> player,
|
||||
}
|
||||
|
||||
// float xd = (float) (hp->player->x - x) / (1 <<
|
||||
// scale); float yd = (float) (hp->player->z - z) / (1 << scale);
|
||||
// int ww = 64;
|
||||
// int hh = 64;
|
||||
// if (xd >= -ww && yd >= -hh && xd <= ww && yd <=
|
||||
// hh)
|
||||
// scale); float yd = (float) (hp->player->z - z) /
|
||||
// (1 << scale); int ww = 64;
|
||||
// int hh = 64; if (xd >= -ww && yd >= -hh && xd
|
||||
// <= ww && yd <= hh)
|
||||
// {
|
||||
// char img = 0;
|
||||
// char x = (char) (xd * 2 + 0.5);
|
||||
@@ -511,7 +520,7 @@ void MapItemSavedData::setDirty(int x, int y0, int y1) {
|
||||
}
|
||||
|
||||
void MapItemSavedData::handleComplexItemData(charArray& data) {
|
||||
if (data[0] == 0) {
|
||||
if (data[0] == HEADER_COLOURS) {
|
||||
int xx = data[1] & 0xff;
|
||||
int yy = data[2] & 0xff;
|
||||
for (unsigned int y = 0; y < data.length - 3; y++) {
|
||||
@@ -519,7 +528,7 @@ void MapItemSavedData::handleComplexItemData(charArray& data) {
|
||||
}
|
||||
setDirty();
|
||||
|
||||
} else if (data[0] == 1) {
|
||||
} else if (data[0] == HEADER_DECORATIONS) {
|
||||
for (unsigned int i = 0; i < decorations.size(); i++) {
|
||||
delete decorations[i];
|
||||
}
|
||||
@@ -546,9 +555,27 @@ void MapItemSavedData::handleComplexItemData(charArray& data) {
|
||||
decorations.push_back(
|
||||
new MapDecoration(img, x, y, rot, entityId, visible));
|
||||
}
|
||||
} else if (data[0] == HEADER_METADATA) {
|
||||
scale = data[1];
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<MapItemSavedData::HoldingPlayer>
|
||||
MapItemSavedData::getHoldingPlayer(std::shared_ptr<Player> player) {
|
||||
std::shared_ptr<HoldingPlayer> hp = nullptr;
|
||||
AUTO_VAR(it, carriedByPlayers.find(player));
|
||||
|
||||
if (it == carriedByPlayers.end()) {
|
||||
hp = std::shared_ptr<HoldingPlayer>(new HoldingPlayer(player, this));
|
||||
carriedByPlayers[player] = hp;
|
||||
carriedBy.push_back(hp);
|
||||
} else {
|
||||
hp = it->second;
|
||||
}
|
||||
|
||||
return hp;
|
||||
}
|
||||
|
||||
// 4J Added
|
||||
// We only have one map per player per dimension, so if they pickup someone
|
||||
// elses map we merge their map data with ours so that we can see everything
|
||||
|
||||
Reference in New Issue
Block a user