mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-08-24 23:03:00 +02:00
182 lines
8.3 KiB
Diff
182 lines
8.3 KiB
Diff
From 502fb2bcff02682fffc83a505a9c6b49c6cae03a Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sat, 28 Mar 2020 18:18:03 -0400
|
|
Subject: [PATCH] EMC EAR improvements
|
|
|
|
---
|
|
.../java/net/minecraft/server/Entity.java | 1 +
|
|
.../net/minecraft/server/EntityLiving.java | 2 +-
|
|
.../java/org/spigotmc/ActivationRange.java | 45 +++++++++++--------
|
|
.../java/org/spigotmc/SpigotWorldConfig.java | 2 +
|
|
4 files changed, 31 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 837044d96..cee9fb29c 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -193,6 +193,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
public final org.spigotmc.ActivationRange.ActivationType activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this);
|
|
public final boolean defaultActivationState;
|
|
public long activatedTick = Integer.MIN_VALUE;
|
|
+ public boolean isTemporarilyActive = false; // Paper
|
|
public boolean spawnedViaMobSpawner; // Paper - Yes this name is similar to above, upstream took the better one
|
|
public boolean fromNetherPortal; // Paper
|
|
protected int numCollisions = 0; // Paper
|
|
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
index dd92758a6..fe9d90ce5 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -2400,7 +2400,7 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
}
|
|
|
|
- this.movementTick();
|
|
+ if (!this.isTemporarilyActive || this.world.spigotConfig.moveInactiveEntities) this.movementTick(); // Paper - don't move if only temporarily active
|
|
double d0 = this.locX() - this.lastX;
|
|
double d1 = this.locZ() - this.lastZ;
|
|
float f = (float) (d0 * d0 + d1 * d1);
|
|
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
|
index e160f03c1..381317f16 100644
|
|
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
|
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
|
@@ -200,22 +200,22 @@ public class ActivationRange
|
|
* @param entity
|
|
* @return
|
|
*/
|
|
- public static boolean checkEntityImmunities(Entity entity)
|
|
+ public static int checkEntityImmunities(Entity entity)
|
|
{
|
|
// quick checks.
|
|
if ( entity.inWater || entity.fireTicks > 0 )
|
|
{
|
|
- return true;
|
|
+ return 1;
|
|
}
|
|
if ( !( entity instanceof EntityArrow ) )
|
|
{
|
|
if ( !entity.onGround || !entity.passengers.isEmpty() || entity.isPassenger() )
|
|
{
|
|
- return true;
|
|
+ return 10;
|
|
}
|
|
} else if ( !( (EntityArrow) entity ).inGround )
|
|
{
|
|
- return true;
|
|
+ return 1;
|
|
}
|
|
// special cases.
|
|
if ( entity instanceof EntityLiving )
|
|
@@ -223,20 +223,20 @@ public class ActivationRange
|
|
EntityLiving living = (EntityLiving) entity;
|
|
if ( /*TODO: Missed mapping? living.attackTicks > 0 || */ living.hurtTicks > 0 || living.effects.size() > 0 )
|
|
{
|
|
- return true;
|
|
+ return 1;
|
|
}
|
|
if ( entity instanceof EntityCreature && (( (EntityCreature) entity ).getGoalTarget() != null || ( (EntityCreature) entity ).getMovingTarget() != null)) // Paper
|
|
{
|
|
- return true;
|
|
+ return 20;
|
|
}
|
|
if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).canBreed() )
|
|
{
|
|
- return true;
|
|
+ return 1;
|
|
}
|
|
// Paper start
|
|
if ( entity instanceof EntityLlama && ( (EntityLlama ) entity ).inCaravan() )
|
|
{
|
|
- return true;
|
|
+ return 0;
|
|
}
|
|
// Paper end
|
|
if ( entity instanceof EntityAnimal )
|
|
@@ -244,18 +244,23 @@ public class ActivationRange
|
|
EntityAnimal animal = (EntityAnimal) entity;
|
|
if ( animal.isBaby() || animal.isInLove() )
|
|
{
|
|
- return true;
|
|
+ return 1; // Paper
|
|
}
|
|
if ( entity instanceof EntitySheep && ( (EntitySheep) entity ).isSheared() )
|
|
{
|
|
- return true;
|
|
+ return 1; // Paper
|
|
}
|
|
}
|
|
if (entity instanceof EntityCreeper && ((EntityCreeper) entity).isIgnited()) { // isExplosive
|
|
- return true;
|
|
+ return 20; // Paper
|
|
+ }
|
|
+ // Paper start
|
|
+ if (entity instanceof EntityInsentient && ((EntityInsentient) entity).targetSelector.hasTasks() ) {
|
|
+ return 0;
|
|
}
|
|
+ // Paper end
|
|
}
|
|
- return false;
|
|
+ return -1; // Paper
|
|
}
|
|
|
|
/**
|
|
@@ -272,6 +277,7 @@ public class ActivationRange
|
|
}
|
|
|
|
boolean isActive = entity.activatedTick >= MinecraftServer.currentTick || entity.defaultActivationState;
|
|
+ entity.isTemporarilyActive = !isActive; // Paper
|
|
|
|
// Should this entity tick?
|
|
if ( !isActive )
|
|
@@ -279,11 +285,14 @@ public class ActivationRange
|
|
if ( ( MinecraftServer.currentTick - entity.activatedTick - 1 ) % 20 == 0 )
|
|
{
|
|
// Check immunities every 20 ticks.
|
|
- if ( checkEntityImmunities( entity ) )
|
|
- {
|
|
- // Triggered some sort of immunity, give 20 full ticks before we check again.
|
|
- entity.activatedTick = MinecraftServer.currentTick + 20;
|
|
- }
|
|
+ // Paper start
|
|
+ int immunity = checkEntityImmunities(entity);
|
|
+ if (immunity >= 0) {
|
|
+ entity.activatedTick = MinecraftServer.currentTick + immunity;
|
|
+ } else {
|
|
+ entity.isTemporarilyActive = true;
|
|
+ }
|
|
+ // Paper end
|
|
isActive = true;
|
|
// Paper start
|
|
} else if (entity instanceof EntityInsentient && ((EntityInsentient) entity).targetSelector.hasTasks()) {
|
|
@@ -291,7 +300,7 @@ public class ActivationRange
|
|
}
|
|
// Paper end
|
|
// Add a little performance juice to active entities. Skip 1/4 if not immune.
|
|
- } else if ( !entity.defaultActivationState && entity.ticksLived % 4 == 0 && !(entity instanceof EntityInsentient && ((EntityInsentient) entity).targetSelector.hasTasks()) && !checkEntityImmunities( entity ) ) // Paper - add targetSelector.hasTasks
|
|
+ } else if ( !entity.defaultActivationState && entity.ticksLived % 4 == 0 && checkEntityImmunities( entity) < 0 ) // Paper
|
|
{
|
|
isActive = false;
|
|
}
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 3ceeed3f9..1540afd80 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -181,6 +181,7 @@ public class SpigotWorldConfig
|
|
public int raiderActivationRange = 48;
|
|
public int miscActivationRange = 16;
|
|
public int waterActivationRange = 16; // Paper
|
|
+ public boolean moveInactiveEntities = false; // Paper
|
|
public boolean tickInactiveVillagers = true;
|
|
private void activationRange()
|
|
{
|
|
@@ -189,6 +190,7 @@ public class SpigotWorldConfig
|
|
raiderActivationRange = getInt( "entity-activation-range.raiders", raiderActivationRange );
|
|
miscActivationRange = getInt( "entity-activation-range.misc", miscActivationRange );
|
|
waterActivationRange = getInt( "entity-activation-range.water", waterActivationRange ); // Paper
|
|
+ moveInactiveEntities = getBoolean( "entity-activation-range.move-inactive-entities", moveInactiveEntities ); // Paper
|
|
tickInactiveVillagers = getBoolean( "entity-activation-range.tick-inactive-villagers", tickInactiveVillagers );
|
|
log( "Entity Activation Range: An " + animalActivationRange + " / Mo " + monsterActivationRange + " / Ra " + raiderActivationRange + " / Mi " + miscActivationRange + " / Tiv " + tickInactiveVillagers );
|
|
}
|
|
--
|
|
2.25.1.windows.1
|
|
|