Skip to content

Commit 47828dc

Browse files
committed
Add configurable elytra boost break leash check, Add configurable allow dispenser to spawn boat on ice
1 parent c2e8786 commit 47828dc

File tree

5 files changed

+88
-122
lines changed

5 files changed

+88
-122
lines changed

atdeprecated-server/minecraft-patches/features/0003-Add-config-for-disable-check-elytra-boost-break-leash.patch renamed to atdeprecated-server/minecraft-patches/features/0003-Add-config-for-disable-check-elytra-boost-break-leas.patch

File renamed without changes.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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);

atdeprecated-server/minecraft-patches/removes/0003-Dispenser-place-boat-on-ice-packed-ice-blue-ice.patch

Lines changed: 0 additions & 122 deletions
This file was deleted.

atdeprecated-server/src/main/java/fun/mntale/atdeprecated/config/AtCoreConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fun.mntale.atdeprecated.config;
22

33
import fun.mntale.atdeprecated.config.modules.features.BeaconConfig;
4+
import fun.mntale.atdeprecated.config.modules.features.DispenserConfig;
45
import fun.mntale.atdeprecated.config.modules.features.ElytraConfig;
56
import fun.mntale.atdeprecated.config.modules.removed.RemovedConfig;
67
import java.io.File;
@@ -9,6 +10,7 @@ public class AtCoreConfig {
910
private static final ConfigManager configManager = new ConfigManager(new File("atdeprecated/atdeprecated-global.toml"));
1011

1112
public static final BeaconConfig BEACON_CONFIG = new BeaconConfig();
13+
public static final DispenserConfig DISPENSER_CONFIG = new DispenserConfig();
1214
public static final ElytraConfig ELYTRA_CONFIG = new ElytraConfig();
1315
public static final RemovedConfig REMOVED_CONFIG = new RemovedConfig();
1416

@@ -23,6 +25,7 @@ public static void load() {
2325

2426
private static void registerModules() {
2527
configManager.registerModule(BEACON_CONFIG);
28+
configManager.registerModule(DISPENSER_CONFIG);
2629
configManager.registerModule(ELYTRA_CONFIG);
2730
configManager.registerModule(REMOVED_CONFIG);
2831
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package fun.mntale.atdeprecated.config.modules.features;
2+
3+
import fun.mntale.atdeprecated.config.EnumConfigCategory;
4+
import fun.mntale.atdeprecated.config.IConfigModule;
5+
import fun.mntale.atdeprecated.config.annotations.ConfigInfo;
6+
7+
public class DispenserConfig implements IConfigModule {
8+
9+
@ConfigInfo(name = "place-boat-on-ice", comments = "Allow dispenser to place boats on ice")
10+
public boolean placeBoatOnIce = true;
11+
12+
@Override
13+
public EnumConfigCategory getCategory() {
14+
return EnumConfigCategory.FEATURES;
15+
}
16+
17+
@Override
18+
public String getBaseName() {
19+
return "dispenser";
20+
}
21+
}

0 commit comments

Comments
 (0)