From da76eed8f72a8d9def6400a9887faafe210741f5 Mon Sep 17 00:00:00 2001 From: piebot Date: Fri, 10 Jul 2026 14:09:15 +0300 Subject: [PATCH] fix(TU20): Fixed a crash when a dispenser is dispensing water or lava when the dispenser is blocked. --- Minecraft.World/BucketItem.cpp | 2 ++ Minecraft.World/ItemDispenseBehaviors.cpp | 7 ++++++- Minecraft.World/ItemDispenseBehaviors.h | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Minecraft.World/BucketItem.cpp b/Minecraft.World/BucketItem.cpp index 32f658aa..c63c2e36 100644 --- a/Minecraft.World/BucketItem.cpp +++ b/Minecraft.World/BucketItem.cpp @@ -225,6 +225,8 @@ bool BucketItem::emptyBucket(Level *level, int xt, int yt, int zt) { level->addParticle(eParticleType_largesmoke, xt + Math::random(), yt + Math::random(), zt + Math::random(), 0, 0, 0); } + + return true; } else { diff --git a/Minecraft.World/ItemDispenseBehaviors.cpp b/Minecraft.World/ItemDispenseBehaviors.cpp index be6c1e76..7ead0da1 100644 --- a/Minecraft.World/ItemDispenseBehaviors.cpp +++ b/Minecraft.World/ItemDispenseBehaviors.cpp @@ -271,6 +271,11 @@ void BoatDispenseBehavior::playSound(BlockSource *source, eOUTCOME outcome) /* FilledBucket */ +FilledBucketDispenseBehavior::FilledBucketDispenseBehavior() +{ + dispenseBehavior = new DefaultDispenseItemBehavior(); +} + shared_ptr FilledBucketDispenseBehavior::execute(BlockSource *source, shared_ptr dispensed, eOUTCOME &outcome) { BucketItem *bucket = (BucketItem *)dispensed->getItem(); @@ -288,7 +293,7 @@ shared_ptr FilledBucketDispenseBehavior::execute(BlockSource *sour return dispensed; } - return DefaultDispenseItemBehavior::dispense(source, dispensed); + return dispenseBehavior->dispense(source, dispensed); } diff --git a/Minecraft.World/ItemDispenseBehaviors.h b/Minecraft.World/ItemDispenseBehaviors.h index 903ca93e..0570237d 100644 --- a/Minecraft.World/ItemDispenseBehaviors.h +++ b/Minecraft.World/ItemDispenseBehaviors.h @@ -83,7 +83,11 @@ private: class FilledBucketDispenseBehavior : public DefaultDispenseItemBehavior { public: + FilledBucketDispenseBehavior(); + virtual shared_ptr execute(BlockSource *source, shared_ptr dispensed, eOUTCOME &outcome); +private: + DefaultDispenseItemBehavior* dispenseBehavior; }; class EmptyBucketDispenseBehavior : public DefaultDispenseItemBehavior