Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-20 21:40:06 +01:00
233814297b
It appears to cause visual glitching issues with certain TNT entities fired from cannons. TileEntity tick capping has already been removed for some time, Entity tick capping removal is new to this patch.
173 Zeilen
8.8 KiB
Diff
173 Zeilen
8.8 KiB
Diff
From a7954c623d317f72957411ec5d1338fa76a94d7f 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 86913f4..385d742 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1641,6 +1641,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
|
|
|