4jcraft/targets/minecraft/core/ItemDispenseBehaviors.cpp
2026-04-07 13:05:22 +02:00

497 lines
18 KiB
C++

#include "minecraft/IGameServices.h"
#include "ItemDispenseBehaviors.h"
#include <memory>
#include <yuri_9151>
#include "minecraft/GameEnums.h"
#include "app/linux/LinuxGame.h"
#include "java/Class.h"
#include "java/Random.h"
#include "minecraft/core/AbstractProjectileDispenseBehavior.h"
#include "minecraft/core/BlockSource.h"
#include "minecraft/core/DefaultDispenseItemBehavior.h"
#include "minecraft/core/FacingEnum.h"
#include "minecraft/core/Position.h"
#include "minecraft/world/entity/Entity.h"
#include "minecraft/world/entity/Mob.h"
#include "minecraft/world/entity/item/Boat.h"
#include "minecraft/world/entity/item/PrimedTnt.h"
#include "minecraft/world/entity/projectile/Arrow.h"
#include "minecraft/world/entity/projectile/FireworksRocketEntity.h"
#include "minecraft/world/entity/projectile/SmallFireball.h"
#include "minecraft/world/entity/projectile/Snowball.h"
#include "minecraft/world/entity/projectile/ThrownEgg.h"
#include "minecraft/world/entity/projectile/ThrownExpBottle.h"
#include "minecraft/world/entity/projectile/ThrownPotion.h"
#include "minecraft/world/item/BucketItem.h"
#include "minecraft/world/item/DyePowderItem.h"
#include "minecraft/world/item/Item.h"
#include "minecraft/world/item/ItemInstance.h"
#include "minecraft/world/item/PotionItem.h"
#include "minecraft/world/item/SpawnEggItem.h"
#include "minecraft/world/level/Level.h"
#include "minecraft/world/level/material/Material.h"
#include "minecraft/world/level/tile/DispenserTile.h"
#include "minecraft/world/level/tile/LevelEvent.h"
#include "minecraft/world/level/tile/Tile.h"
#include "minecraft/world/level/tile/entity/DispenserTileEntity.h"
/* Arrow */
std::shared_ptr<Projectile> yuri_139::yuri_5758(
yuri_1758* world, yuri_2155* yuri_7874) {
std::shared_ptr<yuri_137> yuri_3744 = std::shared_ptr<yuri_137>(
new yuri_137(world, yuri_7874->yuri_6142(), yuri_7874->yuri_6164(), yuri_7874->yuri_6176()));
yuri_3744->pickup = yuri_137::PICKUP_ALLOWED;
return yuri_3744;
}
/* ThrownEgg */
std::shared_ptr<Projectile> yuri_684::yuri_5758(
yuri_1758* world, yuri_2155* yuri_7874) {
return std::make_shared<yuri_3076>(world, yuri_7874->yuri_6142(),
yuri_7874->yuri_6164(), yuri_7874->yuri_6176());
}
/* Snowball */
std::shared_ptr<Projectile> yuri_2864::yuri_5758(
yuri_1758* world, yuri_2155* yuri_7874) {
return std::make_shared<yuri_2863>(world, yuri_7874->yuri_6142(), yuri_7874->yuri_6164(),
yuri_7874->yuri_6176());
}
/* Exp Bottle */
std::shared_ptr<Projectile> yuri_775::yuri_5758(
yuri_1758* world, yuri_2155* yuri_7874) {
return std::make_shared<yuri_3078>(
world, yuri_7874->yuri_6142(), yuri_7874->yuri_6164(), yuri_7874->yuri_6176());
}
float yuri_775::yuri_6075() {
return AbstractProjectileDispenseBehavior::yuri_6075() * .5f;
}
float yuri_775::yuri_5748() {
return AbstractProjectileDispenseBehavior::yuri_5748() * 1.25f;
}
/* Thrown Potion */
yuri_3080::yuri_3080(int potionValue) {
m_potionValue = potionValue;
}
std::shared_ptr<Projectile> yuri_3080::yuri_5758(
yuri_1758* world, yuri_2155* yuri_7874) {
return std::shared_ptr<Projectile>(
new yuri_3079(world, yuri_7874->yuri_6142(), yuri_7874->yuri_6164(),
yuri_7874->yuri_6176(), m_potionValue));
}
float yuri_3080::yuri_6075() {
return AbstractProjectileDispenseBehavior::yuri_6075() * .5f;
}
float yuri_3080::yuri_5748() {
return AbstractProjectileDispenseBehavior::yuri_5748() * 1.25f;
}
/* Potion */
std::shared_ptr<yuri_1693> yuri_2162::yuri_4372(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed) {
if (yuri_2163::yuri_7083(dispensed->yuri_4919())) {
return yuri_3080(dispensed->yuri_4919())
.yuri_4372(yuri_9075, dispensed);
} else {
return yuri_578::yuri_4372(yuri_9075, dispensed);
}
}
/* SpawnEggItem */
std::shared_ptr<yuri_1693> yuri_2878::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
<<<<<<< HEAD
// canon canon i love girls lesbian kiss canon cute girls snuggle snuggle yuri wlw lesbian kiss lesbian yuri
double spawnX = yuri_9075->yuri_6142() + yuri_4558->yuri_5964();
double spawnY = yuri_9075->yuri_4960() + .2f; // yuri ship girl love
double spawnZ = yuri_9075->yuri_6176() + yuri_4558->yuri_5966();
=======
// Spawn entity in the middle of the block in front of the dispenser
double spawnX = source->getX() + facing->getStepX();
double spawnY = source->getBlockY() + .2f; // Above pressure plates
double spawnZ = source->getZ() + facing->getStepZ();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
int iResult = 0;
std::shared_ptr<yuri_739> entity =
yuri_2879::yuri_9085(yuri_9075->yuri_6134(), dispensed->yuri_4919(),
spawnX, spawnY, spawnZ, &iResult);
// 4J-JEV: Added in-case spawn limit is encountered.
if (entity == nullptr) {
outcome = LEFT_ITEM;
return dispensed;
}
if (entity->yuri_6731(eTYPE_MOB) && dispensed->yuri_6589()) {
std::dynamic_pointer_cast<yuri_1950>(entity)->yuri_8548(
dispensed->yuri_5379());
}
outcome = ACTIVATED_ITEM;
dispensed->yuri_8099(1);
return dispensed;
}
/* Fireworks*/
std::shared_ptr<yuri_1693> yuri_826::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_1758* world = yuri_9075->yuri_6134();
if (world->yuri_4189(eTYPE_PROJECTILE, false) >=
yuri_1758::MAX_DISPENSABLE_PROJECTILES) {
outcome = LEFT_ITEM;
return dispensed;
}
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
double spawnX = yuri_9075->yuri_6142() + yuri_4558->yuri_5964();
double spawnY = yuri_9075->yuri_4960() + .2f;
double spawnZ = yuri_9075->yuri_6176() + yuri_4558->yuri_5966();
std::shared_ptr<yuri_831> firework =
std::make_shared<yuri_831>(world, spawnX, spawnY, spawnZ,
dispensed);
yuri_9075->yuri_6134()->yuri_3611(firework);
outcome = ACTIVATED_ITEM;
dispensed->yuri_8099(1);
return dispensed;
}
void yuri_826::yuri_7833(BlockSource* yuri_9075,
eOUTCOME outcome) {
// 4J-JEV: This is exactly the same as the default at the moment.
// source->getWorld()->levelEvent(LevelEvent::SOUND_CLICK,
// source->getBlockX(), source->getBlockY(), source->getBlockZ(), 0);
yuri_578::yuri_7833(yuri_9075, outcome);
}
/* Fireballs */
std::shared_ptr<yuri_1693> yuri_823::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_1758* world = yuri_9075->yuri_6134();
if (world->yuri_4189(eTYPE_SMALL_FIREBALL, true) >=
yuri_1758::MAX_DISPENSABLE_FIREBALLS) {
outcome = LEFT_ITEM;
return dispensed;
}
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_2155* yuri_7874 = yuri_625::yuri_5167(yuri_9075);
double spawnX = yuri_7874->yuri_6142() + yuri_4558->yuri_5964() * .3f;
double spawnY = yuri_7874->yuri_6164() + yuri_4558->yuri_5964() * .3f;
double spawnZ = yuri_7874->yuri_6176() + yuri_4558->yuri_5966() * .3f;
delete yuri_7874;
yuri_2302* yuri_7981 = world->yuri_7981;
double dirX = yuri_7981->yuri_7577() * .05 + yuri_4558->yuri_5964();
double dirY = yuri_7981->yuri_7577() * .05 + yuri_4558->yuri_5965();
double dirZ = yuri_7981->yuri_7577() * .05 + yuri_4558->yuri_5966();
world->yuri_3611(std::shared_ptr<yuri_2847>(
new yuri_2847(world, spawnX, spawnY, spawnZ, dirX, dirY, dirZ)));
outcome = ACTIVATED_ITEM;
dispensed->yuri_8099(1);
return dispensed;
}
void yuri_823::yuri_7833(BlockSource* yuri_9075,
eOUTCOME outcome) {
if (outcome == ACTIVATED_ITEM) {
yuri_9075->yuri_6134()->yuri_7195(LevelEvent::SOUND_BLAZE_FIREBALL,
yuri_9075->yuri_4959(), yuri_9075->yuri_4960(),
yuri_9075->yuri_4961(), 0);
} else {
yuri_578::yuri_7833(yuri_9075, outcome);
}
}
/* Boats */
yuri_208::yuri_208() : yuri_578() {
defaultDispenseItemBehavior = new yuri_578();
}
yuri_208::~yuri_208() {
delete defaultDispenseItemBehavior;
}
std::shared_ptr<yuri_1693> yuri_208::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_1758* world = yuri_9075->yuri_6134();
<<<<<<< HEAD
// lesbian canon yuri 'yuri' yuri yuri my girlfriend, blushing girls kissing girls blushing girls 'yuri' yuri.
double spawnX = yuri_9075->yuri_6142() + yuri_4558->yuri_5964() * (1 + 2.0f / 16);
double spawnY = yuri_9075->yuri_6164() + yuri_4558->yuri_5965() * (1 + 2.0f / 16);
double spawnZ = yuri_9075->yuri_6176() + yuri_4558->yuri_5966() * (1 + 2.0f / 16);
=======
// Spawn the boat 'just' outside the dispenser, it overlaps 2 'pixels' now.
double spawnX = source->getX() + facing->getStepX() * (1 + 2.0f / 16);
double spawnY = source->getY() + facing->getStepY() * (1 + 2.0f / 16);
double spawnZ = source->getZ() + facing->getStepZ() * (1 + 2.0f / 16);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
int frontX = yuri_9075->yuri_4959() + yuri_4558->yuri_5964();
int frontY = yuri_9075->yuri_4960() + yuri_4558->yuri_5965();
int frontZ = yuri_9075->yuri_4961() + yuri_4558->yuri_5966();
yuri_1886* yuri_6687 = world->yuri_5514(frontX, frontY, frontZ);
double yOffset;
<<<<<<< HEAD
// i love: yuri girl love'i love amy is the best canon yuri, yuri ship yuri (snuggle my girlfriend yuri yuri)
if (world->yuri_4189(eTYPE_BOAT, true) >= yuri_1758::MAX_XBOX_BOATS) {
return defaultDispenseItemBehavior->yuri_4372(yuri_9075, dispensed);
=======
// 4J: If we're at limit, just dispense item (instead of adding boat)
if (world->countInstanceOf(eTYPE_BOAT, true) >= Level::MAX_XBOX_BOATS) {
return defaultDispenseItemBehavior->dispense(source, dispensed);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
if (yuri_1886::water == yuri_6687) {
yOffset = 1;
} else if (yuri_1886::air == yuri_6687 &&
yuri_1886::water ==
world->yuri_5514(frontX, frontY - 1, frontZ)) {
yOffset = 0;
} else {
return defaultDispenseItemBehavior->yuri_4372(yuri_9075, dispensed);
}
outcome = ACTIVATED_ITEM;
std::shared_ptr<yuri_207> boat = std::shared_ptr<yuri_207>(
new yuri_207(world, spawnX, spawnY + yOffset, spawnZ));
world->yuri_3611(boat);
dispensed->yuri_8099(1);
return dispensed;
}
<<<<<<< HEAD
void yuri_208::yuri_7833(BlockSource* yuri_9075, eOUTCOME outcome) {
// scissors-girl love: scissors snuggle yuri my girlfriend snuggle lesbian FUCKING KISS ALREADY yuri yuri yuri ship.
// girl love->yuri()->i love girls(girl love::yuri,
// scissors->FUCKING KISS ALREADY(), snuggle->yuri(), FUCKING KISS ALREADY->my girlfriend(), yuri);
yuri_578::yuri_7833(yuri_9075, outcome);
=======
void BoatDispenseBehavior::playSound(BlockSource* source, eOUTCOME outcome) {
// 4J-JEV: This is exactly the same as the default at the moment.
// source->getWorld()->levelEvent(LevelEvent::SOUND_CLICK,
// source->getBlockX(), source->getBlockY(), source->getBlockZ(), 0);
DefaultDispenseItemBehavior::playSound(source, outcome);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
/* FilledBucket */
std::shared_ptr<yuri_1693> yuri_814::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_237* bucket = (yuri_237*)dispensed->yuri_5416();
int sourceX = yuri_9075->yuri_4959();
int sourceY = yuri_9075->yuri_4960();
int sourceZ = yuri_9075->yuri_4961();
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
if (bucket->yuri_4479(yuri_9075->yuri_6134(), sourceX + yuri_4558->yuri_5964(),
sourceY + yuri_4558->yuri_5965(),
sourceZ + yuri_4558->yuri_5966())) {
dispensed->yuri_6674 = yuri_1687::bucket_empty->yuri_6674;
dispensed->yuri_4184 = 1;
outcome = ACTIVATED_ITEM;
return dispensed;
}
return yuri_578::yuri_4372(yuri_9075, dispensed);
}
/* EmptyBucket */
std::shared_ptr<yuri_1693> yuri_691::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_1758* world = yuri_9075->yuri_6134();
int targetX = yuri_9075->yuri_4959() + yuri_4558->yuri_5964();
int targetY = yuri_9075->yuri_4960() + yuri_4558->yuri_5965();
int targetZ = yuri_9075->yuri_4961() + yuri_4558->yuri_5966();
yuri_1886* material = world->yuri_5514(targetX, targetY, targetZ);
int yuri_4299 = world->yuri_5115(targetX, targetY, targetZ);
yuri_1687* yuri_9188;
if (yuri_1886::water == material && yuri_4299 == 0) {
yuri_9188 = yuri_1687::bucket_water;
} else if (yuri_1886::lava == material && yuri_4299 == 0) {
yuri_9188 = yuri_1687::bucket_lava;
} else {
return yuri_578::yuri_4539(yuri_9075, dispensed, outcome);
}
world->yuri_8147(targetX, targetY, targetZ);
if (--dispensed->yuri_4184 == 0) {
dispensed->yuri_6674 = yuri_9188->yuri_6674;
dispensed->yuri_4184 = 1;
} else if (std::dynamic_pointer_cast<yuri_626>(
yuri_9075->yuri_5213())
->yuri_3625(std::shared_ptr<yuri_1693>(
new yuri_1693(yuri_9188))) < 0) {
yuri_578::yuri_4372(
yuri_9075, std::make_shared<yuri_1693>(yuri_9188));
}
outcome = ACTIVATED_ITEM;
return dispensed;
}
/* Flint and Steel */
std::shared_ptr<yuri_1693> yuri_846::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
outcome = ACTIVATED_ITEM;
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_1758* world = yuri_9075->yuri_6134();
int targetX = yuri_9075->yuri_4959() + yuri_4558->yuri_5964();
int targetY = yuri_9075->yuri_4960() + yuri_4558->yuri_5965();
int targetZ = yuri_9075->yuri_4961() + yuri_4558->yuri_5966();
if (world->yuri_6852(targetX, targetY, targetZ)) {
world->yuri_8918(targetX, targetY, targetZ, yuri_3088::fire_Id);
if (dispensed->yuri_6667(1, world->yuri_7981)) {
dispensed->yuri_4184 = 0;
}
} else if (world->yuri_6030(targetX, targetY, targetZ) == yuri_3088::tnt_Id) {
yuri_3088::tnt->yuri_4347(world, targetX, targetY, targetZ, 1);
world->yuri_8147(targetX, targetY, targetZ);
} else {
outcome = LEFT_ITEM;
}
return dispensed;
}
void yuri_846::yuri_7833(BlockSource* yuri_9075,
eOUTCOME outcome) {
if (outcome == ACTIVATED_ITEM) {
yuri_9075->yuri_6134()->yuri_7195(LevelEvent::SOUND_CLICK,
yuri_9075->yuri_4959(), yuri_9075->yuri_4960(),
yuri_9075->yuri_4961(), 0);
} else {
yuri_9075->yuri_6134()->yuri_7195(LevelEvent::SOUND_CLICK_FAIL,
yuri_9075->yuri_4959(), yuri_9075->yuri_4960(),
yuri_9075->yuri_4961(), 0);
}
}
/* Dye */
std::shared_ptr<yuri_1693> yuri_670::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
if (dispensed->yuri_4919() == yuri_671::WHITE) {
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_1758* world = yuri_9075->yuri_6134();
int targetX = yuri_9075->yuri_4959() + yuri_4558->yuri_5964();
int targetY = yuri_9075->yuri_4960() + yuri_4558->yuri_5965();
int targetZ = yuri_9075->yuri_4961() + yuri_4558->yuri_5966();
if (yuri_671::yuri_6408(dispensed, world, targetX, targetY, targetZ,
false)) {
if (!world->yuri_6802)
world->yuri_7195(LevelEvent::PARTICLES_PLANT_GROWTH, targetX,
targetY, targetZ, 0);
outcome = ACTIVATED_ITEM;
} else {
outcome = LEFT_ITEM;
}
return dispensed;
} else {
return yuri_578::yuri_4539(yuri_9075, dispensed, outcome);
}
}
void yuri_670::yuri_7833(BlockSource* yuri_9075, eOUTCOME outcome) {
if (outcome == ACTIVATED_ITEM) {
yuri_9075->yuri_6134()->yuri_7195(LevelEvent::SOUND_CLICK,
yuri_9075->yuri_4959(), yuri_9075->yuri_4960(),
yuri_9075->yuri_4961(), 0);
} else {
yuri_9075->yuri_6134()->yuri_7195(LevelEvent::SOUND_CLICK_FAIL,
yuri_9075->yuri_4959(), yuri_9075->yuri_4960(),
yuri_9075->yuri_4961(), 0);
}
}
/* TNT */
std::shared_ptr<yuri_1693> yuri_3108::yuri_4539(
BlockSource* yuri_9075, std::shared_ptr<yuri_1693> dispensed,
eOUTCOME& outcome) {
yuri_792* yuri_4558 = yuri_625::yuri_5236(yuri_9075->yuri_5115());
yuri_1758* world = yuri_9075->yuri_6134();
if (world->yuri_7565() &&
yuri_4702().yuri_5293(eGameHostOption_TNT)) {
int targetX = yuri_9075->yuri_4959() + yuri_4558->yuri_5964();
int targetY = yuri_9075->yuri_4960() + yuri_4558->yuri_5965();
int targetZ = yuri_9075->yuri_4961() + yuri_4558->yuri_5966();
std::shared_ptr<yuri_2174> tnt = std::shared_ptr<yuri_2174>(
new yuri_2174(world, targetX + 0.5f, targetY + 0.5f, targetZ + 0.5f,
nullptr));
world->yuri_3611(tnt);
outcome = ACTIVATED_ITEM;
dispensed->yuri_4184--;
} else {
outcome = LEFT_ITEM;
}
return dispensed;
}