TU19: add Minecraft.World/Core

This commit is contained in:
Tropical
2026-03-21 15:54:53 -05:00
parent 9b6046cb83
commit 7d05b36f85
21 changed files with 1071 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
#include "../Platform/stdafx.h"
#include "AbstractProjectileDispenseBehavior.h"
#include "../Blocks/DispenserTile.h"
#include "../Entities/Projectile.h"
#include "../Level/Level.h"
#include "../Level/Events/LevelEvent.h"
#include "../Items/ItemInstance.h"
std::shared_ptr<ItemInstance> AbstractProjectileDispenseBehavior::execute(
BlockSource* source, std::shared_ptr<ItemInstance> dispensed,
eOUTCOME& outcome) {
Level* world = source->getWorld();
if (world->countInstanceOf(eTYPE_PROJECTILE, false) >=
Level::MAX_DISPENSABLE_PROJECTILES) {
return DefaultDispenseItemBehavior::execute(source, dispensed, outcome);
}
Position* position = DispenserTile::getDispensePosition(source);
FacingEnum* facing = DispenserTile::getFacing(source->getData());
std::shared_ptr<Projectile> projectile = getProjectile(world, position);
delete position;
projectile->shoot(facing->getStepX(), facing->getStepY() + .1f,
facing->getStepZ(), getPower(), getUncertainty());
world->addEntity(std::dynamic_pointer_cast<Entity>(projectile));
dispensed->remove(1);
return dispensed;
}
void AbstractProjectileDispenseBehavior::playSound(BlockSource* source,
eOUTCOME outcome) {
if (outcome != LEFT_ITEM) {
source->getWorld()->levelEvent(LevelEvent::SOUND_LAUNCH,
source->getBlockX(), source->getBlockY(),
source->getBlockZ(), 0);
}
}
float AbstractProjectileDispenseBehavior::getUncertainty() { return 6.0f; }
float AbstractProjectileDispenseBehavior::getPower() { return 1.1f; }