Paper/Spigot-Server-Patches/0027-Remove-specific-entities-that-fly-through-an-unloade.patch

121 lines
6.1 KiB
Diff
Raw Normal View History

From 2ac679151195e7aa1b660fde7949474282daee34 Mon Sep 17 00:00:00 2001
From: Iceee <andrew@opticgaming.tv>
2014-11-28 02:17:45 +01:00
Date: Fri, 28 Nov 2014 12:11:03 -0600
Subject: [PATCH] Remove specific entities that fly through an unloaded chunk
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index dfb4299..4848e09 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -112,6 +112,7 @@ public abstract class Entity implements ICommandListener {
2014-11-28 02:17:45 +01:00
private final CommandObjectiveExecutor as;
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
2015-01-07 05:13:40 +01:00
index 6fd43da..3c103c7 100644
--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
2015-01-07 05:13:40 +01:00
@@ -26,6 +26,12 @@ public class EntityEnderPearl extends EntityProjectile {
2014-11-28 02:17:45 +01:00
movingobjectposition.entity.damageEntity(DamageSource.projectile(this, entityliving), 0.0F);
}
+ // PaperSpigot start - Remove entities in unloaded chunks
+ if (inUnloadedChunk && world.paperSpigotConfig.removeUnloadedEnderPearls) {
+ die();
+ }
+ // PaperSpigot end
+
for (int i = 0; i < 32; ++i) {
2014-11-28 02:17:45 +01:00
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
2014-11-28 02:17:45 +01:00
index 81a5dc9..336e575 100644
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
2014-11-28 02:17:45 +01:00
@@ -70,6 +70,12 @@ public class EntityFallingBlock extends Entity {
this.motY -= 0.03999999910593033D;
this.move(this.motX, this.motY, this.motZ);
2014-11-28 02:17:45 +01:00
+ // PaperSpigot start - Remove entities in unloaded chunks
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedFallingBlocks) {
+ this.die();
+ }
+ // PaperSpigot end
2014-11-28 02:17:45 +01:00
+
// PaperSpigot start - Drop falling blocks above the specified height
if (this.world.paperSpigotConfig.fallingBlockHeightNerf != 0 && this.locY > this.world.paperSpigotConfig.fallingBlockHeightNerf) {
2014-11-28 02:17:45 +01:00
if (this.dropItem) {
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
index 3621faf..287039c 100644
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
2014-11-28 02:17:45 +01:00
@@ -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);
2014-11-28 02:17:45 +01:00
+
+ // PaperSpigot start - Remove entities in unloaded chunks
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedTNTEntities) {
+ this.die();
+ this.fuseTicks = 2;
+ }
+ // PaperSpigot end
2014-11-28 02:17:45 +01:00
+
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 7730e2c..1933f5f 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
2015-02-22 07:43:08 +01:00
@@ -1158,6 +1158,7 @@ public abstract class World implements IBlockAccess {
{
2014-11-28 02:17:45 +01:00
if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
{
+ entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
continue;
}
int cz = chunkz << 4;
@@ -1590,6 +1591,14 @@ public abstract class World implements IBlockAccess {
if (!org.spigotmc.ActivationRange.checkIfActive(entity)) {
entity.ticksLived++;
entity.inactiveTick();
+ // PaperSpigot start - Remove entities in unloaded chunks
2014-11-28 02:17:45 +01:00
+ if (entity instanceof EntityEnderPearl || (!this.isChunkLoaded(i, j, true) &&
+ (entity instanceof EntityFallingBlock && this.paperSpigotConfig.removeUnloadedFallingBlocks) ||
+ (entity instanceof EntityTNTPrimed && this.paperSpigotConfig.removeUnloadedTNTEntities))) {
2014-11-28 02:17:45 +01:00
+ 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 59a9387..cffb145 100644
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
@@ -169,4 +169,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()
+ {
2014-10-25 05:28:29 +02:00
+ removeUnloadedEnderPearls = getBoolean( "remove-unloaded.enderpearls", true );
+ removeUnloadedTNTEntities = getBoolean( "remove-unloaded.tnt-entities", true );
+ removeUnloadedFallingBlocks = getBoolean( "remove-unloaded.falling-blocks", true );
+ }
}
--
1.9.5.msysgit.0