mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 15:08:27 +02:00
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 3284612a SPIGOT-5853: Add DragonBattle#generateEndPortal() e4db04ae SPIGOT-5841: New map colours broken CraftBukkit Changes:d4243510
SPIGOT-5853: DragonBattle#getEndPortalLocation() throws NPE on new world1601ec31
SPIGOT-5845: ChatColor.RESET does not work in ItemMeta to reset italics4d92db6f
CraftChatMessageTest does not need AbstractTestingBase71045d3d
SPIGOT-5828: Unlock worlds on unloaddbc347b9
SPIGOT-5841: New map colours broken14053c70
SPIGOT-5847: BlockFadeEvent cannot be triggered asynchronously from another thread Spigot Changes: 6f4ff1b6 SPIGOT-5851: ChatColor (HEX) doesn't appear correctly in the ActionBar d94a518a SPIGOT-5848: PlayerSpawnLocationEvent throws NPE when setting a location of another world
81 lines
4.0 KiB
Diff
81 lines
4.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sun, 17 Apr 2016 17:27:09 -0400
|
|
Subject: [PATCH] Prevent Fire from loading chunks
|
|
|
|
This causes the nether to spam unload/reload chunks, plus overall
|
|
bad behavior.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockFire.java b/src/main/java/net/minecraft/server/BlockFire.java
|
|
index 9f139dd2dbf9706cb018ee26c1315dc29067d68e..9c3b79c1314dedae06278328b6ca722d5ff1e60d 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockFire.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockFire.java
|
|
@@ -99,7 +99,7 @@ public class BlockFire extends BlockFireAbstract {
|
|
BlockStateBoolean blockstateboolean = (BlockStateBoolean) BlockFire.p.get(enumdirection);
|
|
|
|
if (blockstateboolean != null) {
|
|
- iblockdata1 = (IBlockData) iblockdata1.set(blockstateboolean, this.e(iblockaccess.getType(blockposition.shift(enumdirection))));
|
|
+ iblockdata1 = (IBlockData) iblockdata1.set(blockstateboolean, this.e(iblockaccess.getTypeIfLoaded(blockposition.shift(enumdirection)))); // Paper - prevent chunk loads
|
|
}
|
|
}
|
|
|
|
@@ -179,6 +179,7 @@ public class BlockFire extends BlockFireAbstract {
|
|
}
|
|
|
|
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition, l, j1, i1);
|
|
+ if (!worldserver.isLoaded(blockposition_mutableblockposition)) continue; // Paper
|
|
int l1 = this.a((IWorldReader) worldserver, (BlockPosition) blockposition_mutableblockposition);
|
|
|
|
if (l1 > 0) {
|
|
@@ -224,10 +225,16 @@ public class BlockFire extends BlockFireAbstract {
|
|
}
|
|
|
|
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));
|
|
+ // Paper start
|
|
+ final IBlockData iblockdata = world.getTypeIfLoaded(blockposition);
|
|
+ if (iblockdata == null) {
|
|
+ return;
|
|
+ }
|
|
+ int k = this.getBurnChance(iblockdata);
|
|
+ // Paper end
|
|
|
|
if (random.nextInt(i) < k) {
|
|
- IBlockData iblockdata = world.getType(blockposition);
|
|
+ //IBlockData iblockdata = world.getType(blockposition); // Paper
|
|
|
|
// CraftBukkit start
|
|
org.bukkit.block.Block theBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
|
@@ -273,7 +280,7 @@ public class BlockFire extends BlockFireAbstract {
|
|
for (int j = 0; j < i; ++j) {
|
|
EnumDirection enumdirection = aenumdirection[j];
|
|
|
|
- if (this.e(iblockaccess.getType(blockposition.shift(enumdirection)))) {
|
|
+ if (this.e(iblockaccess.getTypeIfLoaded(blockposition.shift(enumdirection)))) { // Paper - prevent chunk loads
|
|
return true;
|
|
}
|
|
}
|
|
@@ -291,7 +298,12 @@ public class BlockFire extends BlockFireAbstract {
|
|
|
|
for (int k = 0; k < j; ++k) {
|
|
EnumDirection enumdirection = aenumdirection[k];
|
|
- IBlockData iblockdata = iworldreader.getType(blockposition.shift(enumdirection));
|
|
+ // Paper start
|
|
+ IBlockData iblockdata = iworldreader.getTypeIfLoaded(blockposition.shift(enumdirection));
|
|
+ if (iblockdata == null) {
|
|
+ continue;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
i = Math.max(this.getFlameChance(iblockdata), i);
|
|
}
|
|
@@ -302,7 +314,7 @@ public class BlockFire extends BlockFireAbstract {
|
|
|
|
@Override
|
|
protected boolean e(IBlockData iblockdata) {
|
|
- return this.getFlameChance(iblockdata) > 0;
|
|
+ return iblockdata != null && this.getFlameChance(iblockdata) > 0; // Paper - iblockdata can be nullable if chunk is unloaded now
|
|
}
|
|
|
|
@Override
|