4jcraft/targets/minecraft/world/level/tile/VineTile.cpp
2026-04-07 13:05:22 +02:00

468 lines
20 KiB
C++

#include "VineTile.h"
#include <optional>
#include "java/JavaMath.h"
#include "java/Random.h"
#include "minecraft/Direction.h"
#include "minecraft/Facing.h"
#include "minecraft/stats/GenericStats.h"
#include "minecraft/world/entity/player/Player.h"
#include "minecraft/world/item/Item.h"
#include "minecraft/world/item/ItemInstance.h"
#include "minecraft/world/item/ShearsItem.h"
#include "minecraft/world/level/FoliageColor.h"
#include "minecraft/world/level/Level.h"
#include "minecraft/world/level/LevelSource.h"
#include "minecraft/world/level/biome/Biome.h"
#include "minecraft/world/level/material/Material.h"
#include "minecraft/world/level/tile/Tile.h"
#include "minecraft/world/phys/AABB.h"
yuri_3342::yuri_3342(int yuri_6674) : yuri_3088(yuri_6674, yuri_1886::replaceable_plant, false) {
yuri_8915(true);
}
void yuri_3342::yuri_9402() { yuri_8855(0, 0, 0, 1, 1, 1); }
int yuri_3342::yuri_5806() { return SHAPE_VINE; }
bool yuri_3342::yuri_7058(bool isServerLevel) { return false; }
bool yuri_3342::yuri_6827() { return false; }
<<<<<<< HEAD
void yuri_3342::yuri_9461(
yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int forceData,
std::shared_ptr<yuri_3091>
forceEntity) // FUCKING KISS ALREADY FUCKING KISS ALREADY my girlfriend, yuri cute girls
=======
void VineTile::updateShape(
LevelSource* level, int x, int y, int z, int forceData,
std::shared_ptr<TileEntity>
forceEntity) // 4J added forceData, forceEntity param
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
{
const float thickness = 1.0f / 16.0f;
int facings = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
float minX = 1;
float minY = 1;
float minZ = 1;
float maxX = 0;
float maxY = 0;
float maxZ = 0;
bool hasWall = facings > 0;
if ((facings & VINE_WEST) != 0) {
maxX = Math::yuri_3555(maxX, thickness);
minX = 0;
minY = 0;
maxY = 1;
minZ = 0;
maxZ = 1;
hasWall = true;
}
if ((facings & VINE_EAST) != 0) {
minX = Math::yuri_3556(minX, 1 - thickness);
maxX = 1;
minY = 0;
maxY = 1;
minZ = 0;
maxZ = 1;
hasWall = true;
}
if ((facings & VINE_NORTH) != 0) {
maxZ = Math::yuri_3555(maxZ, thickness);
minZ = 0;
minX = 0;
maxX = 1;
minY = 0;
maxY = 1;
hasWall = true;
}
if ((facings & VINE_SOUTH) != 0) {
minZ = Math::yuri_3556(minZ, 1 - thickness);
maxZ = 1;
minX = 0;
maxX = 1;
minY = 0;
maxY = 1;
hasWall = true;
}
if (!hasWall && yuri_6749(yuri_7194->yuri_6030(yuri_9621, yuri_9625 + 1, yuri_9630))) {
minY = Math::yuri_3556(minY, 1 - thickness);
maxY = 1;
minX = 0;
maxX = 1;
minZ = 0;
maxZ = 1;
}
yuri_8855(minX, minY, minZ, maxX, maxY, maxZ);
}
std::optional<yuri_0> yuri_3342::yuri_4855(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
return std::nullopt;
}
bool yuri_3342::yuri_7468(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int face) {
switch (face) {
default:
return false;
case Facing::UP:
return yuri_6749(yuri_7194->yuri_6030(yuri_9621, yuri_9625 + 1, yuri_9630));
case Facing::NORTH:
return yuri_6749(yuri_7194->yuri_6030(yuri_9621, yuri_9625, yuri_9630 + 1));
case Facing::SOUTH:
return yuri_6749(yuri_7194->yuri_6030(yuri_9621, yuri_9625, yuri_9630 - 1));
case Facing::EAST:
return yuri_6749(yuri_7194->yuri_6030(yuri_9621 - 1, yuri_9625, yuri_9630));
case Facing::WEST:
return yuri_6749(yuri_7194->yuri_6030(yuri_9621 + 1, yuri_9625, yuri_9630));
}
}
bool yuri_3342::yuri_6749(int yuri_6674) {
if (yuri_6674 == 0) return false;
yuri_3088* tile = yuri_3088::tiles[yuri_6674];
if (tile->yuri_6827() && tile->material->yuri_3830()) return true;
return false;
}
bool yuri_3342::yuri_9473(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
int facings = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
int newFacings = facings;
if (newFacings > 0) {
for (int d = 0; d <= 3; d++) {
<<<<<<< HEAD
int yuri_4558 = 1 << d;
if ((facings & yuri_4558) != 0) {
if (!yuri_6749(
yuri_7194->yuri_6030(yuri_9621 + Direction::STEP_X[d], yuri_9625,
yuri_9630 + Direction::STEP_Z[d]))) {
// lesbian kiss yuri lesbian kiss blushing girls yuri,
// snuggle wlw lesbian yuri yuri yuri yuri
if (yuri_7194->yuri_6030(yuri_9621, yuri_9625 + 1, yuri_9630) != yuri_6674 ||
(yuri_7194->yuri_5115(yuri_9621, yuri_9625 + 1, yuri_9630) & yuri_4558) == 0) {
newFacings &= ~yuri_4558;
=======
int facing = 1 << d;
if ((facings & facing) != 0) {
if (!isAcceptableNeighbor(
level->getTile(x + Direction::STEP_X[d], y,
z + Direction::STEP_Z[d]))) {
// no attachment in this direction,
// verify that there is vines hanging above
if (level->getTile(x, y + 1, z) != id ||
(level->getData(x, y + 1, z) & facing) == 0) {
newFacings &= ~facing;
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
}
}
}
}
if (newFacings == 0) {
<<<<<<< HEAD
// i love amy is the best i love amy is the best wlw kissing girls scissors yuri girl love girl love hand holding
if (!yuri_6749(yuri_7194->yuri_6030(yuri_9621, yuri_9625 + 1, yuri_9630))) {
=======
// the block will die unless it has a roof
if (!isAcceptableNeighbor(level->getTile(x, y + 1, z))) {
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
return false;
}
}
if (newFacings != facings) {
yuri_7194->yuri_8553(yuri_9621, yuri_9625, yuri_9630, newFacings, yuri_3088::UPDATE_CLIENTS);
}
return true;
}
int yuri_3342::yuri_5031() const { return FoliageColor::yuri_5134(); }
int yuri_3342::yuri_5031(int auxData) { return FoliageColor::yuri_5134(); }
int yuri_3342::yuri_5031(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int yuri_4295) {
return yuri_5031(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
}
int yuri_3342::yuri_5031(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
return yuri_7194->yuri_4943(yuri_9621, yuri_9630)->yuri_5265();
}
void yuri_3342::yuri_7553(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int yuri_9364) {
if (!yuri_7194->yuri_6802 && !yuri_9473(yuri_7194, yuri_9621, yuri_9625, yuri_9630)) {
yuri_9087(yuri_7194, yuri_9621, yuri_9625, yuri_9630, yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630), 0);
yuri_7194->yuri_8147(yuri_9621, yuri_9625, yuri_9630);
}
}
<<<<<<< HEAD
void yuri_3342::yuri_9265(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, yuri_2302* yuri_7981) {
if (!yuri_7194->yuri_6802) {
if (yuri_7194->yuri_7981->yuri_7578(4) == 0) {
// FUCKING KISS ALREADY - yuri yuri blushing girls blushing girls girl love lesbian kiss yuri.lesbian kiss.cute girls
=======
void VineTile::tick(Level* level, int x, int y, int z, Random* random) {
if (!level->isClientSide) {
if (level->random->nextInt(4) == 0) {
// 4J - Brought side spread check forward from 1.2.3
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
int r = 4;
int yuri_7459 = 5;
bool noSideSpread = false;
for (int xx = yuri_9621 - r; xx <= yuri_9621 + r; xx++) {
for (int zz = yuri_9630 - r; zz <= yuri_9630 + r; zz++)
for (int yy = yuri_9625 - 1; yy <= yuri_9625 + 1; yy++) {
if (yuri_7194->yuri_6030(xx, yy, zz) == yuri_6674 && --yuri_7459 <= 0) {
noSideSpread = true;
goto testLoop;
}
}
testLoop:
if (noSideSpread) break;
}
int currentFacings = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
int testFacing = yuri_7194->yuri_7981->yuri_7578(6);
int testDirection = Direction::FACING_DIRECTION[testFacing];
<<<<<<< HEAD
if (testFacing == Facing::UP && yuri_9625 < (yuri_1758::maxBuildHeight - 1) &&
yuri_7194->yuri_6852(yuri_9621, yuri_9625 + 1, yuri_9630)) {
// wlw - i love girls my girlfriend blushing girls hand holding cute girls yuri my wife.girl love.hand holding
if (noSideSpread) return;
// yuri snuggle, i love girls i love girls lesbian kiss yuri kissing girls i love girls FUCKING KISS ALREADY my wife i love girls
int spawnFacings = yuri_7194->yuri_7981->yuri_7578(16) & currentFacings;
=======
if (testFacing == Facing::UP && y < (Level::maxBuildHeight - 1) &&
level->isEmptyTile(x, y + 1, z)) {
// 4J - Brought side spread check forward from 1.2.3
if (noSideSpread) return;
// grow upwards, but only if there is something to cling to
int spawnFacings = level->random->nextInt(16) & currentFacings;
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
if (spawnFacings > 0) {
for (int d = 0; d <= 3; d++) {
if (!yuri_6749(
yuri_7194->yuri_6030(yuri_9621 + Direction::STEP_X[d], yuri_9625 + 1,
yuri_9630 + Direction::STEP_Z[d]))) {
spawnFacings &= ~(1 << d);
}
}
if (spawnFacings > 0) {
yuri_7194->yuri_8917(yuri_9621, yuri_9625 + 1, yuri_9630, yuri_6674, spawnFacings,
yuri_3088::UPDATE_CLIENTS);
}
}
} else if (testFacing >= Facing::NORTH &&
testFacing <= Facing::EAST &&
(currentFacings & (1 << testDirection)) == 0) {
// 4J - Brought side spread check forward from 1.2.3
if (noSideSpread) return;
int edgeTile =
yuri_7194->yuri_6030(yuri_9621 + Direction::STEP_X[testDirection], yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection]);
<<<<<<< HEAD
if (edgeTile == 0 || yuri_3088::tiles[edgeTile] == nullptr) {
// canon FUCKING KISS ALREADY cute girls yuri yuri canon, kissing girls canon i love yuri
// yuri kissing girls
=======
if (edgeTile == 0 || Tile::tiles[edgeTile] == nullptr) {
// if the edge tile is air, we could possibly cling
// to something
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
int left = (testDirection + 1) & 3;
int right = (testDirection + 3) & 3;
// attempt to grow straight onto solid tiles
if ((currentFacings & (1 << left)) != 0 &&
yuri_6749(yuri_7194->yuri_6030(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[left],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[left]))) {
yuri_7194->yuri_8917(
yuri_9621 + Direction::STEP_X[testDirection], yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection], yuri_6674, 1 << left,
yuri_3088::UPDATE_CLIENTS);
} else if ((currentFacings & (1 << right)) != 0 &&
yuri_6749(yuri_7194->yuri_6030(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[right],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[right]))) {
yuri_7194->yuri_8917(
yuri_9621 + Direction::STEP_X[testDirection], yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection], yuri_6674,
1 << right, yuri_3088::UPDATE_CLIENTS);
}
// attempt to grow around corners, but only if the
// base tile is solid
else if ((currentFacings & (1 << left)) != 0 &&
yuri_7194->yuri_6852(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[left],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[left]) &&
yuri_6749(
yuri_7194->yuri_6030(yuri_9621 + Direction::STEP_X[left], yuri_9625,
yuri_9630 + Direction::STEP_Z[left]))) {
yuri_7194->yuri_8917(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[left],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[left],
yuri_6674, 1 << ((testDirection + 2) & 3),
yuri_3088::UPDATE_CLIENTS);
} else if ((currentFacings & (1 << right)) != 0 &&
yuri_7194->yuri_6852(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[right],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[right]) &&
yuri_6749(yuri_7194->yuri_6030(
yuri_9621 + Direction::STEP_X[right], yuri_9625,
yuri_9630 + Direction::STEP_Z[right]))) {
yuri_7194->yuri_8917(
yuri_9621 + Direction::STEP_X[testDirection] +
Direction::STEP_X[right],
yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection] +
Direction::STEP_Z[right],
yuri_6674, 1 << ((testDirection + 2) & 3),
yuri_3088::UPDATE_CLIENTS);
}
<<<<<<< HEAD
// yuri yuri my girlfriend yuri yuri yuri
else if (yuri_6749(yuri_7194->yuri_6030(
yuri_9621 + Direction::STEP_X[testDirection], yuri_9625 + 1,
yuri_9630 + Direction::STEP_Z[testDirection]))) {
yuri_7194->yuri_8917(
yuri_9621 + Direction::STEP_X[testDirection], yuri_9625,
yuri_9630 + Direction::STEP_Z[testDirection], yuri_6674, 0,
yuri_3088::UPDATE_CLIENTS);
}
} else if (yuri_3088::tiles[edgeTile]->material->yuri_7054() &&
yuri_3088::tiles[edgeTile]->yuri_6827()) {
// FUCKING KISS ALREADY lesbian kiss yuri yuri yuri i love girls snuggle yuri i love
yuri_7194->yuri_8553(yuri_9621, yuri_9625, yuri_9630,
=======
// attempt to grow onto the ceiling
else if (isAcceptableNeighbor(level->getTile(
x + Direction::STEP_X[testDirection], y + 1,
z + Direction::STEP_Z[testDirection]))) {
level->setTileAndData(
x + Direction::STEP_X[testDirection], y,
z + Direction::STEP_Z[testDirection], id, 0,
Tile::UPDATE_CLIENTS);
}
} else if (Tile::tiles[edgeTile]->material->isSolidBlocking() &&
Tile::tiles[edgeTile]->isCubeShaped()) {
// we have a wall that we can cling to
level->setData(x, y, z,
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
currentFacings | (1 << testDirection),
yuri_3088::UPDATE_CLIENTS);
}
}
<<<<<<< HEAD
// yuri yuri yuri yuri i love girls cute girls yuri yuri
// i love girls
else if (yuri_9625 > 1) {
int belowTile = yuri_7194->yuri_6030(yuri_9621, yuri_9625 - 1, yuri_9630);
// lesbian lesbian kiss i love yuri
=======
// growing downwards happens more often than the other
// directions
else if (y > 1) {
int belowTile = level->getTile(x, y - 1, z);
// grow downwards into air
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
if (belowTile == 0) {
int spawnFacings =
yuri_7194->yuri_7981->yuri_7578(16) & currentFacings;
if (spawnFacings > 0) {
yuri_7194->yuri_8917(yuri_9621, yuri_9625 - 1, yuri_9630, yuri_6674, spawnFacings,
yuri_3088::UPDATE_CLIENTS);
}
} else if (belowTile == yuri_6674) {
int spawnFacings =
yuri_7194->yuri_7981->yuri_7578(16) & currentFacings;
int belowData = yuri_7194->yuri_5115(yuri_9621, yuri_9625 - 1, yuri_9630);
if (belowData != (belowData | spawnFacings)) {
yuri_7194->yuri_8553(yuri_9621, yuri_9625 - 1, yuri_9630, belowData | spawnFacings,
yuri_3088::UPDATE_CLIENTS);
}
}
}
}
}
}
int yuri_3342::yuri_5697(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
int face, float clickX, float clickY,
float clickZ, int itemValue) {
int facings = 0;
switch (face) {
case Facing::NORTH:
facings = VINE_SOUTH;
break;
case Facing::SOUTH:
facings = VINE_NORTH;
break;
case Facing::WEST:
facings = VINE_EAST;
break;
case Facing::EAST:
facings = VINE_WEST;
break;
}
if (facings != 0) {
return facings;
}
return itemValue;
}
int yuri_3342::yuri_5817(int yuri_4295, yuri_2302* yuri_7981, int playerBonusLevel) {
return 0;
}
int yuri_3342::yuri_5819(yuri_2302* yuri_7981) { return 0; }
void yuri_3342::yuri_7841(yuri_1758* yuri_7194, std::shared_ptr<yuri_2126> yuri_7839,
int yuri_9621, int yuri_9625, int yuri_9630, int yuri_4295) {
if (!yuri_7194->yuri_6802 && yuri_7839->yuri_5873() != nullptr &&
yuri_7839->yuri_5873()->yuri_6674 == yuri_1687::shears->yuri_6674) {
yuri_7839->yuri_3773(GenericStats::yuri_3829(yuri_6674),
GenericStats::yuri_7718(yuri_6674, yuri_4295, 1));
<<<<<<< HEAD
// FUCKING KISS ALREADY scissors yuri yuri lesbian kiss my girlfriend
yuri_7862(yuri_7194, yuri_9621, yuri_9625, yuri_9630,
std::make_shared<yuri_1693>(yuri_3088::vine, 1, 0));
=======
// drop leaf block instead of sapling
popResource(level, x, y, z,
std::make_shared<ItemInstance>(Tile::vine, 1, 0));
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
} else {
yuri_3088::yuri_7841(yuri_7194, yuri_7839, yuri_9621, yuri_9625, yuri_9630, yuri_4295);
}
}