mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 06:58:11 +02: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