mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
Bring chunkloading TNT/FallingBlocks/EnderPearls to 1.8
Forward ported from PaperSpigot 1.7.10
This commit is contained in:
parent
a193a0a898
commit
32f10ee552
@ -0,0 +1,172 @@
|
|||||||
|
From c033a7f01ec301e2bd423355eabbd1c3468b2100 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
||||||
|
Date: Thu, 28 May 2015 22:01:25 -0500
|
||||||
|
Subject: [PATCH] Force load chunks for specific entities that fly through
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||||
|
index f4b5032..a7190fa 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||||
|
@@ -86,8 +86,20 @@ public class EntityEnderPearl extends EntityProjectile {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void t_() {
|
||||||
|
- EntityLiving entityliving = this.getShooter();
|
||||||
|
+ // PaperSpigot start - Force load chunks for specific entities that fly through
|
||||||
|
+ if (world.paperSpigotConfig.loadUnloadedEnderPearls) {
|
||||||
|
+ ChunkProviderServer chunkProvider = (ChunkProviderServer) world.chunkProvider;
|
||||||
|
+ boolean before = chunkProvider.forceChunkLoad;
|
||||||
|
+ chunkProvider.forceChunkLoad = true;
|
||||||
|
+ for (int cx = (int) locX >> 4; cx <= (int) (locX + motX) >> 4; ++cx) {
|
||||||
|
+ for (int cz = (int) locZ >> 4; cz <= (int) (locZ + motZ) >> 4; ++cz) {
|
||||||
|
+ world.getChunkAt(cx, cz);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ chunkProvider.forceChunkLoad = before;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ EntityLiving entityliving = this.getShooter();
|
||||||
|
if (entityliving != null && entityliving instanceof EntityHuman && !entityliving.isAlive()) {
|
||||||
|
this.die();
|
||||||
|
} else {
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
index 44219cd..a0452ac 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
@@ -60,6 +60,21 @@ public class EntityFallingBlock extends Entity {
|
||||||
|
if (block.getMaterial() == Material.AIR) {
|
||||||
|
this.die();
|
||||||
|
} else {
|
||||||
|
+ // PaperSpigot start - Force load chunks for specific entities that fly through
|
||||||
|
+ if (world.paperSpigotConfig.loadUnloadedFallingBlocks) {
|
||||||
|
+ ChunkProviderServer chunkProvider = (ChunkProviderServer) world.chunkProvider;
|
||||||
|
+ boolean before = chunkProvider.forceChunkLoad;
|
||||||
|
+ chunkProvider.forceChunkLoad = true;
|
||||||
|
+
|
||||||
|
+ for (int cx = (int) locX >> 4; cx <= (int) (locX + motX) >> 4; ++cx) {
|
||||||
|
+ for (int cz = (int) locZ >> 4; cz <= (int) (locZ + motZ) >> 4; ++cz) {
|
||||||
|
+ world.getChunkAt(cx, cz);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ chunkProvider.forceChunkLoad = before;
|
||||||
|
+ }
|
||||||
|
+ // PaperSpigot end
|
||||||
|
this.lastX = this.locX;
|
||||||
|
this.lastY = this.locY;
|
||||||
|
this.lastZ = this.locZ;
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||||
|
index dd1ad68..c272060 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||||
|
@@ -56,6 +56,21 @@ public class EntityTNTPrimed extends Entity {
|
||||||
|
|
||||||
|
public void t_() {
|
||||||
|
if (world.spigotConfig.currentPrimedTnt++ > world.spigotConfig.maxTntTicksPerTick) { return; } // Spigot
|
||||||
|
+ // PaperSpigot start - Force load chunks for specific entities that fly through
|
||||||
|
+ if (world.paperSpigotConfig.loadUnloadedTNTEntities) {
|
||||||
|
+ ChunkProviderServer chunkProvider = (ChunkProviderServer) world.chunkProvider;
|
||||||
|
+ boolean before = chunkProvider.forceChunkLoad;
|
||||||
|
+ chunkProvider.forceChunkLoad = true;
|
||||||
|
+
|
||||||
|
+ for (int cx = (int) locX >> 4; cx <= (int) (locX + motX) >> 4; ++cx) {
|
||||||
|
+ for (int cz = (int) locZ >> 4; cz <= (int) (locZ + motZ) >> 4; ++cz) {
|
||||||
|
+ world.getChunkAt(cx, cz);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ chunkProvider.forceChunkLoad = before;
|
||||||
|
+ }
|
||||||
|
+ // PaperSpigot end
|
||||||
|
this.lastX = this.locX;
|
||||||
|
this.lastY = this.locY;
|
||||||
|
this.lastZ = this.locZ;
|
||||||
|
@@ -116,7 +131,18 @@ public class EntityTNTPrimed extends Entity {
|
||||||
|
locY += this.length / 2.0F;
|
||||||
|
}
|
||||||
|
|
||||||
|
- this.world.createExplosion(this, this.locX, locY, this.locZ, event.getRadius(), event.getFire(), true);
|
||||||
|
+ // PaperSpigot start - Force load chunks for specific entities that fly through
|
||||||
|
+ if (world.paperSpigotConfig.loadUnloadedTNTEntities) {
|
||||||
|
+ ChunkProviderServer chunkProvider = (ChunkProviderServer) world.chunkProvider;
|
||||||
|
+ boolean before = chunkProvider.forceChunkLoad;
|
||||||
|
+ chunkProvider.forceChunkLoad = true;
|
||||||
|
+
|
||||||
|
+ this.world.createExplosion(this, this.locX, locY, this.locZ, event.getRadius(), event.getFire(), true);
|
||||||
|
+
|
||||||
|
+ chunkProvider.forceChunkLoad = before;
|
||||||
|
+ } else {
|
||||||
|
+ this.world.createExplosion(this, this.locX, locY, this.locZ, event.getRadius(), event.getFire(), true);
|
||||||
|
+ }
|
||||||
|
// PaperSpigot end
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||||
|
index a0a3297..1a8440e 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/World.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/World.java
|
||||||
|
@@ -1665,6 +1665,17 @@ public abstract class World implements IBlockAccess {
|
||||||
|
if (this.isChunkLoaded(k, i1, true)) {
|
||||||
|
entity.ad = true;
|
||||||
|
this.getChunkAt(k, i1).a(entity);
|
||||||
|
+ // PaperSpigot start - Force load chunks for specific entities that fly through
|
||||||
|
+ } else if ((entity instanceof EntityEnderPearl && entity.world.paperSpigotConfig.loadUnloadedEnderPearls) ||
|
||||||
|
+ (entity instanceof EntityTNTPrimed && entity.world.paperSpigotConfig.loadUnloadedTNTEntities) ||
|
||||||
|
+ (entity instanceof EntityFallingBlock && entity.world.paperSpigotConfig.loadUnloadedFallingBlocks)) {
|
||||||
|
+ ChunkProviderServer chunkProvider = (ChunkProviderServer) this.chunkProvider;
|
||||||
|
+ boolean before = chunkProvider.forceChunkLoad;
|
||||||
|
+ chunkProvider.forceChunkLoad = true;
|
||||||
|
+ entity.ad = true;
|
||||||
|
+ this.getChunkAt(k, i1).a(entity);
|
||||||
|
+ chunkProvider.forceChunkLoad = before;
|
||||||
|
+ // PaperSpigot end
|
||||||
|
} else {
|
||||||
|
entity.ad = false;
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||||
|
index 6a690ee..557561c 100644
|
||||||
|
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||||
|
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||||
|
@@ -254,4 +254,14 @@ public class PaperSpigotWorldConfig
|
||||||
|
{
|
||||||
|
disableEndCredits = getBoolean( "game-mechanics.disable-end-credits", false );
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ public boolean loadUnloadedEnderPearls;
|
||||||
|
+ public boolean loadUnloadedTNTEntities;
|
||||||
|
+ public boolean loadUnloadedFallingBlocks;
|
||||||
|
+ private void loadUnloaded()
|
||||||
|
+ {
|
||||||
|
+ loadUnloadedEnderPearls = getBoolean( "load-chunks.enderpearls", false );
|
||||||
|
+ loadUnloadedTNTEntities = getBoolean( "load-chunks.tnt-entities", false );
|
||||||
|
+ loadUnloadedFallingBlocks = getBoolean( "load-chunks.falling-blocks", false );
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||||
|
index 7ca1b24..dcab40c 100644
|
||||||
|
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||||
|
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||||
|
@@ -13,6 +13,7 @@ import net.minecraft.server.EntityComplexPart;
|
||||||
|
import net.minecraft.server.EntityCreature;
|
||||||
|
import net.minecraft.server.EntityEnderCrystal;
|
||||||
|
import net.minecraft.server.EntityEnderDragon;
|
||||||
|
+import net.minecraft.server.EntityEnderPearl; // PaperSpigot
|
||||||
|
import net.minecraft.server.EntityFallingBlock;
|
||||||
|
import net.minecraft.server.EntityFireball;
|
||||||
|
import net.minecraft.server.EntityFireworks;
|
||||||
|
@@ -247,7 +248,10 @@ public class ActivationRange
|
||||||
|
{
|
||||||
|
SpigotTimings.checkIfActiveTimer.startTiming();
|
||||||
|
// Never safe to skip fireworks or entities not yet added to chunk
|
||||||
|
- if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks ) {
|
||||||
|
+ // PaperSpigot - Changes for loading chunks for entities that fly through them
|
||||||
|
+ if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks || entity instanceof EntityFallingBlock ||
|
||||||
|
+ ( entity instanceof EntityEnderPearl && entity.world.paperSpigotConfig.loadUnloadedEnderPearls ) ||
|
||||||
|
+ ( entity instanceof EntityTNTPrimed && entity.world.paperSpigotConfig.loadUnloadedTNTEntities ) ) {
|
||||||
|
SpigotTimings.checkIfActiveTimer.stopTiming();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.4.1.windows.1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user