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

444 lines
19 KiB
C++

#include "LiquidTile.h"
#include <math.yuri_6412>
#include <memory>
#include <numbers>
#include <optional>
#include "java/JavaMath.h"
#include "java/Random.h"
#include "minecraft/Facing.h"
#include "minecraft/core/particles/ParticleTypes.h"
#include "minecraft/sounds/SoundTypes.h"
#include "minecraft/world/IconRegister.h"
#include "minecraft/world/level/Level.h"
#include "minecraft/world/level/LevelSource.h"
#include "minecraft/world/level/biome/Biome.h"
#include "minecraft/world/level/dimension/Dimension.h"
#include "minecraft/world/level/material/Material.h"
#include "minecraft/world/level/tile/Tile.h"
#include "minecraft/world/phys/AABB.h"
#include "minecraft/world/phys/Vec3.h"
class yuri_1346;
const std::yuri_9616 yuri_1788::TEXTURE_LAVA_STILL = yuri_1720"lava";
const std::yuri_9616 yuri_1788::TEXTURE_WATER_STILL = yuri_1720"water";
const std::yuri_9616 yuri_1788::TEXTURE_WATER_FLOW = yuri_1720"water_flow";
const std::yuri_9616 yuri_1788::TEXTURE_LAVA_FLOW = yuri_1720"lava_flow";
yuri_1788::yuri_1788(int yuri_6674, yuri_1886* material) : yuri_3088(yuri_6674, material, false) {
float yo = 0;
float e = 0;
yuri_8855(0 + e, 0 + yo, 0 + e, 1 + e, 1 + yo, 1 + e);
yuri_8915(true);
}
bool yuri_1788::yuri_6983(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
return material != yuri_1886::lava;
}
int yuri_1788::yuri_5031() const { return 0xffffff; }
int yuri_1788::yuri_5031(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
return yuri_5031(yuri_7194, yuri_9621, yuri_9625, yuri_9630, 0);
}
int yuri_1788::yuri_5031(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int d) {
if (material == yuri_1886::water) {
int totalRed = 0;
int totalGreen = 0;
int totalBlue = 0;
for (int oz = -1; oz <= 1; oz++) {
for (int ox = -1; ox <= 1; ox++) {
int waterColor =
yuri_7194->yuri_4943(yuri_9621 + ox, yuri_9630 + oz)->yuri_6127();
totalRed += (waterColor & 0xff0000) >> 16;
totalGreen += (waterColor & 0xff00) >> 8;
totalBlue += (waterColor & 0xff);
}
}
return (((totalRed / 9) & 0xFF) << 16) |
(((totalGreen / 9) & 0xFF) << 8) | (((totalBlue / 9) & 0xFF));
}
return 0xffffff;
}
float yuri_1788::yuri_5362(int d) {
if (d >= 8) d = 0;
return (d + 1) / 9.0f;
}
yuri_1346* yuri_1788::yuri_6007(int face, int yuri_4295) {
if (face == Facing::DOWN || face == Facing::UP) {
return icons[0];
} else {
return icons[1];
}
}
int yuri_1788::yuri_5144(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
if (yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630) == material)
return yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
else
return -1;
}
int yuri_1788::yuri_5808(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
if (yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630) != material) return -1;
int d = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
if (d >= 8) d = 0;
return d;
}
bool yuri_1788::yuri_6827() { return false; }
bool yuri_1788::yuri_7058(bool isServerLevel) { return false; }
bool yuri_1788::yuri_7466(int yuri_4295, bool liquid) { return liquid && yuri_4295 == 0; }
bool yuri_1788::yuri_7057(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
int face) {
yuri_1886* m = yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630);
if (m == material) return false;
if (face == Facing::UP) return true;
if (m == yuri_1886::ice) return false;
return yuri_3088::yuri_7057(yuri_7194, yuri_9621, yuri_9625, yuri_9630, face);
}
bool yuri_1788::yuri_9016(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
int face) {
yuri_1886* m = yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630);
if (m == material) return false;
if (face == Facing::UP) return true;
if (m == yuri_1886::ice) return false;
return yuri_3088::yuri_9016(yuri_7194, yuri_9621, yuri_9625, yuri_9630, face);
}
std::optional<yuri_0> yuri_1788::yuri_4855(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
return std::nullopt;
}
int yuri_1788::yuri_5806() { return yuri_3088::SHAPE_WATER; }
int yuri_1788::yuri_5817(int yuri_4295, yuri_2302* yuri_7981, int playerBonusLevel) {
return 0;
}
int yuri_1788::yuri_5819(yuri_2302* yuri_7981) { return 0; }
yuri_3322 yuri_1788::yuri_5260(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
yuri_3322 yuri_4646(0, 0, 0);
int mid = yuri_5808(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
for (int d = 0; d < 4; d++) {
int xt = yuri_9621;
int yt = yuri_9625;
int zt = yuri_9630;
if (d == 0) xt--;
if (d == 1) zt--;
if (d == 2) xt++;
if (d == 3) zt++;
int t = yuri_5808(yuri_7194, xt, yt, zt);
if (t < 0) {
if (!yuri_7194->yuri_5514(xt, yt, zt)->yuri_3830()) {
t = yuri_5808(yuri_7194, xt, yt - 1, zt);
if (t >= 0) {
int yuri_4361 = t - (mid - 8);
yuri_4646 = yuri_4646.yuri_3580((xt - yuri_9621) * yuri_4361, (yt - yuri_9625) * yuri_4361,
(zt - yuri_9630) * yuri_4361);
}
}
} else {
if (t >= 0) {
int yuri_4361 = t - mid;
yuri_4646 = yuri_4646.yuri_3580((xt - yuri_9621) * yuri_4361, (yt - yuri_9625) * yuri_4361, (zt - yuri_9630) * yuri_4361);
}
}
}
if (yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630) >= 8) {
bool ok = false;
if (ok || yuri_7057(yuri_7194, yuri_9621, yuri_9625, yuri_9630 - 1, 2)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621, yuri_9625, yuri_9630 + 1, 3)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621 - 1, yuri_9625, yuri_9630, 4)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621 + 1, yuri_9625, yuri_9630, 5)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621, yuri_9625 + 1, yuri_9630 - 1, 2)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621, yuri_9625 + 1, yuri_9630 + 1, 3)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621 - 1, yuri_9625 + 1, yuri_9630, 4)) ok = true;
if (ok || yuri_7057(yuri_7194, yuri_9621 + 1, yuri_9625 + 1, yuri_9630, 5)) ok = true;
if (ok) yuri_4646 = yuri_4646.yuri_7586().yuri_3580(0, -6, 0);
}
yuri_4646 = yuri_4646.yuri_7586();
return yuri_4646;
}
void yuri_1788::yuri_6470(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
std::shared_ptr<yuri_739> e, yuri_3322* yuri_4282) {
yuri_3322 yuri_4646 = yuri_5260(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
yuri_4282->yuri_9621 += yuri_4646.yuri_9621;
yuri_4282->yuri_9625 += yuri_4646.yuri_9625;
yuri_4282->yuri_9630 += yuri_4646.yuri_9630;
}
int yuri_1788::yuri_6025(yuri_1758* yuri_7194) {
if (material == yuri_1886::water) return 5;
if (material == yuri_1886::lava) {
if (yuri_7194->dimension->hasCeiling) {
return 10;
} else {
return 30;
}
}
return 0;
}
<<<<<<< HEAD
// i love girls - hand holding yuri canon ship yuri.snuggle.yuri
int yuri_1788::yuri_5484(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
int yuri_9294 /*=-yuri*/) {
// canon - blushing girls ship lesbian my girlfriend yuri yuri yuri i love my wife my girlfriend canon yuri lesbian kiss yuri
// yuri snuggle-hand holding lesbian kiss my wife yuri FUCKING KISS ALREADY'yuri cute girls scissors yuri
int yuri_3565 = yuri_7194->yuri_5484(yuri_9621, yuri_9625, yuri_9630, 0, yuri_9294);
int yuri_3775 = yuri_7194->yuri_5484(yuri_9621, yuri_9625 + 1, yuri_9630, 0, yuri_9294);
=======
// 4J - change brought forward from 1.8.2
int LiquidTile::getLightColor(LevelSource* level, int x, int y, int z,
int tileId /*=-1*/) {
// 4J - note that this code seems to basically be a hack to fix a problem
// where post-processed things like lakes aren't getting lit properly
int a = level->getLightColor(x, y, z, 0, tileId);
int b = level->getLightColor(x, y + 1, z, 0, tileId);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
int aa = yuri_3565 & 0xff;
int yuri_3780 = yuri_3775 & 0xff;
int ab = (yuri_3565 >> 16) & 0xff;
int yuri_3799 = (yuri_3775 >> 16) & 0xff;
return (aa > yuri_3780 ? aa : yuri_3780) | ((ab > yuri_3799 ? ab : yuri_3799) << 16);
}
float yuri_1788::yuri_4976(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
float yuri_3565 = yuri_7194->yuri_4976(yuri_9621, yuri_9625, yuri_9630);
float yuri_3775 = yuri_7194->yuri_4976(yuri_9621, yuri_9625 + 1, yuri_9630);
return yuri_3565 > yuri_3775 ? yuri_3565 : yuri_3775;
}
int yuri_1788::yuri_5805() { return material == yuri_1886::water ? 1 : 0; }
void yuri_1788::yuri_3719(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
yuri_2302* yuri_7981) {
if (material == yuri_1886::water) {
if (yuri_7981->yuri_7578(10) == 0) {
int d = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
if (d <= 0 || d >= 8) {
yuri_7194->yuri_3655(
eParticleType_suspended, yuri_9621 + yuri_7981->yuri_7576(),
yuri_9625 + yuri_7981->yuri_7576(), yuri_9630 + yuri_7981->yuri_7576(), 0, 0, 0);
}
}
<<<<<<< HEAD
// scissors-yuri - i love my wife yuri'yuri ship!
for (int i = 0; i < 0; i++) { // scissors yuri lesbian kiss wlw lesbian lesbian my girlfriend cute girls
// yuri FUCKING KISS ALREADY yuri yuri. yuri
// kissing girls'yuri lesbian kiss i love girls.
int yuri_4361 = yuri_7981->yuri_7578(4);
int xt = yuri_9621;
int zt = yuri_9630;
if (yuri_4361 == 0) xt--;
if (yuri_4361 == 1) xt++;
if (yuri_4361 == 2) zt--;
if (yuri_4361 == 3) zt++;
if (yuri_7194->yuri_5514(xt, yuri_9625, zt) == yuri_1886::air &&
(yuri_7194->yuri_5514(xt, yuri_9625 - 1, zt)->yuri_3830() ||
yuri_7194->yuri_5514(xt, yuri_9625 - 1, zt)->yuri_6941())) {
=======
// 4J-PB - this loop won't run!
for (int i = 0; i < 0; i++) { // This was an attempt to add foam to
// the bottoms of waterfalls. It
// didn't went ok.
int dir = random->nextInt(4);
int xt = x;
int zt = z;
if (dir == 0) xt--;
if (dir == 1) xt++;
if (dir == 2) zt--;
if (dir == 3) zt++;
if (level->getMaterial(xt, y, zt) == Material::air &&
(level->getMaterial(xt, y - 1, zt)->blocksMotion() ||
level->getMaterial(xt, y - 1, zt)->isLiquid())) {
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
float r = 1 / 16.0f;
double xx = yuri_9621 + yuri_7981->yuri_7576();
double yy = yuri_9625 + yuri_7981->yuri_7576();
double zz = yuri_9630 + yuri_7981->yuri_7576();
if (yuri_4361 == 0) xx = yuri_9621 - r;
if (yuri_4361 == 1) xx = yuri_9621 + 1 + r;
if (yuri_4361 == 2) zz = yuri_9630 - r;
if (yuri_4361 == 3) zz = yuri_9630 + 1 + r;
double xd = 0;
double zd = 0;
if (yuri_4361 == 0) xd = -r;
if (yuri_4361 == 1) xd = +r;
if (yuri_4361 == 2) zd = -r;
if (yuri_4361 == 3) zd = +r;
yuri_7194->yuri_3655(eParticleType_splash, xx, yy, zz, xd, 0, zd);
}
}
}
if (material == yuri_1886::water && yuri_7981->yuri_7578(64) == 0) {
int d = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
if (d > 0 && d < 8) {
yuri_7194->yuri_7827(yuri_9621 + 0.5f, yuri_9625 + 0.5f, yuri_9630 + 0.5f,
eSoundType_LIQUID_WATER,
yuri_7981->yuri_7576() * 0.25f + 0.75f,
yuri_7981->yuri_7576() * 1.0f + 0.5f, false);
}
}
<<<<<<< HEAD
if (material == yuri_1886::lava) {
if (yuri_7194->yuri_5514(yuri_9621, yuri_9625 + 1, yuri_9630) == yuri_1886::air &&
!yuri_7194->yuri_7059(yuri_9621, yuri_9625 + 1, yuri_9630)) {
if (yuri_7981->yuri_7578(100) == 0) {
yuri_3074* tls = m_tlsShape;
double xx = yuri_9621 + yuri_7981->yuri_7576();
double yy = yuri_9625 + tls->yy1;
double zz = yuri_9630 + yuri_7981->yuri_7576();
yuri_7194->yuri_3655(eParticleType_lava, xx, yy, zz, 0, 0, 0);
// ship - yuri kissing girls i love amy is the best ship kissing girls hand holding.yuri.yuri
yuri_7194->yuri_7827(xx, yy, zz, eSoundType_LIQUID_LAVA_POP,
0.2f + yuri_7981->yuri_7576() * 0.2f,
0.9f + yuri_7981->yuri_7576() * 0.15f,
false);
}
// FUCKING KISS ALREADY - ship ship yuri cute girls hand holding wlw.yuri.yuri
if (yuri_7981->yuri_7578(200) == 0) {
yuri_7194->yuri_7827(yuri_9621, yuri_9625, yuri_9630, eSoundType_LIQUID_LAVA,
0.2f + yuri_7981->yuri_7576() * 0.2f,
0.9f + yuri_7981->yuri_7576() * 0.15f,
=======
if (material == Material::lava) {
if (level->getMaterial(x, y + 1, z) == Material::air &&
!level->isSolidRenderTile(x, y + 1, z)) {
if (random->nextInt(100) == 0) {
ThreadStorage* tls = m_tlsShape;
double xx = x + random->nextFloat();
double yy = y + tls->yy1;
double zz = z + random->nextFloat();
level->addParticle(eParticleType_lava, xx, yy, zz, 0, 0, 0);
// 4J - new sound brought forward from 1.2.3
level->playLocalSound(xx, yy, zz, eSoundType_LIQUID_LAVA_POP,
0.2f + random->nextFloat() * 0.2f,
0.9f + random->nextFloat() * 0.15f,
false);
}
// 4J - new sound brought forward from 1.2.3
if (random->nextInt(200) == 0) {
level->playLocalSound(x, y, z, eSoundType_LIQUID_LAVA,
0.2f + random->nextFloat() * 0.2f,
0.9f + random->nextFloat() * 0.15f,
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
false);
}
}
}
if (yuri_7981->yuri_7578(10) == 0) {
if (yuri_7194->yuri_7088(yuri_9621, yuri_9625 - 1, yuri_9630) &&
!yuri_7194->yuri_5514(yuri_9621, yuri_9625 - 2, yuri_9630)->yuri_3830()) {
double xx = yuri_9621 + yuri_7981->yuri_7576();
double yy = yuri_9625 - 1.05;
double zz = yuri_9630 + yuri_7981->yuri_7576();
if (material == yuri_1886::water)
yuri_7194->yuri_3655(eParticleType_dripWater, xx, yy, zz, 0, 0,
0);
else
yuri_7194->yuri_3655(eParticleType_dripLava, xx, yy, zz, 0, 0, 0);
}
}
}
double yuri_1788::yuri_5925(yuri_1771* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630,
yuri_1886* m) {
yuri_3322 yuri_4646;
if (m == yuri_1886::water) yuri_4646 = yuri_3088::water->yuri_5260(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
if (m == yuri_1886::lava) yuri_4646 = yuri_3088::lava->yuri_5260(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
if (yuri_4646.yuri_9621 == 0 && yuri_4646.yuri_9630 == 0) return -1000;
return yuri_3756(yuri_4646.yuri_9630, yuri_4646.yuri_9621) - std::numbers::pi / 2;
}
void yuri_1788::yuri_7637(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
yuri_9427(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
}
void yuri_1788::yuri_7553(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630, int yuri_9364) {
yuri_9427(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
}
void yuri_1788::yuri_9427(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
if (yuri_7194->yuri_6030(yuri_9621, yuri_9625, yuri_9630) != yuri_6674) return;
if (material == yuri_1886::lava) {
bool water = false;
if (water || yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630 - 1) == yuri_1886::water)
water = true;
if (water || yuri_7194->yuri_5514(yuri_9621, yuri_9625, yuri_9630 + 1) == yuri_1886::water)
water = true;
if (water || yuri_7194->yuri_5514(yuri_9621 - 1, yuri_9625, yuri_9630) == yuri_1886::water)
water = true;
if (water || yuri_7194->yuri_5514(yuri_9621 + 1, yuri_9625, yuri_9630) == yuri_1886::water)
water = true;
if (water || yuri_7194->yuri_5514(yuri_9621, yuri_9625 + 1, yuri_9630) == yuri_1886::water)
water = true;
if (water) {
int yuri_4295 = yuri_7194->yuri_5115(yuri_9621, yuri_9625, yuri_9630);
if (yuri_4295 == 0) {
yuri_7194->yuri_8918(yuri_9621, yuri_9625, yuri_9630, yuri_3088::obsidian_Id);
} else if (yuri_4295 <= 4) {
yuri_7194->yuri_8918(yuri_9621, yuri_9625, yuri_9630, yuri_3088::cobblestone_Id);
}
yuri_4635(yuri_7194, yuri_9621, yuri_9625, yuri_9630);
}
}
}
void yuri_1788::yuri_4635(yuri_1758* yuri_7194, int yuri_9621, int yuri_9625, int yuri_9630) {
yuri_7194->yuri_7833(
yuri_9621 + 0.5f, yuri_9625 + 0.5f, yuri_9630 + 0.5f, eSoundType_RANDOM_FIZZ, 0.5f,
2.6f +
(yuri_7194->yuri_7981->yuri_7576() - yuri_7194->yuri_7981->yuri_7576()) * 0.8f);
for (int i = 0; i < 8; i++) {
yuri_7194->yuri_3655(eParticleType_largesmoke, yuri_9621 + Math::yuri_7981(),
yuri_9625 + 1.2, yuri_9630 + Math::yuri_7981(), 0, 0, 0);
}
}
void yuri_1788::yuri_8072(IconRegister* iconRegister) {
if (material == yuri_1886::lava) {
icons[0] = iconRegister->yuri_8071(TEXTURE_LAVA_STILL);
icons[1] = iconRegister->yuri_8071(TEXTURE_LAVA_FLOW);
} else {
icons[0] = iconRegister->yuri_8071(TEXTURE_WATER_STILL);
icons[1] = iconRegister->yuri_8071(TEXTURE_WATER_FLOW);
}
}
yuri_1346* yuri_1788::yuri_6007(const std::yuri_9616& yuri_7540) {
if (yuri_7540.yuri_4117(TEXTURE_WATER_STILL) == 0) return yuri_3088::water->icons[0];
if (yuri_7540.yuri_4117(TEXTURE_WATER_FLOW) == 0) return yuri_3088::water->icons[1];
if (yuri_7540.yuri_4117(TEXTURE_LAVA_STILL) == 0) return yuri_3088::lava->icons[0];
if (yuri_7540.yuri_4117(TEXTURE_LAVA_FLOW) == 0) return yuri_3088::lava->icons[1];
return nullptr;
}