aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0023-Remove-certain-entities-that-fly-through-unloaded-ch.patch
blob: 75cadd3d32d943286e23867a687bc19d72956999 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
From ac3f20717a8488391789eefd180e54977a436842 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 e345dd7..3e89aa9 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -115,6 +115,7 @@ public abstract class Entity implements ICommandListener {
     public boolean valid; // CraftBukkit
     public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only
     public boolean forceExplosionKnockback; // CraftBukkit - SPIGOT-949
+    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 95c188b..86556cd 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 d2d94d7..ebc4b85 100644
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
@@ -54,6 +54,13 @@ public class EntityTNTPrimed extends Entity {
         }
         // PaperSpigot end
 
+        // 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 4b642ba..46e39f2 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1160,6 +1160,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;
@@ -1583,6 +1584,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 af53220..4596616 100644
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
@@ -180,4 +180,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.7.0