mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 08:57:44 +01:00
Add cache for slime max health (resolves #234)
This commit is contained in:
@@ -1078,7 +1078,7 @@ index cb52c4e63ac487d55dc16accca6976f44f904112..62f1808a456f46a6c7fbb5e030d9ed65
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
||||
index 0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30..b80b426acd8aec61c5e970ca039c8c47bc97f9e4 100644
|
||||
index 0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30..ce0d52a501dbff7c4eb70270bafa3e2a77599107 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
||||
@@ -51,6 +51,7 @@ import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent;
|
||||
@@ -1097,7 +1097,7 @@ index 0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30..b80b426acd8aec61c5e970ca039c8c47
|
||||
public float b;
|
||||
public float c;
|
||||
public float d;
|
||||
@@ -104,6 +106,25 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
||||
@@ -104,6 +106,30 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
||||
}
|
||||
return true; // do not jump() in wasd controller, let vanilla controller handle
|
||||
}
|
||||
@@ -1113,17 +1113,22 @@ index 0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30..b80b426acd8aec61c5e970ca039c8c47
|
||||
+
|
||||
+ public double generateMaxHealth() {
|
||||
+ int size = getSize();
|
||||
+ try {
|
||||
+ scriptEngine.eval("size = " + size);
|
||||
+ return (double) scriptEngine.eval(getMaxHealthEquation());
|
||||
+ } catch (Exception e) {
|
||||
+ return size * size;
|
||||
+ Double maxHealth = world.purpurConfig.slimeMaxHealthCache.get(size);
|
||||
+ if (maxHealth == null) {
|
||||
+ try {
|
||||
+ scriptEngine.eval("size = " + size);
|
||||
+ maxHealth = (double) scriptEngine.eval(getMaxHealthEquation());
|
||||
+ } catch (Exception e) {
|
||||
+ maxHealth = (double) size * size;
|
||||
+ }
|
||||
+ world.purpurConfig.slimeMaxHealthCache.put(size, maxHealth);
|
||||
+ }
|
||||
+ return maxHealth;
|
||||
+ }
|
||||
// Purpur end
|
||||
|
||||
@Override
|
||||
@@ -130,7 +151,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
||||
@@ -130,7 +156,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
||||
this.datawatcher.set(EntitySlime.bo, i);
|
||||
this.af();
|
||||
this.updateSize();
|
||||
@@ -1402,7 +1407,7 @@ index 90cbef7fe8803295f82bddd6709fdf303aedcaba..b84916c0c58fd208ef5547299f8db846
|
||||
|
||||
@Nullable
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d4507787f 100644
|
||||
index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..c423bc6a535a61dc7deed0b2c5f94eb1633aa1a3 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -496,30 +496,58 @@ public class PurpurWorldConfig {
|
||||
@@ -2145,7 +2150,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean rabbitRidable = false;
|
||||
@@ -936,68 +1292,142 @@ public class PurpurWorldConfig {
|
||||
@@ -936,68 +1292,144 @@ public class PurpurWorldConfig {
|
||||
public double rabbitNaturalToast = 0.0D;
|
||||
public double rabbitNaturalKiller = 0.0D;
|
||||
public int rabbitBreedingTicks = 6000;
|
||||
@@ -2276,6 +2281,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
public boolean slimeRidable = false;
|
||||
public boolean slimeRidableInWater = false;
|
||||
+ public String slimeMaxHealth = "size * size";
|
||||
+ public Map<Integer, Double> slimeMaxHealthCache = new HashMap<>();
|
||||
private void slimeSettings() {
|
||||
slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable);
|
||||
slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater);
|
||||
@@ -2285,10 +2291,11 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
+ set("mobs.slime.attributes.max_health", oldValue);
|
||||
+ }
|
||||
+ slimeMaxHealth = getString("mobs.slime.attributes.max_health", slimeMaxHealth);
|
||||
+ slimeMaxHealthCache.clear();
|
||||
}
|
||||
|
||||
public boolean snowGolemRidable = false;
|
||||
@@ -1009,6 +1439,7 @@ public class PurpurWorldConfig {
|
||||
@@ -1009,6 +1441,7 @@ public class PurpurWorldConfig {
|
||||
public int snowGolemSnowBallMax = 20;
|
||||
public float snowGolemSnowBallModifier = 10.0F;
|
||||
public double snowGolemAttackDistance = 1.25D;
|
||||
@@ -2296,7 +2303,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
private void snowGolemSettings() {
|
||||
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
|
||||
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
|
||||
@@ -1019,63 +1450,118 @@ public class PurpurWorldConfig {
|
||||
@@ -1019,63 +1452,118 @@ public class PurpurWorldConfig {
|
||||
snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax);
|
||||
snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier);
|
||||
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
|
||||
@@ -2415,7 +2422,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean villagerRidable = false;
|
||||
@@ -1093,6 +1579,7 @@ public class PurpurWorldConfig {
|
||||
@@ -1093,6 +1581,7 @@ public class PurpurWorldConfig {
|
||||
public int villagerLobotomizeCheck = 60;
|
||||
public boolean villagerClericsFarmWarts = false;
|
||||
public boolean villagerClericFarmersThrowWarts = true;
|
||||
@@ -2423,7 +2430,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
private void villagerSettings() {
|
||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
||||
@@ -1114,33 +1601,60 @@ public class PurpurWorldConfig {
|
||||
@@ -1114,33 +1603,60 @@ public class PurpurWorldConfig {
|
||||
villagerLobotomizeCheck = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheck);
|
||||
villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts);
|
||||
villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts);
|
||||
@@ -2484,7 +2491,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean witherRidable = false;
|
||||
@@ -1157,19 +1671,30 @@ public class PurpurWorldConfig {
|
||||
@@ -1157,19 +1673,30 @@ public class PurpurWorldConfig {
|
||||
witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay);
|
||||
if (PurpurConfig.version < 8) {
|
||||
double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth);
|
||||
@@ -2517,7 +2524,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean wolfRidable = false;
|
||||
@@ -1178,6 +1703,7 @@ public class PurpurWorldConfig {
|
||||
@@ -1178,6 +1705,7 @@ public class PurpurWorldConfig {
|
||||
public boolean wolfMilkCuresRabies = true;
|
||||
public double wolfNaturalRabid = 0.0D;
|
||||
public int wolfBreedingTicks = 6000;
|
||||
@@ -2525,7 +2532,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
private void wolfSettings() {
|
||||
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
|
||||
wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
|
||||
@@ -1189,13 +1715,26 @@ public class PurpurWorldConfig {
|
||||
@@ -1189,13 +1717,26 @@ public class PurpurWorldConfig {
|
||||
wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies);
|
||||
wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid);
|
||||
wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks);
|
||||
@@ -2552,7 +2559,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean zombieRidable = false;
|
||||
@@ -1205,6 +1744,8 @@ public class PurpurWorldConfig {
|
||||
@@ -1205,6 +1746,8 @@ public class PurpurWorldConfig {
|
||||
public boolean zombieJockeyTryExistingChickens = true;
|
||||
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
||||
public EnumDifficulty zombieBreakDoorMinDifficulty = EnumDifficulty.HARD;
|
||||
@@ -2561,7 +2568,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
private void zombieSettings() {
|
||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
||||
@@ -1217,15 +1758,40 @@ public class PurpurWorldConfig {
|
||||
@@ -1217,15 +1760,40 @@ public class PurpurWorldConfig {
|
||||
} catch (IllegalArgumentException ignore) {
|
||||
zombieBreakDoorMinDifficulty = EnumDifficulty.HARD;
|
||||
}
|
||||
@@ -2602,7 +2609,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean zombifiedPiglinRidable = false;
|
||||
@@ -1234,6 +1800,8 @@ public class PurpurWorldConfig {
|
||||
@@ -1234,6 +1802,8 @@ public class PurpurWorldConfig {
|
||||
public double zombifiedPiglinJockeyChance = 0.05D;
|
||||
public boolean zombifiedPiglinJockeyTryExistingChickens = true;
|
||||
public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true;
|
||||
@@ -2611,7 +2618,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
private void zombifiedPiglinSettings() {
|
||||
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
|
||||
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
|
||||
@@ -1241,6 +1809,13 @@ public class PurpurWorldConfig {
|
||||
@@ -1241,6 +1811,13 @@ public class PurpurWorldConfig {
|
||||
zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance);
|
||||
zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens);
|
||||
zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry);
|
||||
@@ -2625,7 +2632,7 @@ index 6f1ea7f760bd3a4ab6ba0787776b4017f9e6d52e..894c0e86dbbd7bcbdbd7af48cd50d38d
|
||||
}
|
||||
|
||||
public boolean zombieVillagerRidable = false;
|
||||
@@ -1248,11 +1823,20 @@ public class PurpurWorldConfig {
|
||||
@@ -1248,11 +1825,20 @@ public class PurpurWorldConfig {
|
||||
public boolean zombieVillagerJockeyOnlyBaby = true;
|
||||
public double zombieVillagerJockeyChance = 0.05D;
|
||||
public boolean zombieVillagerJockeyTryExistingChickens = true;
|
||||
|
||||
Reference in New Issue
Block a user