Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-15 12:30: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.
121 Zeilen
6.2 KiB
Diff
121 Zeilen
6.2 KiB
Diff
From 7b735d8eaea7f21c2c18525ae2f603b729ac19ad Mon Sep 17 00:00:00 2001
|
|
From: Iceee <andrew@opticgaming.tv>
|
|
Date: Sun, 8 Mar 2015 03:34:15 -0500
|
|
Subject: [PATCH] Remove certain entities that fly through unloaded chunks
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index d6bef0b..1470c21 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -114,6 +114,7 @@ public abstract class Entity implements ICommandListener {
|
|
private final CommandObjectiveExecutor au;
|
|
public boolean valid; // CraftBukkit
|
|
public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only
|
|
+ public boolean inUnloadedChunk = false; // PaperSpigot - Remove entities in unloaded chunks
|
|
|
|
// Spigot start
|
|
public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot
|
|
diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
|
index 48ada4d..f4b5032 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
|
@@ -30,6 +30,12 @@ public class EntityEnderPearl extends EntityProjectile {
|
|
movingobjectposition.entity.damageEntity(DamageSource.projectile(this, entityliving), 0.0F);
|
|
}
|
|
|
|
+ // PaperSpigot start - Remove entities in unloaded chunks
|
|
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedEnderPearls) {
|
|
+ this.die();
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
for (int i = 0; i < 32; ++i) {
|
|
this.world.addParticle(EnumParticle.PORTAL, this.locX, this.locY + this.random.nextDouble() * 2.0D, this.locZ, this.random.nextGaussian(), 0.0D, this.random.nextGaussian(), new int[0]);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
index ef93776..5931e1d 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
@@ -70,6 +70,12 @@ public class EntityFallingBlock extends Entity {
|
|
this.motY -= 0.03999999910593033D;
|
|
this.move(this.motX, this.motY, this.motZ);
|
|
|
|
+ // PaperSpigot start - Remove entities in unloaded chunks
|
|
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedFallingBlocks) {
|
|
+ this.die();
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
// PaperSpigot start - Drop falling blocks above the specified height
|
|
if (this.world.paperSpigotConfig.fallingBlockHeightNerf != 0 && this.locY > this.world.paperSpigotConfig.fallingBlockHeightNerf) {
|
|
if (this.dropItem) {
|
|
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
|
index 2d22327..50423eb 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
|
@@ -47,6 +47,14 @@ public class EntityTNTPrimed extends Entity {
|
|
this.lastZ = this.locZ;
|
|
this.motY -= 0.03999999910593033D;
|
|
this.move(this.motX, this.motY, this.motZ);
|
|
+
|
|
+ // PaperSpigot start - Remove entities in unloaded chunks
|
|
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedTNTEntities) {
|
|
+ this.die();
|
|
+ this.fuseTicks = 2;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
this.motX *= 0.9800000190734863D;
|
|
this.motY *= 0.9800000190734863D;
|
|
this.motZ *= 0.9800000190734863D;
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 67c739e..530e60f 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1156,6 +1156,7 @@ public abstract class World implements IBlockAccess {
|
|
{
|
|
if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
|
|
{
|
|
+ entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
|
|
continue;
|
|
}
|
|
int cz = chunkz << 4;
|
|
@@ -1567,6 +1568,14 @@ public abstract class World implements IBlockAccess {
|
|
if (!org.spigotmc.ActivationRange.checkIfActive(entity)) {
|
|
entity.ticksLived++;
|
|
entity.inactiveTick();
|
|
+ // PaperSpigot start - Remove entities in unloaded chunks
|
|
+ if (!this.isChunkLoaded(i, j, true) && ((entity instanceof EntityEnderPearl && this.paperSpigotConfig.removeUnloadedEnderPearls) ||
|
|
+ (entity instanceof EntityFallingBlock && this.paperSpigotConfig.removeUnloadedFallingBlocks) ||
|
|
+ (entity instanceof EntityTNTPrimed && this.paperSpigotConfig.removeUnloadedTNTEntities))) {
|
|
+ entity.inUnloadedChunk = true;
|
|
+ entity.die();
|
|
+ }
|
|
+ // PaperSpigot end
|
|
} else {
|
|
entity.tickTimer.startTiming(); // Spigot
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
index 31dedce..ac02b90 100644
|
|
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
@@ -170,4 +170,14 @@ public class PaperSpigotWorldConfig
|
|
removeInvalidMobSpawnerTEs = getBoolean( "remove-invalid-mob-spawner-tile-entities", true );
|
|
log( "Remove invalid mob spawner tile entities: " + removeInvalidMobSpawnerTEs );
|
|
}
|
|
+
|
|
+ public boolean removeUnloadedEnderPearls;
|
|
+ public boolean removeUnloadedTNTEntities;
|
|
+ public boolean removeUnloadedFallingBlocks;
|
|
+ private void removeUnloaded()
|
|
+ {
|
|
+ removeUnloadedEnderPearls = getBoolean( "remove-unloaded.enderpearls", true );
|
|
+ removeUnloadedTNTEntities = getBoolean( "remove-unloaded.tnt-entities", true );
|
|
+ removeUnloadedFallingBlocks = getBoolean( "remove-unloaded.falling-blocks", true );
|
|
+ }
|
|
}
|
|
--
|
|
2.4.1.windows.1
|
|
|