Update to Minecraft 1.18-pre5

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2021-11-22 09:00:00 +11:00
parent a852b81a69
commit 43702a9e10
700 changed files with 10286 additions and 10098 deletions

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/block/BlockFire.java
+++ b/net/minecraft/world/level/block/BlockFire.java
@@ -28,6 +28,14 @@
@@ -27,6 +27,14 @@
import net.minecraft.world.phys.shapes.VoxelShapeCollision;
import net.minecraft.world.phys.shapes.VoxelShapes;
@@ -15,19 +15,19 @@
public class BlockFire extends BlockFireAbstract {
public static final int MAX_AGE = 15;
@@ -93,7 +101,24 @@
@@ -92,7 +100,24 @@
@Override
public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
- return this.canPlace(iblockdata, generatoraccess, blockposition) ? this.a(generatoraccess, blockposition, (Integer) iblockdata.get(BlockFire.AGE)) : Blocks.AIR.getBlockData();
public IBlockData updateShape(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
- return this.canSurvive(iblockdata, generatoraccess, blockposition) ? this.getStateWithAge(generatoraccess, blockposition, (Integer) iblockdata.getValue(BlockFire.AGE)) : Blocks.AIR.defaultBlockState();
+ // CraftBukkit start
+ if (!this.canPlace(iblockdata, generatoraccess, blockposition)) {
+ if (!this.canSurvive(iblockdata, generatoraccess, blockposition)) {
+ // Suppress during worldgen
+ if (!(generatoraccess instanceof World)) {
+ return Blocks.AIR.getBlockData();
+ return Blocks.AIR.defaultBlockState();
+ }
+ CraftBlockState blockState = CraftBlockStates.getBlockState(generatoraccess, blockposition);
+ blockState.setData(Blocks.AIR.getBlockData());
+ blockState.setData(Blocks.AIR.defaultBlockState());
+
+ BlockFadeEvent event = new BlockFadeEvent(blockState.getBlock(), blockState);
+ ((World) generatoraccess).getCraftServer().getPluginManager().callEvent(event);
@@ -36,94 +36,94 @@
+ return blockState.getHandle();
+ }
+ }
+ return this.a(generatoraccess, blockposition, (Integer) iblockdata.get(BlockFire.AGE));
+ return this.getStateWithAge(generatoraccess, blockposition, (Integer) iblockdata.getValue(BlockFire.AGE));
+ // CraftBukkit end
}
@Override
@@ -142,7 +167,7 @@
worldserver.getBlockTickList().a(blockposition, this, a(worldserver.random));
@@ -141,7 +166,7 @@
worldserver.scheduleTick(blockposition, (Block) this, getFireTickDelay(worldserver.random));
if (worldserver.getGameRules().getBoolean(GameRules.RULE_DOFIRETICK)) {
if (!iblockdata.canPlace(worldserver, blockposition)) {
- worldserver.a(blockposition, false);
if (!iblockdata.canSurvive(worldserver, blockposition)) {
- worldserver.removeBlock(blockposition, false);
+ fireExtinguished(worldserver, blockposition); // CraftBukkit - invalid place location
}
IBlockData iblockdata1 = worldserver.getType(blockposition.down());
@@ -150,7 +175,7 @@
int i = (Integer) iblockdata.get(BlockFire.AGE);
IBlockData iblockdata1 = worldserver.getBlockState(blockposition.below());
@@ -149,7 +174,7 @@
int i = (Integer) iblockdata.getValue(BlockFire.AGE);
if (!flag && worldserver.isRaining() && this.a((World) worldserver, blockposition) && random.nextFloat() < 0.2F + (float) i * 0.03F) {
- worldserver.a(blockposition, false);
if (!flag && worldserver.isRaining() && this.isNearRain(worldserver, blockposition) && random.nextFloat() < 0.2F + (float) i * 0.03F) {
- worldserver.removeBlock(blockposition, false);
+ fireExtinguished(worldserver, blockposition); // CraftBukkit - extinguished by rain
} else {
int j = Math.min(15, i + random.nextInt(3) / 2);
@@ -164,14 +189,14 @@
BlockPosition blockposition1 = blockposition.down();
@@ -163,14 +188,14 @@
BlockPosition blockposition1 = blockposition.below();
if (!worldserver.getType(blockposition1).d(worldserver, blockposition1, EnumDirection.UP) || i > 3) {
- worldserver.a(blockposition, false);
if (!worldserver.getBlockState(blockposition1).isFaceSturdy(worldserver, blockposition1, EnumDirection.UP) || i > 3) {
- worldserver.removeBlock(blockposition, false);
+ fireExtinguished(worldserver, blockposition); // CraftBukkit
}
return;
}
if (i == 15 && random.nextInt(4) == 0 && !this.f(worldserver.getType(blockposition.down()))) {
- worldserver.a(blockposition, false);
if (i == 15 && random.nextInt(4) == 0 && !this.canBurn(worldserver.getBlockState(blockposition.below()))) {
- worldserver.removeBlock(blockposition, false);
+ fireExtinguished(worldserver, blockposition); // CraftBukkit
return;
}
}
@@ -179,12 +204,14 @@
boolean flag1 = worldserver.u(blockposition);
@@ -178,12 +203,14 @@
boolean flag1 = worldserver.isHumidAt(blockposition);
int k = flag1 ? -50 : 0;
- this.trySpread(worldserver, blockposition.east(), 300 + k, random, i);
- this.trySpread(worldserver, blockposition.west(), 300 + k, random, i);
- this.trySpread(worldserver, blockposition.down(), 250 + k, random, i);
- this.trySpread(worldserver, blockposition.up(), 250 + k, random, i);
- this.trySpread(worldserver, blockposition.north(), 300 + k, random, i);
- this.trySpread(worldserver, blockposition.south(), 300 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.east(), 300 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.west(), 300 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.below(), 250 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.above(), 250 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.north(), 300 + k, random, i);
- this.checkBurnOut(worldserver, blockposition.south(), 300 + k, random, i);
+ // CraftBukkit start - add source blockposition to burn calls
+ this.trySpread(worldserver, blockposition.east(), 300 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.west(), 300 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.down(), 250 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.up(), 250 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.below(), 250 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.above(), 250 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.north(), 300 + k, random, i, blockposition);
+ this.trySpread(worldserver, blockposition.south(), 300 + k, random, i, blockposition);
+ // CraftBukkit end
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
for (int l = -1; l <= 1; ++l) {
@@ -210,7 +237,15 @@
if (i2 > 0 && random.nextInt(k1) <= i2 && (!worldserver.isRaining() || !this.a((World) worldserver, (BlockPosition) blockposition_mutableblockposition))) {
@@ -209,7 +236,15 @@
if (i2 > 0 && random.nextInt(k1) <= i2 && (!worldserver.isRaining() || !this.isNearRain(worldserver, blockposition_mutableblockposition))) {
int j2 = Math.min(15, i + random.nextInt(5) / 4);
- worldserver.setTypeAndData(blockposition_mutableblockposition, this.a(worldserver, blockposition_mutableblockposition, j2), 3);
- worldserver.setBlock(blockposition_mutableblockposition, this.getStateWithAge(worldserver, blockposition_mutableblockposition, j2), 3);
+ // CraftBukkit start - Call to stop spread of fire
+ if (worldserver.getType(blockposition_mutableblockposition).getBlock() != Blocks.FIRE) {
+ if (worldserver.getBlockState(blockposition_mutableblockposition).getBlock() != Blocks.FIRE) {
+ if (CraftEventFactory.callBlockIgniteEvent(worldserver, blockposition_mutableblockposition, blockposition).isCancelled()) {
+ continue;
+ }
+
+ CraftEventFactory.handleBlockSpreadEvent(worldserver, blockposition, blockposition_mutableblockposition, this.a(worldserver, blockposition_mutableblockposition, j2), 3); // CraftBukkit
+ CraftEventFactory.handleBlockSpreadEvent(worldserver, blockposition, blockposition_mutableblockposition, this.getStateWithAge(worldserver, blockposition_mutableblockposition, j2), 3); // CraftBukkit
+ }
+ // CraftBukkit end
}
}
}
@@ -234,12 +269,24 @@
return iblockdata.b(BlockProperties.WATERLOGGED) && (Boolean) iblockdata.get(BlockProperties.WATERLOGGED) ? 0 : this.flameOdds.getInt(iblockdata.getBlock());
@@ -233,12 +268,24 @@
return iblockdata.hasProperty(BlockProperties.WATERLOGGED) && (Boolean) iblockdata.getValue(BlockProperties.WATERLOGGED) ? 0 : this.flameOdds.getInt(iblockdata.getBlock());
}
- private void trySpread(World world, BlockPosition blockposition, int i, Random random, int j) {
- private void checkBurnOut(World world, BlockPosition blockposition, int i, Random random, int j) {
+ private void trySpread(World world, BlockPosition blockposition, int i, Random random, int j, BlockPosition sourceposition) { // CraftBukkit add sourceposition
int k = this.getBurnChance(world.getType(blockposition));
int k = this.getBurnOdd(world.getBlockState(blockposition));
if (random.nextInt(i) < k) {
IBlockData iblockdata = world.getType(blockposition);
IBlockData iblockdata = world.getBlockState(blockposition);
+ // CraftBukkit start
+ org.bukkit.block.Block theBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());