|
| 1 | +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| 2 | +From: MidnightTale < [email protected]> |
| 3 | +Date: Thu, 24 Jul 2025 05:39:48 +0700 |
| 4 | +Subject: [PATCH] Add config for allow disable to spawn boat |
| 5 | + |
| 6 | + |
| 7 | +diff --git a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java |
| 8 | +index 702ca443a746d733ef14e927b7377aa3d31ae61d..b717b74895abd99c7974f92a445fd5d8dbd1debd 100644 |
| 9 | +--- a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java |
| 10 | ++++ b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java |
| 11 | +@@ -30,14 +30,29 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior { |
| 12 | + double d3 = vec3.z() + direction.getStepZ() * d; |
| 13 | + BlockPos blockPos = blockSource.pos().relative(direction); |
| 14 | + double d4; |
| 15 | ++ Vec3 spawnLoc; |
| 16 | + if (serverLevel.getFluidState(blockPos).is(FluidTags.WATER)) { |
| 17 | + d4 = 1.0; |
| 18 | ++ spawnLoc = new Vec3(d1, d2 + d4, d3); |
| 19 | ++ } else if (fun.mntale.atdeprecated.config.AtCoreConfig.DISPENSER_CONFIG.placeBoatOnIce && (direction == Direction.UP || serverLevel.isEmptyBlock(blockPos))) { |
| 20 | ++ BlockPos targetPos = (direction == Direction.UP) ? blockPos.above() : blockPos; |
| 21 | ++ if (isIceType(serverLevel, targetPos.below())) { |
| 22 | ++ spawnLoc = Vec3.atCenterOf(targetPos.below()).add(0, 0.6, 0); |
| 23 | ++ } else if (direction == Direction.UP && isIceType(serverLevel, targetPos)) { |
| 24 | ++ spawnLoc = Vec3.atCenterOf(targetPos).add(0, 1.1, 0); |
| 25 | ++ } else { |
| 26 | ++ if (!serverLevel.getBlockState(blockPos).isAir() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) { |
| 27 | ++ return this.defaultDispenseItemBehavior.dispense(blockSource, item); |
| 28 | ++ } |
| 29 | ++ d4 = 0.0; |
| 30 | ++ spawnLoc = new Vec3(d1, d2 + d4, d3); |
| 31 | ++ } |
| 32 | + } else { |
| 33 | + if (!serverLevel.getBlockState(blockPos).isAir() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) { |
| 34 | + return this.defaultDispenseItemBehavior.dispense(blockSource, item); |
| 35 | + } |
| 36 | +- |
| 37 | + d4 = 0.0; |
| 38 | ++ spawnLoc = new Vec3(d1, d2 + d4, d3); |
| 39 | + } |
| 40 | + |
| 41 | + // CraftBukkit start |
| 42 | +@@ -45,7 +60,7 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior { |
| 43 | + org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(serverLevel, blockSource.pos()); |
| 44 | + org.bukkit.craftbukkit.inventory.CraftItemStack craftItem = org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(singleItemStack); |
| 45 | + |
| 46 | +- org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(d1, d2 + d4, d3)); |
| 47 | ++ org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(spawnLoc.x(), spawnLoc.y(), spawnLoc.z())); |
| 48 | + serverLevel.getCraftServer().getPluginManager().callEvent(event); |
| 49 | + |
| 50 | + if (event.isCancelled()) { |
| 51 | +@@ -75,6 +90,13 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior { |
| 52 | + return item; |
| 53 | + } |
| 54 | + |
| 55 | ++ private static boolean isIceType(ServerLevel level, BlockPos pos) { |
| 56 | ++ var block = level.getBlockState(pos).getBlock(); |
| 57 | ++ return block == net.minecraft.world.level.block.Blocks.ICE || |
| 58 | ++ block == net.minecraft.world.level.block.Blocks.PACKED_ICE || |
| 59 | ++ block == net.minecraft.world.level.block.Blocks.BLUE_ICE; |
| 60 | ++ } |
| 61 | ++ |
| 62 | + @Override |
| 63 | + protected void playSound(BlockSource blockSource) { |
| 64 | + blockSource.level().levelEvent(1000, blockSource.pos(), 0); |
0 commit comments