Skip to content

Commit 5b90d17

Browse files
committed
Rewrite add configurable allow dispenser to spawn boat on ice
1 parent 47828dc commit 5b90d17

File tree

1 file changed

+54
-17
lines changed

1 file changed

+54
-17
lines changed

atdeprecated-server/minecraft-patches/features/0004-Add-config-for-allow-disable-to-spawn-boat.patch

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
22
From: MidnightTale <[email protected]>
3-
Date: Thu, 24 Jul 2025 05:39:48 +0700
3+
Date: Thu, 24 Jul 2025 06:59:05 +0700
44
Subject: [PATCH] Add config for allow disable to spawn boat
55

66

77
diff --git a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java
8-
index 702ca443a746d733ef14e927b7377aa3d31ae61d..b717b74895abd99c7974f92a445fd5d8dbd1debd 100644
8+
index 702ca443a746d733ef14e927b7377aa3d31ae61d..3413c31197f6ffac399a846385d23a00a614c22a 100644
99
--- a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java
1010
+++ b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java
11-
@@ -30,14 +30,29 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
11+
@@ -30,22 +30,36 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
1212
double d3 = vec3.z() + direction.getStepZ() * d;
1313
BlockPos blockPos = blockSource.pos().relative(direction);
1414
double d4;
15-
+ Vec3 spawnLoc;
15+
+ Vec3 spawnLoc = null;
16+
+
17+
+ // atDeprecated start - Add boat placement on ice
1618
if (serverLevel.getFluidState(blockPos).is(FluidTags.WATER)) {
1719
d4 = 1.0;
1820
+ 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)) {
21+
+ } else if (fun.mntale.atdeprecated.config.AtCoreConfig.DISPENSER_CONFIG.placeBoatOnIce) {
22+
+ spawnLoc = this.tryPlaceBoatOnIce(serverLevel, direction, blockPos);
23+
+ if (spawnLoc == null) {
24+
+ if (!serverLevel.getBlockState(blockPos).canBeReplaced() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) { // atDeprecated - Allow non-solid blocks
2725
+ return this.defaultDispenseItemBehavior.dispense(blockSource, item);
2826
+ }
2927
+ d4 = 0.0;
3028
+ spawnLoc = new Vec3(d1, d2 + d4, d3);
3129
+ }
3230
} else {
33-
if (!serverLevel.getBlockState(blockPos).isAir() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) {
31+
- if (!serverLevel.getBlockState(blockPos).isAir() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) {
32+
+ if (!serverLevel.getBlockState(blockPos).canBeReplaced() || !serverLevel.getFluidState(blockPos.below()).is(FluidTags.WATER)) { // atDeprecated - Allow non-solid blocks
3433
return this.defaultDispenseItemBehavior.dispense(blockSource, item);
3534
}
3635
-
3736
d4 = 0.0;
3837
+ spawnLoc = new Vec3(d1, d2 + d4, d3);
3938
}
39+
+ // atDeprecated end
4040

4141
// CraftBukkit start
42-
@@ -45,7 +60,7 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
42+
ItemStack singleItemStack = item.copyWithCount(1);
4343
org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(serverLevel, blockSource.pos());
4444
org.bukkit.craftbukkit.inventory.CraftItemStack craftItem = org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(singleItemStack);
4545

@@ -48,16 +48,53 @@ index 702ca443a746d733ef14e927b7377aa3d31ae61d..b717b74895abd99c7974f92a445fd5d8
4848
serverLevel.getCraftServer().getPluginManager().callEvent(event);
4949

5050
if (event.isCancelled()) {
51-
@@ -75,6 +90,13 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
51+
@@ -75,6 +89,50 @@ public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
5252
return item;
5353
}
5454

55+
+ // atDeprecated start - Add boat placement on ice
56+
+ private Vec3 tryPlaceBoatOnIce(ServerLevel serverLevel, Direction direction, BlockPos blockPos) {
57+
+ BlockPos current = blockPos;
58+
+ if (direction == Direction.UP) {
59+
+ int airCount = 0;
60+
+ int maxAir = 2;
61+
+ for (int i = 0; i < 4; i++) {
62+
+ if (airCount < maxAir && serverLevel.getBlockState(current).canBeReplaced()) { // atDeprecated - Allow non-solid blocks
63+
+ airCount++;
64+
+ current = current.above();
65+
+ continue;
66+
+ }
67+
+ if (isIceType(serverLevel, current)) {
68+
+ BlockPos aboveIce = current.above();
69+
+ if (serverLevel.getBlockState(aboveIce).canBeReplaced()) { // atDeprecated - Allow non-solid blocks
70+
+ return Vec3.atCenterOf(current).add(0, 1.1, 0);
71+
+ }
72+
+ }
73+
+ break;
74+
+ }
75+
+ } else {
76+
+ for (int i = 0; i < 2; i++) {
77+
+ if (serverLevel.getBlockState(current).canBeReplaced()) { // atDeprecated - Allow non-solid blocks
78+
+ BlockPos below = current.below();
79+
+ if (isIceType(serverLevel, below)) {
80+
+ return Vec3.atCenterOf(below).add(0, 0.6, 0);
81+
+ }
82+
+ current = current.relative(direction);
83+
+ } else {
84+
+ break;
85+
+ }
86+
+ }
87+
+ }
88+
+ return null;
89+
+ }
90+
+
5591
+ private static boolean isIceType(ServerLevel level, BlockPos pos) {
5692
+ var block = level.getBlockState(pos).getBlock();
5793
+ 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;
94+
+ block == net.minecraft.world.level.block.Blocks.PACKED_ICE ||
95+
+ block == net.minecraft.world.level.block.Blocks.BLUE_ICE;
6096
+ }
97+
+ // atDeprecated end
6198
+
6299
@Override
63100
protected void playSound(BlockSource blockSource) {

0 commit comments

Comments
 (0)