Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
Co-authored-by: MiniDigger | Martin <admin@minidigger.dev>
Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
Co-authored-by: Noah van der Aa <ndvdaa@gmail.com>
Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
Co-authored-by: Tamion <70228790+notTamion@users.noreply.github.com>
Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com>
This commit is contained in:
Nassim Jahnke
2025-04-12 17:26:44 +02:00
parent 0767902699
commit f00727c57e
2092 changed files with 50551 additions and 48729 deletions

View File

@@ -46,7 +46,7 @@
FluidState fluidState = blockState.getFluidState();
if (fluidState.getType().isSame(this) && canPassThroughWall(direction, level, pos, state, blockPos, blockState)) {
if (fluidState.isSource()) {
@@ -252,13 +_,14 @@
@@ -252,13 +_,15 @@
liquidBlockContainer.placeLiquid(level, pos, blockState, fluidState);
} else {
if (!blockState.isAir()) {
@@ -59,6 +59,7 @@
}
+ protected void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state, BlockPos source) { beforeDestroyingBlock(level, pos, state); } // Paper - Add BlockBreakBlockEvent
+
protected abstract void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state);
protected int getSlopeDistance(LevelReader level, BlockPos pos, int depth, Direction direction, BlockState state, FlowingFluid.SpreadContext spreadContext) {
@@ -94,7 +95,7 @@
+ blockState = ((org.bukkit.craftbukkit.block.data.CraftBlockData) event.getNewData()).getState();
+ // CraftBukkit end
level.setBlock(pos, blockState, 3);
} else if (!newLiquid.equals(fluidState)) {
} else if (newLiquid != fluidState) {
fluidState = newLiquid;
blockState = newLiquid.createLegacyBlock();
+ // CraftBukkit start
@@ -107,7 +108,7 @@
level.setBlock(pos, blockState, 3);
level.scheduleTick(pos, newLiquid.getType(), spreadDelay);
}
@@ -476,9 +_,26 @@
@@ -476,9 +_,27 @@
public BlockState getBlockState(BlockPos pos) {
return this.getBlockState(pos, this.getCacheKey(pos));
}
@@ -122,6 +123,7 @@
+ // Paper start - Prevent chunk loading from fluid flowing
+ return getBlockState(pos, cacheKey, true);
+ }
+
+ private @javax.annotation.Nullable BlockState getBlockState(BlockPos pos, short packed, boolean load) {
+ BlockState blockState = this.stateCache.get(packed);
+ if (blockState == null) {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/material/FluidState.java
+++ b/net/minecraft/world/level/material/FluidState.java
@@ -26,9 +_,11 @@
@@ -29,9 +_,11 @@
public static final Codec<FluidState> CODEC = codec(BuiltInRegistries.FLUID.byNameCodec(), Fluid::defaultFluidState).stable();
public static final int AMOUNT_MAX = 9;
public static final int AMOUNT_FULL = 8;
@@ -12,7 +12,7 @@
}
public Fluid getType() {
@@ -44,7 +_,7 @@
@@ -47,7 +_,7 @@
}
public boolean isEmpty() {

View File

@@ -1,35 +1,46 @@
--- a/net/minecraft/world/level/material/LavaFluid.java
+++ b/net/minecraft/world/level/material/LavaFluid.java
@@ -88,6 +_,13 @@
BlockState blockState = level.getBlockState(blockPos);
if (blockState.isAir()) {
if (this.hasFlammableNeighbours(level, blockPos)) {
@@ -92,6 +_,13 @@
BlockState blockState = level.getBlockState(blockPos);
if (blockState.isAir()) {
if (this.hasFlammableNeighbours(level, blockPos)) {
+ // CraftBukkit start - Prevent lava putting something on fire
+ if (!level.getBlockState(blockPos).is(Blocks.FIRE)) {
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, blockPos, pos).isCancelled()) {
+ continue;
+ }
+ }
+ // CraftBukkit end
level.setBlockAndUpdate(blockPos, BaseFireBlock.getState(level, blockPos));
return;
}
@@ -107,6 +_,14 @@
}
if (level.isEmptyBlock(blockPos1.above()) && this.isFlammable(level, blockPos1)) {
+ // CraftBukkit start - Prevent lava putting something on fire
+ if (level.getBlockState(blockPos).getBlock() != Blocks.FIRE) {
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, blockPos, pos).isCancelled()) {
+ BlockPos up = blockPos1.above();
+ if (!level.getBlockState(up).is(Blocks.FIRE)) {
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, up, pos).isCancelled()) {
+ continue;
+ }
+ }
+ // CraftBukkit end
level.setBlockAndUpdate(blockPos, BaseFireBlock.getState(level, blockPos));
return;
+ // CraftBukkit end - Prevent lava putting something on fire
level.setBlockAndUpdate(blockPos1.above(), BaseFireBlock.getState(level, blockPos1));
}
@@ -103,6 +_,14 @@
}
@@ -117,8 +_,9 @@
if (level.isEmptyBlock(blockPos1.above()) && this.isFlammable(level, blockPos1)) {
+ // CraftBukkit start - Prevent lava putting something on fire
+ BlockPos up = blockPos1.above();
+ if (level.getBlockState(up).getBlock() != Blocks.FIRE) {
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, up, pos).isCancelled()) {
+ continue;
+ }
+ }
+ // CraftBukkit end
level.setBlockAndUpdate(blockPos1.above(), BaseFireBlock.getState(level, blockPos1));
}
}
@@ -195,7 +_,11 @@
@Override
protected void entityInside(Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) {
+ BlockPos savedPos = pos.immutable(); // Paper - track lava contact
effectApplier.apply(InsideBlockEffectType.LAVA_IGNITE);
- effectApplier.runAfter(InsideBlockEffectType.LAVA_IGNITE, Entity::lavaHurt);
+ effectApplier.runAfter(InsideBlockEffectType.LAVA_IGNITE, ignitedEntity -> ignitedEntity.lavaHurt(savedPos)); // Paper - track lava contact
}
private boolean hasFlammableNeighbours(LevelReader level, BlockPos pos) {
@@ -206,7 +_,11 @@
FluidState fluidState1 = level.getFluidState(pos);
if (this.is(FluidTags.LAVA) && fluidState1.is(FluidTags.WATER)) {
if (blockState.getBlock() instanceof LiquidBlock) {
@@ -42,7 +53,7 @@
}
this.fizz(level, pos);
@@ -213,7 +_,7 @@
@@ -224,7 +_,7 @@
@Override
protected float getExplosionResistance() {

View File

@@ -1,21 +1,21 @@
--- a/net/minecraft/world/level/material/WaterFluid.java
+++ b/net/minecraft/world/level/material/WaterFluid.java
@@ -74,7 +_,13 @@
protected boolean canConvertToSource(ServerLevel level) {
@@ -78,6 +_,14 @@
return level.getGameRules().getBoolean(GameRules.RULE_WATER_SOURCE_CONVERSION);
}
-
+ // Paper start - Add BlockBreakBlockEvent
+ @Override
+ protected void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state, BlockPos source) {
+ BlockEntity tileentity = state.hasBlockEntity() ? level.getBlockEntity(pos) : null;
+ Block.dropResources(state, level, pos, tileentity, source);
+ BlockEntity blockEntity = state.hasBlockEntity() ? level.getBlockEntity(pos) : null;
+ Block.dropResources(state, level, pos, blockEntity, source);
+ }
+ // Paper end - Add BlockBreakBlockEvent
+
@Override
protected void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state) {
BlockEntity blockEntity = state.hasBlockEntity() ? level.getBlockEntity(pos) : null;
@@ -113,7 +_,7 @@
@@ -121,7 +_,7 @@
@Override
protected float getExplosionResistance() {