aboutsummaryrefslogtreecommitdiffhomepage
path: root/CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch
diff options
context:
space:
mode:
Diffstat (limited to 'CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch')
-rw-r--r--CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch b/CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch
new file mode 100644
index 0000000000..f525b23e9b
--- /dev/null
+++ b/CraftBukkit-Patches/0021-Entity-Tracking-Ranges.patch
@@ -0,0 +1,109 @@
+From ca2c90c2256eb8db22a504293dbac4e8e5d50e84 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Wed, 20 Feb 2013 11:58:47 -0500
+Subject: [PATCH] Entity Tracking Ranges
+
+This will let you configure how far to track entities in range from players, so that the entity does not render on the client if out of this range.
+This has multiple benefits:
+
+1) Less bandwidth. Not sending update packets for entities that are not even close to a player, or even close enough to clearly see.
+2) Less lag by maps in item frames - Default range is 160 blocks... Many players can track that item frame and cause lag and not even see it.
+3) Less lag in general - Less work for the server to do
+4) Less client lag - Not trying to render distant item frames and paintings and entities will reduce entity count on the client, which is major for shop/town worlds which may use tons of item frames.
+
+diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java
+index 70b0181..c0766d6 100644
+--- a/src/main/java/net/minecraft/server/EntityTracker.java
++++ b/src/main/java/net/minecraft/server/EntityTracker.java
+@@ -92,6 +92,7 @@ public class EntityTracker {
+
+ public void addEntity(Entity entity, int i, int j, boolean flag) {
+ org.spigotmc.AsyncCatcher.catchOp( "entity track"); // Spigot
++ i = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, i); // Spigot
+ if (i > this.e) {
+ i = this.e;
+ }
+diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
+index ed2836a..6421bf2 100644
+--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
++++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
+@@ -149,4 +149,19 @@ public class SpigotWorldConfig
+ miscActivationRange = getInt( "entity-activation-range.misc", miscActivationRange );
+ log( "Entity Activation Range: An " + animalActivationRange + " / Mo " + monsterActivationRange + " / Mi " + miscActivationRange );
+ }
++
++ public int playerTrackingRange = 48;
++ public int animalTrackingRange = 48;
++ public int monsterTrackingRange = 48;
++ public int miscTrackingRange = 32;
++ public int otherTrackingRange = 64;
++ private void trackingRange()
++ {
++ playerTrackingRange = getInt( "entity-tracking-range.players", playerTrackingRange );
++ animalTrackingRange = getInt( "entity-tracking-range.animals", animalTrackingRange );
++ monsterTrackingRange = getInt( "entity-tracking-range.monsters", monsterTrackingRange );
++ miscTrackingRange = getInt( "entity-tracking-range.misc", miscTrackingRange );
++ otherTrackingRange = getInt( "entity-tracking-range.other", otherTrackingRange );
++ log( "Entity Tracking Range: Pl " + playerTrackingRange + " / An " + animalTrackingRange + " / Mo " + monsterTrackingRange + " / Mi " + miscTrackingRange + " / Other " + otherTrackingRange );
++ }
+ }
+diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java
+new file mode 100644
+index 0000000..4bf4d2a
+--- /dev/null
++++ b/src/main/java/org/spigotmc/TrackingRange.java
+@@ -0,0 +1,51 @@
++package org.spigotmc;
++
++import net.minecraft.server.Entity;
++import net.minecraft.server.EntityExperienceOrb;
++import net.minecraft.server.EntityGhast;
++import net.minecraft.server.EntityItem;
++import net.minecraft.server.EntityItemFrame;
++import net.minecraft.server.EntityPainting;
++import net.minecraft.server.EntityPlayer;
++
++public class TrackingRange
++{
++
++ /**
++ * Gets the range an entity should be 'tracked' by players and visible in
++ * the client.
++ *
++ * @param entity
++ * @param defaultRange Default range defined by Mojang
++ * @return
++ */
++ public static int getEntityTrackingRange(Entity entity, int defaultRange)
++ {
++ SpigotWorldConfig config = entity.world.spigotConfig;
++ if ( entity instanceof EntityPlayer )
++ {
++ return config.playerTrackingRange;
++ } else if ( entity.activationType == 1 )
++ {
++ return config.monsterTrackingRange;
++ } else if ( entity instanceof EntityGhast )
++ {
++ if ( config.monsterTrackingRange > config.monsterActivationRange )
++ {
++ return config.monsterTrackingRange;
++ } else
++ {
++ return config.monsterActivationRange;
++ }
++ } else if ( entity.activationType == 2 )
++ {
++ return config.animalTrackingRange;
++ } else if ( entity instanceof EntityItemFrame || entity instanceof EntityPainting || entity instanceof EntityItem || entity instanceof EntityExperienceOrb )
++ {
++ return config.miscTrackingRange;
++ } else
++ {
++ return config.otherTrackingRange;
++ }
++ }
++}
+--
+1.9.1
+