Files
Purpur/patches/server/0004-Configurable-entity-base-attributes.patch
BillyGalbreath 9a48162500 more progress
2021-06-18 19:09:50 -05:00

1456 lines
69 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Fri, 18 Jun 2021 18:30:03 -0500
Subject: [PATCH] Configurable entity base attributes
diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java
index 8f8bc29d847801938e251904b8334b4b31bd21c5..87d01bebbb179eec53323e9e23db011a791660ed 100644
--- a/src/main/java/net/minecraft/world/entity/GlowSquid.java
+++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java
@@ -29,6 +29,11 @@ public class GlowSquid extends Squid {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.glowSquidMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index e733c1e8f0b180bf1508e4f004124d44407f6c07..904a260e997bb7c1fd391d798233079e49732ed8 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -288,6 +288,7 @@ public abstract class LivingEntity extends Entity {
this.useItem = ItemStack.EMPTY;
this.lastClimbablePos = Optional.empty();
this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type));
+ this.initAttributes(); // Purpur
this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit
// CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor
this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue());
@@ -303,6 +304,8 @@ public abstract class LivingEntity extends Entity {
this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (net.minecraft.nbt.Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (net.minecraft.nbt.Tag) dynamicopsnbt.emptyMap()))));
}
+ protected abstract void initAttributes(); // Purpur
+
public Brain<?> getBrain() {
return this.brain;
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index 5708a1f88f3e62856a5ec15dc71d8a169353170d..3da42fff32b9050a5098a02ecdf48adca8bd8fe2 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -83,6 +83,18 @@ public class Bat extends AmbientCreature {
setDeltaMovement(mot.scale(0.9D));
}
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.batMaxHealth);
+ this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level.purpurConfig.batFollowRange);
+ this.getAttribute(Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level.purpurConfig.batKnockbackResistance);
+ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level.purpurConfig.batMovementSpeed);
+ this.getAttribute(Attributes.FLYING_SPEED).setBaseValue(this.level.purpurConfig.batFlyingSpeed);
+ this.getAttribute(Attributes.ARMOR).setBaseValue(this.level.purpurConfig.batArmor);
+ this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level.purpurConfig.batArmorToughness);
+ this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level.purpurConfig.batAttackKnockback);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index 8632a4047776723088b9b9fa27c6e8093fb17801..56f55c4520bec4b4baaa606e47ecf6c0288a104f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -209,6 +209,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
setDeltaMovement(mot.scale(0.9D));
}
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.beeMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
index 14822b20971b63290a7022f8efe65693c41664d2..1cbbc29ef19c8f1b8f96882213b662cfcb193033 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
@@ -139,6 +139,11 @@ public class Cat extends TamableAnimal {
setLying(false);
setRelaxStateOne(false);
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.catMaxHealth);
+ }
// Purpur end
public ResourceLocation getResourceLocation() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
index 771e55cceaf17167c00554b1be7043a4cb3efb7e..55dccf338f9fba17fbcb88672d36b83e7bbec88b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
@@ -62,6 +62,11 @@ public class Chicken extends Animal {
public boolean rideableUnderWater() {
return level.purpurConfig.chickenRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.chickenMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cod.java b/src/main/java/net/minecraft/world/entity/animal/Cod.java
index 5275e4ed3d552d1e164ef580caf6c247ec5fd8c2..b84aa3aa391aab6c7bcb804ec3cad67264a1e3d5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cod.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java
@@ -23,6 +23,11 @@ public class Cod extends AbstractSchoolingFish {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.codMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 1cb5342d63011605b567a4fe16d07de831f04216..bee82d5bf600cbeacfcede600e5606529af1435e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -50,6 +50,11 @@ public class Cow extends Animal {
public boolean rideableUnderWater() {
return level.purpurConfig.cowRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
index 2300abc4e80449e6b92992f6fb8cfe8e99dea351..c372d47a929e06c8cfb0df86cf4e9bfee4d4b300 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -158,6 +158,11 @@ public class Dolphin extends WaterAnimal {
}
return false;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.dolphinMaxHealth);
+ }
// Purpur end
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..9ce846d057a08b6a2b6576255bc55293707e3d24 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -169,6 +169,11 @@ public class Fox extends Animal {
super.onDismount(rider);
setCanPickUpLoot(true);
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.foxMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
index 63b739c86d2ea22aa9a610796ad2f208b0db289e..f4e983da7206923ee0b0f984e65a6c2b3a6a8aeb 100644
--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
@@ -80,6 +80,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
public boolean rideableUnderWater() {
return level.purpurConfig.ironGolemRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ironGolemMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
index 0e066782ee09bb5626715bcc500bc04f2252bc2e..e08618d418f44789441177e6ac5877e5e10207a8 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -69,6 +69,11 @@ public class MushroomCow extends Cow implements Shearable {
public boolean rideableUnderWater() {
return level.purpurConfig.mooshroomRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.mooshroomMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
index db17b971bb2da8ae375347040029e17b1a6165f5..4e979a8012b8b001c6a35c477c01d7da67583220 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
@@ -78,6 +78,11 @@ public class Ocelot extends Animal {
public boolean rideableUnderWater() {
return level.purpurConfig.ocelotRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ocelotMaxHealth);
+ }
// Purpur end
boolean isTrusting() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java
index 4591b67537aa95ce0a7e6ad838b7db9da80346cc..13ef0071b98ad2b7654914b62711a661f14b2c42 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java
@@ -127,6 +127,12 @@ public class Panda extends Animal {
eat(false);
setOnBack(false);
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pandaMaxHealth);
+ setAttributes();
+ }
// Purpur end
@Override
@@ -615,7 +621,10 @@ public class Panda extends Animal {
public void setAttributes() {
if (this.isWeak()) {
- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(10.0D);
+ // Purpur start
+ net.minecraft.world.entity.ai.attributes.AttributeInstance maxHealth = this.getAttribute(Attributes.MAX_HEALTH);
+ maxHealth.setBaseValue(maxHealth.getValue() / 2);
+ // Purpur end
}
if (this.isLazy()) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
index b881f6e948b21ba851913d9f244d74d886f2cc3a..1e38578a9a1531433866e2de7aa0ce5237da3b6b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -176,6 +176,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
setDeltaMovement(mot.scale(0.9D));
}
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.parrotMaxHealth);
+ }
// Purpur end
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java
index 80c8ceda47bf8b3ff370f89a61aa01869d606ee6..f4a099e691dce3c57069e76d67859161b459098e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java
@@ -75,6 +75,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
public boolean rideableUnderWater() {
return level.purpurConfig.pigRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pigMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
index dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..18780fb268cabb47bb0deb84c44520831c1a762b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
+++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
@@ -88,6 +88,11 @@ public class PolarBear extends Animal implements NeutralMob {
}
return false;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.polarBearMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
index 42446fd8ba1d78cd5992bc6c2e5259da361eb716..bb1a2d79e0034ca3d8b18cb578049deecd234a05 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
@@ -55,6 +55,11 @@ public class Pufferfish extends AbstractFish {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pufferfishMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
index 29551a3b87f06c5876de5fda80615acf6c1f4764..587feda351efae19407cb9f23c6c1d42d5ed0cc9 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
@@ -128,6 +128,11 @@ public class Rabbit extends Animal {
}
wasOnGround = onGround;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.rabbitMaxHealth);
+ }
// Purpur end
// CraftBukkit start - code from constructor
diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java
index 02a9ce0b98bab47d57b51cdfb2194f0e72a9f705..002564221cc53b872001bdb8a76d9ca059212401 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java
@@ -23,6 +23,11 @@ public class Salmon extends AbstractSchoolingFish {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.salmonMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
index 5890bf8aa714dc219059bca4950a1b5b1882dd3a..497be3182c72b5a0f3bc42088c4168702119b527 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
@@ -126,6 +126,11 @@ public class Sheep extends Animal implements Shearable {
public boolean rideableUnderWater() {
return level.purpurConfig.sheepRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.sheepMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
index a76f3c1c409dc96f7033be8a7eeb06617053735b..7fbe1a62e9c67a8bdaf13aaa9fae1d8742d75148 100644
--- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
@@ -63,6 +63,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
public boolean rideableUnderWater() {
return level.purpurConfig.snowGolemRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.snowGolemMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index 151bb142c553d733367a92b39b430b536e569480..f96def2ebdf114823c322c2d4318d039e20eab97 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -74,6 +74,11 @@ public class Squid extends WaterAnimal {
vector.setX(cos * x - sine * z);
vector.setZ(sine * x + cos * z);
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.squidMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
index 4d5ceb4ce913248ad404393e4f0c75cad24029bb..5ab75a110d45dd9a2c341820b53838a55cac6bb3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
+++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
@@ -53,6 +53,11 @@ public class TropicalFish extends AbstractSchoolingFish {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.tropicalFishMaxHealth);
+ }
// Purpur end
public static String getPredefinedName(int variant) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
index c86f13d190b41cb18dd833af39c7b4916068fd69..31568adcf4a89b11e61f455a15326c7f72bf487e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
@@ -100,6 +100,11 @@ public class Turtle extends Animal {
public boolean rideableUnderWater() {
return level.purpurConfig.turtleRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.turtleMaxHealth);
+ }
// Purpur end
public void setHomePos(BlockPos pos) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index bca3300e06d6eb0c6acdfb11d715a1e8447c9198..ae416b70109c959980b3115da6e97df1610996ca 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -108,6 +108,11 @@ public class Wolf extends TamableAnimal implements NeutralMob {
super.onMount(rider);
setInSittingPose(false);
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wolfMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index e076d03025690492c2226f03d777eba714819300..15a0aeb1131618ea27620c5893a7448af624b6dd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -105,6 +105,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
protected void registerGoals() {
this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.axolotlMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
index c0d85eb70dbe1d85d07b47a41a43d19506586399..9092eac3e7e15845d14175cad8030f4ea60d43ad 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -80,6 +80,11 @@ public class Goat extends Animal {
public boolean rideableUnderWater() {
return level.purpurConfig.goatRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.goatMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
index 919410ce27e7e42e297c2caba7d3d7c1b623aede..790f0940156b9c6d4aa1869a4ab50292faa246c5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -125,6 +125,32 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
public boolean isRidable() {
return false; // vanilla handles
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateRandomMaxHealth());
+ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.generateRandomSpeed());
+ this.getAttribute(Attributes.JUMP_STRENGTH).setBaseValue(this.generateRandomJumpStrength());
+ }
+
+ protected double generateRandomMaxHealth(double min, double max) {
+ if (min == max) return min;
+ int diff = Mth.floor(max - min);
+ double base = max - diff;
+ int first = Mth.floor((double) diff / 2);
+ int rest = diff - first;
+ return base + random.nextInt(first + 1) + random.nextInt(rest + 1);
+ }
+
+ protected double generateRandomJumpStrength(double min, double max) {
+ if (min == max) return min;
+ return min + (max - min) * this.random.nextDouble();
+ }
+
+ protected double generateRandomSpeed(double min, double max) {
+ if (min == max) return min;
+ return min + (max - min) * this.random.nextDouble();
+ }
// Purpur end
@Override
@@ -1142,7 +1168,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
entityData = new AgeableMob.AgeableMobGroupData(0.2F);
}
- this.randomizeAttributes();
+ //this.randomizeAttributes(); // Purpur - replaced by initAttributes()
return super.finalizeSpawn(world, difficulty, spawnReason, (SpawnGroupData) entityData, entityNbt);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
index e5b13558f45966bf70593931922ca73f4a66c66a..b4944ab2191241dc604ad21670360e5204bc111b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
@@ -20,6 +20,21 @@ public class Donkey extends AbstractChestedHorse {
public boolean rideableUnderWater() {
return level.purpurConfig.donkeyRidableInWater;
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.donkeyMaxHealthMin, this.level.purpurConfig.donkeyMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.donkeyJumpStrengthMin, this.level.purpurConfig.donkeyJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.donkeyMovementSpeedMin, this.level.purpurConfig.donkeyMovementSpeedMax);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
index c7b0d6a987644e0b589c143b0b6b68053be04f37..6c6d2ac7551ae24dec88bd9e6bce7aeafd900e8c 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
@@ -44,6 +44,21 @@ public class Horse extends AbstractHorse {
public boolean rideableUnderWater() {
return level.purpurConfig.horseRidableInWater;
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.horseMaxHealthMin, this.level.purpurConfig.horseMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.horseJumpStrengthMin, this.level.purpurConfig.horseJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.horseMovementSpeedMin, this.level.purpurConfig.horseMovementSpeedMax);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..397d9846ad645f98163a0bfae7a69ceaa6d5c3a4 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -107,6 +107,21 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
public boolean isSaddled() {
return super.isSaddled() || (isTamed() && getSwag() != null);
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.llamaMaxHealthMin, this.level.purpurConfig.llamaMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.llamaJumpStrengthMin, this.level.purpurConfig.llamaJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.llamaMovementSpeedMin, this.level.purpurConfig.llamaMovementSpeedMax);
+ }
// Purpur end
public boolean isTraderLlama() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
index 40cc7e20913938d6e30e6bca9f4ad70fb5e9435b..da3d0b431c14f1a0794b9445236af1f548139013 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
@@ -19,6 +19,21 @@ public class Mule extends AbstractChestedHorse {
public boolean rideableUnderWater() {
return level.purpurConfig.muleRidableInWater;
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.muleMaxHealthMin, this.level.purpurConfig.muleMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.muleJumpStrengthMin, this.level.purpurConfig.muleJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.muleMovementSpeedMin, this.level.purpurConfig.muleMovementSpeedMax);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
index d4057c300d39eca4ff2e11791ce5ba7993d9b66e..ffc36728e0fc90c4e37051adc643a2b8af8077ff 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
@@ -34,6 +34,21 @@ public class SkeletonHorse extends AbstractHorse {
public boolean isTamed() {
return true;
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.skeletonHorseMaxHealthMin, this.level.purpurConfig.skeletonHorseMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.skeletonHorseJumpStrengthMin, this.level.purpurConfig.skeletonHorseJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.skeletonHorseMovementSpeedMin, this.level.purpurConfig.skeletonHorseMovementSpeedMax);
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
index ff252d9ca75b90ab7606f63aa5f89b6230e33a36..f70f42639af7d6ba477510c24fb0908cc0223091 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
@@ -42,6 +42,21 @@ public class TraderLlama extends Llama {
public boolean isSaddled() {
return super.isSaddled() || isTamed();
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.llamaTraderMaxHealthMin, this.level.purpurConfig.llamaTraderMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.llamaTraderJumpStrengthMin, this.level.purpurConfig.llamaTraderJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.llamaTraderMovementSpeedMin, this.level.purpurConfig.llamaTraderMovementSpeedMax);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
index d328e36015b6b7d6a9e093fbe232eb5ecda46d96..6ca7b168a1ea26102922d9377e52662f16c1e725 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
@@ -32,6 +32,21 @@ public class ZombieHorse extends AbstractHorse {
public boolean isTamed() {
return true;
}
+
+ @Override
+ public float generateRandomMaxHealth() {
+ return (float) generateRandomMaxHealth(this.level.purpurConfig.zombieHorseMaxHealthMin, this.level.purpurConfig.zombieHorseMaxHealthMax);
+ }
+
+ @Override
+ public double generateRandomJumpStrength() {
+ return generateRandomJumpStrength(this.level.purpurConfig.zombieHorseJumpStrengthMin, this.level.purpurConfig.zombieHorseJumpStrengthMax);
+ }
+
+ @Override
+ public double generateRandomSpeed() {
+ return generateRandomSpeed(this.level.purpurConfig.zombieHorseMovementSpeedMin, this.level.purpurConfig.zombieHorseMovementSpeedMax);
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index a1a64591e6a6fb8a4550b91f89e3cdbd35c6d249..1f40e8d1e73fec0aaee29c658e3d24f499fa9501 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -154,6 +154,11 @@ public class EnderDragon extends Mob implements Enemy {
public double getMaxY() {
return level.purpurConfig.enderDragonMaxY;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.enderDragonMaxHealth);
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
index a5294012d432d5d1fce570a1eb1b1716a24522de..83f9a1139a501135a89a758993c7ff209b5b92d5 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
@@ -67,6 +67,11 @@ public class Blaze extends Monster {
setDeltaMovement(mot.scale(0.9D));
}
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.blazeMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
index dd05c5f35d78d1385f793f4e34333ff242d136e1..45b53f11b52cc161775fcaa18567e4a74c5e71b8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
@@ -38,6 +38,11 @@ public class CaveSpider extends Spider {
public boolean rideableUnderWater() {
return level.purpurConfig.caveSpiderRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.caveSpiderMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 1bf65519883585569a1acc780554505dc5d6c30b..b71a6af3c2d1ca2a946b23efb11b0e794840cf25 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -129,6 +129,11 @@ public class Creeper extends Monster implements PowerableMob {
}
return getForwardMot() == 0 && getStrafeMot() == 0; // do not jump if standing still
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.creeperMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
index ace909fab2334105eabe0593aba47736e3f67451..591dfcd091c1c4611aeb17dfc5ee493be8131b50 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -79,6 +79,16 @@ public class Drowned extends Zombie implements RangedAttackMob {
public boolean rideableUnderWater() {
return level.purpurConfig.drownedRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth);
+ }
+
+ @Override
+ protected void randomizeReinforcementsChance() {
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.drownedSpawnReinforcements);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
index 5f8233c1be6f92bcf58c5c5db360b2660c9439ad..55f67061aa4a63105059bfecfb153a579472adc0 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
@@ -40,6 +40,11 @@ public class ElderGuardian extends Guardian {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.elderGuardianMaxHealth);
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index a9c247d9c1f1eddd8ef884c0c8d80dee3bb4bf68..6cd8aa2305ff682d4e34b1c445cae3e486292b84 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -93,6 +93,11 @@ public class EnderMan extends Monster implements NeutralMob {
public boolean rideableUnderWater() {
return level.purpurConfig.endermanRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermanMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
index 1f315cc57f6365a782ca4e645b0dcfbe5485138a..d9e2bc9d37968430910c8de33390004ba5db22a6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
@@ -46,6 +46,11 @@ public class Endermite extends Monster {
public boolean rideableUnderWater() {
return level.purpurConfig.endermiteRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermiteMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
index 053374baf3ec7730bcddf072ddf98e3176656435..0ae0a49da681c6603d6f1504ee58f99b8f345e44 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
@@ -56,6 +56,11 @@ public class Evoker extends SpellcasterIllager {
public boolean rideableUnderWater() {
return level.purpurConfig.evokerRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.evokerMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
index bb1a6f6847d0e459eb26a029d8a1f5646168a422..e3f479bcc3bd9e28fc4a6ef2f390f79a8e361a3f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
@@ -71,6 +71,11 @@ public class Ghast extends FlyingMob implements Enemy {
setDeltaMovement(mot.scale(0.9D));
}
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ghastMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
index 4aaad673f49988be6470b817d42f3fc4e6936400..8df1db3bee586d0faa3f58076ace2d8b937e85af 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -85,6 +85,11 @@ public class Guardian extends Monster {
public boolean rideableUnderWater() {
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.guardianMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
index 75397a8e1ae8d48bf07f5c0409536acd54851c48..464e062bba03a17c9281b3dfb8fa9193c1b81150 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -32,6 +32,16 @@ public class Husk extends Zombie {
public boolean rideableUnderWater() {
return level.purpurConfig.huskRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.huskMaxHealth);
+ }
+
+ @Override
+ protected void randomizeReinforcementsChance() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.huskSpawnReinforcements);
+ }
// Purpur end
public static boolean checkHuskSpawnRules(EntityType<Husk> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
index 7d39f25734f2c52b11931e141524acd2c244c2c5..87aae8fa18704e58f2b1fc0abd1a98987715123f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
+++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
@@ -42,6 +42,16 @@ public class MagmaCube extends Slime {
public float getJumpPower() {
return 0.42F * this.getBlockJumpFactor(); // from EntityLiving
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateMaxHealth());
+ }
+
+ @Override
+ protected String getMaxHealthEquation() {
+ return level.purpurConfig.magmaCubeMaxHealth;
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index d35e1338c0c11b89e093f8748341ce6980071485..96684261f3a6ad64cf9eb6e46ff40fb75b8b68b7 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -112,6 +112,11 @@ public class Phantom extends FlyingMob implements Enemy {
level.addFreshEntity(flames);
return true;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.phantomMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
index 84bd5e7df663f315fd099742195e85508ea25adf..48a1bd4c9c7e36e42797937ea1af3d213f418da4 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
@@ -76,6 +76,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve
public boolean rideableUnderWater() {
return level.purpurConfig.pillagerRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pillagerMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
index 8ed51e3f5abd76ec60c76d8a048b9a85a476469b..43cfd030b825ee65023e6518e150838abfac4b7c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
@@ -86,6 +86,11 @@ public class Ravager extends Raider {
super.onMount(rider);
getNavigation().stopPathfinding();
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ravagerMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
index 9dc36967a63ef3753e798b237b05f45fdc48135f..176c68513669c7bbcee49b56456ba470c98916b6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -102,6 +102,11 @@ public class Shulker extends AbstractGolem implements Enemy {
public boolean rideableUnderWater() {
return level.purpurConfig.shulkerRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.shulkerMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
index e66cc79dc61721b31ffb743f68f4388cc499a92d..0d60d6352294fadc1a26579a712b01cf0da681af 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
@@ -49,6 +49,11 @@ public class Silverfish extends Monster {
public boolean rideableUnderWater() {
return level.purpurConfig.silverfishRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.silverfishMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
index dca18730731407bb68ad32852c7994062b0b4ba6..070e1ef31d4dabb943fc57ea4f46bb8dfffed5c0 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -35,6 +35,11 @@ public class Skeleton extends AbstractSkeleton {
public boolean rideableUnderWater() {
return level.purpurConfig.skeletonRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.skeletonMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java
index 8830121a89297cc49fb13a7ecac9e6d90f33969d..8b6ce4b962cab41b39a364136429e3ce4271286c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
@@ -61,6 +61,7 @@ import org.bukkit.event.entity.SlimeSplitEvent;
public class Slime extends Mob implements Enemy {
private static final EntityDataAccessor<Integer> ID_SIZE = SynchedEntityData.defineId(Slime.class, EntityDataSerializers.INT);
+ private static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur
public static final int MIN_SIZE = 1;
public static final int MAX_SIZE = 127;
public float targetSquish;
@@ -101,6 +102,30 @@ public class Slime extends Mob implements Enemy {
}
return true; // do not jump() in wasd controller, let vanilla controller handle
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateMaxHealth());
+ }
+
+ protected String getMaxHealthEquation() {
+ return level.purpurConfig.slimeMaxHealth;
+ }
+
+ protected double generateMaxHealth() {
+ int size = getSize();
+ Double maxHealth = level.purpurConfig.slimeMaxHealthCache.get(size);
+ if (maxHealth == null) {
+ try {
+ scriptEngine.eval("size = " + size);
+ maxHealth = (double) scriptEngine.eval(getMaxHealthEquation());
+ } catch (Exception e) {
+ maxHealth = (double) size * size;
+ }
+ level.purpurConfig.slimeMaxHealthCache.put(size, maxHealth);
+ }
+ return maxHealth;
+ }
// Purpur end
@Override
@@ -129,7 +154,7 @@ public class Slime extends Mob implements Enemy {
this.entityData.set(Slime.ID_SIZE, j);
this.reapplyPosition();
this.refreshDimensions();
- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double) (j * j));
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth()); // Purpur
this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue((double) (0.2F + 0.1F * (float) j));
this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue((double) j);
if (heal) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java
index 49e91abc7b78f88125f558f869f7619d36efdd04..653486b09c67988a0047e5e19647919bc503acc8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Spider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java
@@ -61,6 +61,11 @@ public class Spider extends Monster {
public boolean rideableUnderWater() {
return level.purpurConfig.spiderRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.spiderMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java
index 6a8a0cd09e0bf17c7ecb6e55342b645f111dac22..d2eb323c8957ac4ccdf2ab73d83dbbdeefd6ae53 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java
@@ -31,6 +31,11 @@ public class Stray extends AbstractSkeleton {
public boolean rideableUnderWater() {
return level.purpurConfig.strayRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.strayMaxHealth);
+ }
// Purpur end
public static boolean checkStraySpawnRules(EntityType<Stray> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java
index a4b14b7eaaef3f70cedf1b71afdcef8a0702dc94..6b9316536e09c52be2cd1e9cdc71529f4ddb69c6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Strider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java
@@ -107,6 +107,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable {
public boolean rideableUnderWater() {
return level.purpurConfig.striderRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.striderMaxHealth);
+ }
// Purpur end
public static boolean checkStriderSpawnRules(EntityType<Strider> type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index c914cfc75cc0426c0333a6bb30aab7b9e4c52971..18d650befe5f257b9e8f269e605de70d4201dd5c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -94,6 +94,11 @@ public class Vex extends Monster {
public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) {
return false; // no fall damage please
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vexMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
index a3b1332a92824255b807adc9a5a1d29569e7073b..76e6ea34db3942e9dd7646ad7ca1259f4387a4d8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
@@ -67,6 +67,11 @@ public class Vindicator extends AbstractIllager {
public boolean rideableUnderWater() {
return level.purpurConfig.vindicatorRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vindicatorMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java
index 439fcfc49a8aac698fa0225d846b885c8df7a475..7a1ba6c6579c49f5ebeb545d1479e243232a81ac 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
@@ -70,6 +70,11 @@ public class Witch extends Raider implements RangedAttackMob {
public boolean rideableUnderWater() {
return level.purpurConfig.witchRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witchMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
index dd32e62de68243cf40f6df882922fd71bd1f4d67..8212ee2cc1242c0a3626f3643c455f3be0de18c2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
@@ -44,6 +44,11 @@ public class WitherSkeleton extends AbstractSkeleton {
public boolean rideableUnderWater() {
return level.purpurConfig.witherSkeletonRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherSkeletonMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
index 8fd4e26ebe0527fd8a69b15095dd4091fcdde206..7afc9b83e385d711096db5ea9c6c259fd2387075 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
@@ -77,6 +77,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase {
public boolean rideableUnderWater() {
return level.purpurConfig.zoglinRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zoglinMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
index 4880a8f9576339ed87dbeeebc76d3332ab14d27c..6eef158223d361f58f49810335895478430dda2d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -117,6 +117,11 @@ public class Zombie extends Monster {
public boolean rideableUnderWater() {
return level.purpurConfig.zombieRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth);
+ }
// Purpur end
@Override
@@ -584,7 +589,7 @@ public class Zombie extends Monster {
}
protected void randomizeReinforcementsChance() {
- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * 0.10000000149011612D);
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieSpawnReinforcements); // Purpur
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
index 5744d181b91bcf7f8202c801bce42c96acbdb524..ce15ebc6248eaa849ccb1de4319b51e8a12f2e3e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -84,6 +84,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
public boolean rideableUnderWater() {
return level.purpurConfig.zombieVillagerRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombieVillagerMaxHealth);
+ }
+
+ @Override
+ protected void randomizeReinforcementsChance() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieVillagerSpawnReinforcements);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
index b86d29a16f4c4ad0b166506fe31e64b902ecc06b..04d09123f70a192f1283c0d7e8a8254f3d30889a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
@@ -68,6 +68,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob {
public boolean rideableUnderWater() {
return level.purpurConfig.zombifiedPiglinRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombifiedPiglinMaxHealth);
+ }
// Purpur end
@Override
@@ -252,7 +257,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob {
@Override
protected void randomizeReinforcementsChance() {
- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0D);
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombifiedPiglinSpawnReinforcements); // Purpur
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
index ce7f7caa535aab1bf849b7e28c98c177e16d1ea3..5d289be8f0ef003abbce992e7662f6ddce4f4a99 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -77,6 +77,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
public boolean rideableUnderWater() {
return level.purpurConfig.hoglinRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.hoglinMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
index 34d7bb4daab7ddd857112741d7a0d077d8cec24e..4d00d99fb4d3e6a87a9f19470d5a7672dd068eb3 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -107,6 +107,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
public boolean rideableUnderWater() {
return level.purpurConfig.piglinRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
index d01a8fe6dd5c84ea5b7370a90c0d57130b27e447..9e66f8f2a92cb7b32cdb2cf749ca273759efa6eb 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
@@ -50,6 +50,11 @@ public class PiglinBrute extends AbstractPiglin {
public boolean rideableUnderWater() {
return level.purpurConfig.piglinBruteRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinBruteMaxHealth);
+ }
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 8128345a1f869af945f693281b371aaf843b0552..91edc954029aae9eb4ec0b3899e59eff8e310a6f 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -170,6 +170,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
protected void registerGoals() {
this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this));
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.villagerMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
index d6c31596e21041a124a263054ccb6447829eccdd..d2588a91b55aebdecf8e1644498111ccf84a9dc9 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -77,6 +77,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
public boolean rideableUnderWater() {
return level.purpurConfig.wanderingTraderRidableInWater;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wanderingTraderMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 9d261356c549a41e4bd676d5be60f6470501f0ae..d9ecedda8d312f512c5c258f06932ad4b2a2c3e5 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -67,49 +67,93 @@ public class PurpurWorldConfig {
}
public boolean axolotlRidable = false;
+ public double axolotlMaxHealth = 10.0D;
private void axolotlSettings() {
axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable);
+ axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth);
}
public boolean batRidable = false;
public boolean batRidableInWater = false;
public double batMaxY = 256D;
+ public double batMaxHealth = 6.0D;
+ public double batFollowRange = 16.0D;
+ public double batKnockbackResistance = 0.0D;
+ public double batMovementSpeed = 0.6D;
+ public double batFlyingSpeed = 0.6D;
+ public double batArmor = 0.0D;
+ public double batArmorToughness = 0.0D;
+ public double batAttackKnockback = 0.0D;
private void batSettings() {
batRidable = getBoolean("mobs.bat.ridable", batRidable);
batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater);
batMaxY = getDouble("mobs.bat.ridable-max-y", batMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.bat.attributes.max-health", batMaxHealth);
+ set("mobs.bat.attributes.max-health", null);
+ set("mobs.bat.attributes.max_health", oldValue);
+ }
+ batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth);
}
public boolean beeRidable = false;
public boolean beeRidableInWater = false;
public double beeMaxY = 256D;
+ public double beeMaxHealth = 10.0D;
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
beeMaxY = getDouble("mobs.bee.ridable-max-y", beeMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth);
+ set("mobs.bee.attributes.max-health", null);
+ set("mobs.bee.attributes.max_health", oldValue);
+ }
+ beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth);
}
public boolean blazeRidable = false;
public boolean blazeRidableInWater = false;
public double blazeMaxY = 256D;
+ public double blazeMaxHealth = 20.0D;
private void blazeSettings() {
blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable);
blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater);
blazeMaxY = getDouble("mobs.blaze.ridable-max-y", blazeMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.blaze.attributes.max-health", blazeMaxHealth);
+ set("mobs.blaze.attributes.max-health", null);
+ set("mobs.blaze.attributes.max_health", oldValue);
+ }
+ blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth);
}
public boolean catRidable = false;
public boolean catRidableInWater = false;
+ public double catMaxHealth = 10.0D;
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cat.attributes.max-health", catMaxHealth);
+ set("mobs.cat.attributes.max-health", null);
+ set("mobs.cat.attributes.max_health", oldValue);
+ }
+ catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth);
}
public boolean caveSpiderRidable = false;
public boolean caveSpiderRidableInWater = false;
+ public double caveSpiderMaxHealth = 12.0D;
private void caveSpiderSettings() {
caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cave_spider.attributes.max-health", caveSpiderMaxHealth);
+ set("mobs.cave_spider.attributes.max-health", null);
+ set("mobs.cave_spider.attributes.max_health", oldValue);
+ }
+ caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth);
}
public boolean chickenRidable = false;