From 7ad2c5d503217dc3dfddcaf33082f8217e2b897c Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Wed, 23 Dec 2020 09:47:27 -0600 Subject: [PATCH] [ci-skip] More attributes work --- patches/server/0027-Giants-AI-settings.patch | 66 +- .../server/0028-Illusioners-AI-settings.patch | 15 +- .../server/0037-Chickens-can-retaliate.patch | 14 +- patches/server/0041-Cows-eat-mushrooms.patch | 2 +- .../server/0050-Controllable-Minecarts.patch | 2 +- ...able-loot-drops-on-death-by-cramming.patch | 4 +- ...0055-Fix-the-dead-lagging-the-server.patch | 4 +- ...up-loot-bypass-mob-griefing-gamerule.patch | 2 +- .../0065-Allow-leashing-villagers.patch | 4 +- ...ispenser-curse-of-binding-protection.patch | 2 +- .../0079-Implement-elytra-settings.patch | 4 +- patches/server/0089-Entity-lifespan.patch | 4 +- ...leport-to-spawn-if-outside-world-bor.patch | 4 +- .../0097-Totems-work-in-inventory.patch | 4 +- patches/server/0110-Ridables.patch | 38 +- ...stomizable-wither-health-and-healing.patch | 24 +- ...e-animal-breeding-times-configurable.patch | 6 +- ...mes-from-item-forms-of-entities-to-e.patch | 6 +- ...45-Changeable-Mob-Left-Handed-Chance.patch | 2 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 4 +- ...-Configurable-entity-base-attributes.patch | 877 +++++++----------- .../server/0160-Phantom-flames-on-swoop.patch | 10 +- ...s-to-open-even-with-a-solid-block-on.patch | 2 +- .../0163-Striders-give-saddle-back.patch | 8 +- 24 files changed, 432 insertions(+), 676 deletions(-) diff --git a/patches/server/0027-Giants-AI-settings.patch b/patches/server/0027-Giants-AI-settings.patch index f245795af..03a11c2eb 100644 --- a/patches/server/0027-Giants-AI-settings.patch +++ b/patches/server/0027-Giants-AI-settings.patch @@ -4,18 +4,6 @@ Date: Sun, 12 May 2019 00:43:12 -0500 Subject: [PATCH] Giants AI settings -diff --git a/src/main/java/net/minecraft/server/AttributeMapBase.java b/src/main/java/net/minecraft/server/AttributeMapBase.java -index c57e23e16b79017fe6dc084d634226cfdac772b5..92aa104dc51efa833eac289198bb9ee7dbacd66b 100644 ---- a/src/main/java/net/minecraft/server/AttributeMapBase.java -+++ b/src/main/java/net/minecraft/server/AttributeMapBase.java -@@ -41,6 +41,7 @@ public class AttributeMapBase { - }).collect(Collectors.toList()); - } - -+ @Nullable public AttributeModifiable getAttribute(AttributeBase attributebase) { return a(attributebase); } // Purpur - OBFHELPER - @Nullable - public AttributeModifiable a(AttributeBase attributebase) { - return (AttributeModifiable) this.b.computeIfAbsent(attributebase, (attributebase1) -> { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index d93db1049ef9421f6b3edd0dc52a421c4d1b51c2..0502ba688d3d16f15fea1ddda1f7d0bcbe59d701 100644 --- a/src/main/java/net/minecraft/server/Entity.java @@ -30,10 +18,10 @@ index d93db1049ef9421f6b3edd0dc52a421c4d1b51c2..0502ba688d3d16f15fea1ddda1f7d0bc public float I; protected final Random random; diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index 9f4f56c47ecd4b35ebf33ca0bf9a040074ababf2..cf899bb6a5bd9d913ea90facdd5f3cc0dda1e9d2 100644 +index 9f4f56c47ecd4b35ebf33ca0bf9a040074ababf2..565c938d879940d8e12fe320ea8524d2cf679c1f 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java -@@ -4,9 +4,69 @@ public class EntityGiantZombie extends EntityMonster { +@@ -4,9 +4,66 @@ public class EntityGiantZombie extends EntityMonster { public EntityGiantZombie(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -65,13 +53,10 @@ index 9f4f56c47ecd4b35ebf33ca0bf9a040074ababf2..cf899bb6a5bd9d913ea90facdd5f3cc0 + } + + @Override -+ protected void initAttributes(World world) { -+ if (world != null) { -+ getAttributeMap().getAttribute(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.giantMaxHealth); -+ getAttributeMap().getAttribute(GenericAttributes.MOVEMENT_SPEED).setValue(world.purpurConfig.giantMovementSpeed); -+ getAttributeMap().getAttribute(GenericAttributes.ATTACK_DAMAGE).setValue(world.purpurConfig.giantAttackDamage); -+ setHealth(getMaxHealth()); -+ } ++ protected void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.giantMaxHealth); ++ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.world.purpurConfig.giantMovementSpeed); ++ this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(this.world.purpurConfig.giantAttackDamage); + } + + @Override @@ -104,7 +89,7 @@ index 9f4f56c47ecd4b35ebf33ca0bf9a040074ababf2..cf899bb6a5bd9d913ea90facdd5f3cc0 @Override protected float b(EntityPose entitypose, EntitySize entitysize) { return 10.440001F; -@@ -18,6 +78,6 @@ public class EntityGiantZombie extends EntityMonster { +@@ -18,6 +75,6 @@ public class EntityGiantZombie extends EntityMonster { @Override public float a(BlockPosition blockposition, IWorldReader iworldreader) { @@ -113,7 +98,7 @@ index 9f4f56c47ecd4b35ebf33ca0bf9a040074ababf2..cf899bb6a5bd9d913ea90facdd5f3cc0 } } diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 7b32a1fb79dcae355a8d95f3a8aa4284ec5d10db..b281ca841b2b7b51add3409318e2b92deb51eeda 100644 +index 7b32a1fb79dcae355a8d95f3a8aa4284ec5d10db..fba53ad6792236f0282279283570ffbd6d666f19 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -948,6 +948,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -132,25 +117,28 @@ index 7b32a1fb79dcae355a8d95f3a8aa4284ec5d10db..b281ca841b2b7b51add3409318e2b92d protected void b(DifficultyDamageScaler difficultydamagescaler) { float f = difficultydamagescaler.d(); -@@ -1096,10 +1098,12 @@ public abstract class EntityInsentient extends EntityLiving { - } else { - this.setLeftHanded(false); - } -- -+ initAttributes(world.getMinecraftWorld()); // Purpur - return groupdataentity; - } - -+ protected void initAttributes(World world) {} // Purpur -+ - public boolean er() { - return false; - } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 4bbfb21d13c7e2f3ffcaaa31bd9ceee3755aa7cc..9af491260a586d322796f8419d6aa1fffae10140 100644 +index 4bbfb21d13c7e2f3ffcaaa31bd9ceee3755aa7cc..1fa5edd4dfbbe5cc68856a32b01a0c8ea83e3f6f 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2171,7 +2171,7 @@ public abstract class EntityLiving extends Entity { +@@ -165,6 +165,7 @@ public abstract class EntityLiving extends Entity { + this.activeItem = ItemStack.b; + this.by = Optional.empty(); + this.attributeMap = new AttributeMapBase(AttributeDefaults.a(entitytypes)); ++ this.initAttributes(); // Purpur + this.craftAttributes = new CraftAttributeMap(attributeMap); // CraftBukkit + // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor + this.datawatcher.set(EntityLiving.HEALTH, (float) this.getAttributeInstance(GenericAttributes.MAX_HEALTH).getValue()); +@@ -180,6 +181,8 @@ public abstract class EntityLiving extends Entity { + this.bg = this.a(new Dynamic(dynamicopsnbt, dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), dynamicopsnbt.emptyMap())))); + } + ++ protected void initAttributes() {} // Purpur ++ + public BehaviorController getBehaviorController() { + return this.bg; + } +@@ -2171,7 +2174,7 @@ public abstract class EntityLiving extends Entity { this.enderTeleportTo(vec3d.x, vec3d.y, vec3d.z); } diff --git a/patches/server/0028-Illusioners-AI-settings.patch b/patches/server/0028-Illusioners-AI-settings.patch index fffd82c3c..de8ef59bc 100644 --- a/patches/server/0028-Illusioners-AI-settings.patch +++ b/patches/server/0028-Illusioners-AI-settings.patch @@ -5,22 +5,19 @@ Subject: [PATCH] Illusioners AI settings diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index 50442b3a498d1bab4270e69952a79f5182153ece..a9dcf6875efda502d174c74bd17026a5c8f0fdcb 100644 +index 50442b3a498d1bab4270e69952a79f5182153ece..c57bf5091430709778dc21d70c8a32819c9d6639 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -@@ -19,6 +19,18 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan +@@ -19,6 +19,15 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan } + // Purpur start + @Override -+ protected void initAttributes(World world) { -+ if (world != null) { -+ getAttributeMap().getAttribute(GenericAttributes.MOVEMENT_SPEED).setValue(world.purpurConfig.illusionerMovementSpeed); -+ getAttributeMap().getAttribute(GenericAttributes.FOLLOW_RANGE).setValue(world.purpurConfig.illusionerFollowRange); -+ getAttributeMap().getAttribute(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.illusionerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ protected void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.world.purpurConfig.illusionerMovementSpeed); ++ this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(this.world.purpurConfig.illusionerFollowRange); ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.illusionerMaxHealth); + } + // Purpur end + diff --git a/patches/server/0037-Chickens-can-retaliate.patch b/patches/server/0037-Chickens-can-retaliate.patch index 8e2774b8a..853a05075 100644 --- a/patches/server/0037-Chickens-can-retaliate.patch +++ b/patches/server/0037-Chickens-can-retaliate.patch @@ -5,20 +5,18 @@ Subject: [PATCH] Chickens can retaliate diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index 182469fd39cb23633a3225cf1a64ab6b291e4cdf..11a612fa390cb0acf37fb84c5d5b6ea926dabad3 100644 +index 182469fd39cb23633a3225cf1a64ab6b291e4cdf..8fb5d5c75e79a81ab46af3fbb96ebc41804113c4 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java -@@ -17,16 +17,35 @@ public class EntityChicken extends EntityAnimal { +@@ -17,16 +17,33 @@ public class EntityChicken extends EntityAnimal { this.a(PathType.WATER, 0.0F); } + // Purpur start + @Override -+ protected void initAttributes(World world) { -+ if (world != null) { -+ if (world.purpurConfig.chickenRetaliate) { -+ this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); -+ } ++ protected void initAttributes() { ++ if (world.purpurConfig.chickenRetaliate) { ++ this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); + } + } + // Purpur end @@ -45,7 +43,7 @@ index 182469fd39cb23633a3225cf1a64ab6b291e4cdf..11a612fa390cb0acf37fb84c5d5b6ea9 } @Override -@@ -35,7 +54,7 @@ public class EntityChicken extends EntityAnimal { +@@ -35,7 +52,7 @@ public class EntityChicken extends EntityAnimal { } public static AttributeProvider.Builder eK() { diff --git a/patches/server/0041-Cows-eat-mushrooms.patch b/patches/server/0041-Cows-eat-mushrooms.patch index 4664435df..c8704e773 100644 --- a/patches/server/0041-Cows-eat-mushrooms.patch +++ b/patches/server/0041-Cows-eat-mushrooms.patch @@ -110,7 +110,7 @@ index 42e6761c8b18b79ffd3f4d5e853ea87a2c153c23..cfb009c811bd2908d38da1b0007cb7aa public EntityCow createChild(WorldServer worldserver, EntityAgeable entityageable) { return (EntityCow) EntityTypes.COW.a((World) worldserver); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 9af491260a586d322796f8419d6aa1fffae10140..594e2735cd58a0a19446369b34ba8282f2af2130 100644 +index 1fa5edd4dfbbe5cc68856a32b01a0c8ea83e3f6f..f7bdd5f2a35c0abc018732d7fd920b162cb0a2d1 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -80,7 +80,7 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/server/0050-Controllable-Minecarts.patch b/patches/server/0050-Controllable-Minecarts.patch index 0532c5066..4da47092c 100644 --- a/patches/server/0050-Controllable-Minecarts.patch +++ b/patches/server/0050-Controllable-Minecarts.patch @@ -22,7 +22,7 @@ index 2291135eaef64c403183724cb6e413cd7e472672..bc61aaff65a7dc1e7534452b285953b8 super(i, j, k); } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 594e2735cd58a0a19446369b34ba8282f2af2130..b9af6b392d4c7e83263d763eb86e77a407ca5ebf 100644 +index f7bdd5f2a35c0abc018732d7fd920b162cb0a2d1..15518abcc1ec5f9a56d1992c852d180c9937fc69 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -98,9 +98,9 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/server/0051-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0051-Disable-loot-drops-on-death-by-cramming.patch index b4dd8125e..73ead41fd 100644 --- a/patches/server/0051-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0051-Disable-loot-drops-on-death-by-cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index b9af6b392d4c7e83263d763eb86e77a407ca5ebf..9373b7123eb4f108a96638c3814d50a47426a049 100644 +index 15518abcc1ec5f9a56d1992c852d180c9937fc69..39342dd0bb7d79167310d61b629718b150595614 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -1490,8 +1490,10 @@ public abstract class EntityLiving extends Entity { +@@ -1493,8 +1493,10 @@ public abstract class EntityLiving extends Entity { this.dropInventory(); // CraftBukkit - from below if (this.cW() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { diff --git a/patches/server/0055-Fix-the-dead-lagging-the-server.patch b/patches/server/0055-Fix-the-dead-lagging-the-server.patch index ddf469e43..a394260f1 100644 --- a/patches/server/0055-Fix-the-dead-lagging-the-server.patch +++ b/patches/server/0055-Fix-the-dead-lagging-the-server.patch @@ -17,10 +17,10 @@ index bcd70f3d871ef8ef957fde3bb86c5ae29dce3d2f..01cb91589912e1d3e4b1edf9cdc8fabf public void f(double d0, double d1, double d2) { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 9373b7123eb4f108a96638c3814d50a47426a049..d774548cf872296384b1fd6317cedbd9a73f87d0 100644 +index 39342dd0bb7d79167310d61b629718b150595614..7bffafb7b2b6124b8ca1400e99fa5973e96793f2 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2489,7 +2489,7 @@ public abstract class EntityLiving extends Entity { +@@ -2492,7 +2492,7 @@ public abstract class EntityLiving extends Entity { } } diff --git a/patches/server/0062-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch b/patches/server/0062-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch index b907456d5..f695f5243 100644 --- a/patches/server/0062-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch +++ b/patches/server/0062-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entities pick up loot bypass mob-griefing gamerule diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index b281ca841b2b7b51add3409318e2b92deb51eeda..23d5d1f0a5c7eb5ed04ccf1724354fe8162e75cf 100644 +index fba53ad6792236f0282279283570ffbd6d666f19..815dd2b5ab90fd95da72bf6a3b742e0ff9fd1670 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -544,7 +544,7 @@ public abstract class EntityInsentient extends EntityLiving { diff --git a/patches/server/0065-Allow-leashing-villagers.patch b/patches/server/0065-Allow-leashing-villagers.patch index b2e09fa84..ac768fc98 100644 --- a/patches/server/0065-Allow-leashing-villagers.patch +++ b/patches/server/0065-Allow-leashing-villagers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow leashing villagers diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 23d5d1f0a5c7eb5ed04ccf1724354fe8162e75cf..23eb697f3dc115405c42f625a00f7d802adfa962 100644 +index 815dd2b5ab90fd95da72bf6a3b742e0ff9fd1670..d818f46046f0580bd453f99bc7ddeb339f8f106e 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java -@@ -1147,6 +1147,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1145,6 +1145,7 @@ public abstract class EntityInsentient extends EntityLiving { if (!this.isAlive()) { return EnumInteractionResult.PASS; } else if (this.getLeashHolder() == entityhuman) { diff --git a/patches/server/0073-Dispenser-curse-of-binding-protection.patch b/patches/server/0073-Dispenser-curse-of-binding-protection.patch index 90d3827be..46f1ee9f5 100644 --- a/patches/server/0073-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0073-Dispenser-curse-of-binding-protection.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dispenser curse of binding protection diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 23eb697f3dc115405c42f625a00f7d802adfa962..7a40f0864677e54c3a0eca6dcb9a115864edfbbd 100644 +index d818f46046f0580bd453f99bc7ddeb339f8f106e..64ed97cdbddfb2b823e87392639f1d063016541a 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -994,6 +994,13 @@ public abstract class EntityInsentient extends EntityLiving { diff --git a/patches/server/0079-Implement-elytra-settings.patch b/patches/server/0079-Implement-elytra-settings.patch index cccf89763..b54f5aff1 100644 --- a/patches/server/0079-Implement-elytra-settings.patch +++ b/patches/server/0079-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index d774548cf872296384b1fd6317cedbd9a73f87d0..92095d28bfdcf309585b5684be3b880591b7d18c 100644 +index 7bffafb7b2b6124b8ca1400e99fa5973e96793f2..93512ebabf8ab4626dea50d7a3e80fa3333a1e91 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2848,7 +2848,16 @@ public abstract class EntityLiving extends Entity { +@@ -2851,7 +2851,16 @@ public abstract class EntityLiving extends Entity { if (itemstack.getItem() == Items.ELYTRA && ItemElytra.d(itemstack)) { flag = true; if (!this.world.isClientSide && (this.be + 1) % 20 == 0) { diff --git a/patches/server/0089-Entity-lifespan.patch b/patches/server/0089-Entity-lifespan.patch index fbfe446e2..1b5376e17 100644 --- a/patches/server/0089-Entity-lifespan.patch +++ b/patches/server/0089-Entity-lifespan.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 7a40f0864677e54c3a0eca6dcb9a115864edfbbd..1d5d87e61946c674f61541455cf54018bfca1ecb 100644 +index 64ed97cdbddfb2b823e87392639f1d063016541a..9c7d2d312549548003f2b6c534cc7a68e3946a84 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -53,7 +53,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -82,7 +82,7 @@ index 7a40f0864677e54c3a0eca6dcb9a115864edfbbd..1d5d87e61946c674f61541455cf54018 } @Override -@@ -1544,7 +1576,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1542,7 +1574,7 @@ public abstract class EntityInsentient extends EntityLiving { this.a((EntityLiving) this, entity); this.z(entity); } diff --git a/patches/server/0090-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0090-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 743021016..0ad3d3feb 100644 --- a/patches/server/0090-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0090-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 92095d28bfdcf309585b5684be3b880591b7d18c..e2635413da43f4afc412c0443ab99bc3aaa0ca33 100644 +index 93512ebabf8ab4626dea50d7a3e80fa3333a1e91..ef1c5fc24c2ffd2939e9fc10eb15ef96d5f0a3ca 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -277,6 +277,7 @@ public abstract class EntityLiving extends Entity { +@@ -280,6 +280,7 @@ public abstract class EntityLiving extends Entity { double d1 = this.world.getWorldBorder().getDamageAmount(); if (d1 > 0.0D) { diff --git a/patches/server/0097-Totems-work-in-inventory.patch b/patches/server/0097-Totems-work-in-inventory.patch index 8084a9ed3..6d37c13dd 100644 --- a/patches/server/0097-Totems-work-in-inventory.patch +++ b/patches/server/0097-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index e2635413da43f4afc412c0443ab99bc3aaa0ca33..e37f37412b6bc24fa7a64823c30bd697731294d9 100644 +index ef1c5fc24c2ffd2939e9fc10eb15ef96d5f0a3ca..64580ce8dc1d0be61615a47c2fb3a6b0fecc93e6 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -1324,6 +1324,19 @@ public abstract class EntityLiving extends Entity { +@@ -1327,6 +1327,19 @@ public abstract class EntityLiving extends Entity { } } diff --git a/patches/server/0110-Ridables.patch b/patches/server/0110-Ridables.patch index fcc15e774..6718c06e6 100644 --- a/patches/server/0110-Ridables.patch +++ b/patches/server/0110-Ridables.patch @@ -717,7 +717,7 @@ index 776f3d25a6eeb5e97667dd06c062d1045d1afa81..2e1f2dec17e7761b6534f29bbec813d1 return EntitySpider.eK().a(GenericAttributes.MAX_HEALTH, 12.0D); } diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index 11a612fa390cb0acf37fb84c5d5b6ea926dabad3..a16ecd7edcd0ed081fff254d1f1429b32a4dcfb3 100644 +index 8fb5d5c75e79a81ab46af3fbb96ebc41804113c4..ee59a9f272a9caebec8f2329e1e4b22ddd27a0f9 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -18,6 +18,16 @@ public class EntityChicken extends EntityAnimal { @@ -735,9 +735,9 @@ index 11a612fa390cb0acf37fb84c5d5b6ea926dabad3..a16ecd7edcd0ed081fff254d1f1429b3 + } + @Override - protected void initAttributes(World world) { - if (world != null) { -@@ -31,6 +41,7 @@ public class EntityChicken extends EntityAnimal { + protected void initAttributes() { + if (world.purpurConfig.chickenRetaliate) { +@@ -29,6 +39,7 @@ public class EntityChicken extends EntityAnimal { @Override protected void initPathfinder() { this.goalSelector.a(0, new PathfinderGoalFloat(this)); @@ -745,7 +745,7 @@ index 11a612fa390cb0acf37fb84c5d5b6ea926dabad3..a16ecd7edcd0ed081fff254d1f1429b3 //this.goalSelector.a(1, new PathfinderGoalPanic(this, 1.4D)); // Purpur - moved down this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, EntityChicken.bv)); -@@ -41,6 +52,7 @@ public class EntityChicken extends EntityAnimal { +@@ -39,6 +50,7 @@ public class EntityChicken extends EntityAnimal { // Purpur start if (world.purpurConfig.chickenRetaliate) { this.goalSelector.a(1, new PathfinderGoalMeleeAttack(this, 1.0D, false)); @@ -1770,7 +1770,7 @@ index a67611c4f9271c116a795ee598412f25396fee88..216506a7b1f97b776ecd4e24f5b2afaf if (this.j-- <= 0) { this.j += this.i.getRandom().nextInt(5) + 2; diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index cf899bb6a5bd9d913ea90facdd5f3cc0dda1e9d2..93fcf801aa7a34ba8b4b72d87c2e093cbcef97b8 100644 +index 565c938d879940d8e12fe320ea8524d2cf679c1f..5e99767f45f7ba7db80f5b51810689e059b5cef5 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -11,16 +11,28 @@ public class EntityGiantZombie extends EntityMonster { @@ -2163,7 +2163,7 @@ index 96662fce02193496b4d91578d355932493d8e31e..9963cef9298eb6d3e2ee6a24d9b1998e + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index a9dcf6875efda502d174c74bd17026a5c8f0fdcb..44c006bb10f36aff90cb07516d40a1b0d9bd24f5 100644 +index c57bf5091430709778dc21d70c8a32819c9d6639..b0a5c36d1132e2558a1fefbd9f8dd26448400086 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java @@ -20,6 +20,16 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -2181,9 +2181,9 @@ index a9dcf6875efda502d174c74bd17026a5c8f0fdcb..44c006bb10f36aff90cb07516d40a1b0 + } + @Override - protected void initAttributes(World world) { - if (world != null) { -@@ -35,6 +45,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan + protected void initAttributes() { + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.world.purpurConfig.illusionerMovementSpeed); +@@ -32,6 +42,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan protected void initPathfinder() { super.initPathfinder(); this.goalSelector.a(0, new PathfinderGoalFloat(this)); @@ -2191,7 +2191,7 @@ index a9dcf6875efda502d174c74bd17026a5c8f0fdcb..44c006bb10f36aff90cb07516d40a1b0 this.goalSelector.a(1, new EntityIllagerWizard.b()); this.goalSelector.a(4, new EntityIllagerIllusioner.b()); this.goalSelector.a(5, new EntityIllagerIllusioner.a()); -@@ -42,6 +53,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan +@@ -39,6 +50,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); this.goalSelector.a(9, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 3.0F, 1.0F)); this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityInsentient.class, 8.0F)); @@ -2200,7 +2200,7 @@ index a9dcf6875efda502d174c74bd17026a5c8f0fdcb..44c006bb10f36aff90cb07516d40a1b0 this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)).a(300)); this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)).a(300)); diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 1d5d87e61946c674f61541455cf54018bfca1ecb..80589799ab08228d9e49afdf4570fa781092e5c5 100644 +index 9c7d2d312549548003f2b6c534cc7a68e3946a84..ace2bb69fcde9af2a1691a25ae945bfe44ce117b 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -29,7 +29,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -2256,7 +2256,7 @@ index 1d5d87e61946c674f61541455cf54018bfca1ecb..80589799ab08228d9e49afdf4570fa78 public void v(float f) { this.aR = f; } -@@ -1250,7 +1253,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1248,7 +1251,7 @@ public abstract class EntityInsentient extends EntityLiving { protected void a(EntityHuman entityhuman, EntityInsentient entityinsentient) {} protected EnumInteractionResult b(EntityHuman entityhuman, EnumHand enumhand) { @@ -2265,7 +2265,7 @@ index 1d5d87e61946c674f61541455cf54018bfca1ecb..80589799ab08228d9e49afdf4570fa78 } public boolean ev() { -@@ -1622,4 +1625,54 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1620,4 +1623,54 @@ public abstract class EntityInsentient extends EntityLiving { this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit this.unleash(true, false); } @@ -2372,10 +2372,10 @@ index bdff2368836dca230a6622a205d5772834afc6ee..9ee03b233b71d1b4b85a9a5e1f0ea9fe float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index e37f37412b6bc24fa7a64823c30bd697731294d9..84e37e38026e1fd5ec626c7c8b81972cd5ed2ea4 100644 +index 64580ce8dc1d0be61615a47c2fb3a6b0fecc93e6..418744b166571973a02dd6a31f0cc08376980076 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -459,7 +459,7 @@ public abstract class EntityLiving extends Entity { +@@ -462,7 +462,7 @@ public abstract class EntityLiving extends Entity { @Override public boolean bt() { @@ -2384,7 +2384,7 @@ index e37f37412b6bc24fa7a64823c30bd697731294d9..84e37e38026e1fd5ec626c7c8b81972c } protected void cU() { -@@ -2191,7 +2191,7 @@ public abstract class EntityLiving extends Entity { +@@ -2194,7 +2194,7 @@ public abstract class EntityLiving extends Entity { return 0.42F * this.getBlockJumpFactor(); } @@ -2393,7 +2393,7 @@ index e37f37412b6bc24fa7a64823c30bd697731294d9..84e37e38026e1fd5ec626c7c8b81972c float f = this.dJ(); if (this.hasEffect(MobEffects.JUMP)) { -@@ -2440,10 +2440,12 @@ public abstract class EntityLiving extends Entity { +@@ -2443,10 +2443,12 @@ public abstract class EntityLiving extends Entity { return this.onGround ? this.dN() * (0.21600002F / (f * f * f)) : this.aE; } @@ -2406,7 +2406,7 @@ index e37f37412b6bc24fa7a64823c30bd697731294d9..84e37e38026e1fd5ec626c7c8b81972c public void q(float f) { this.bu = f; } -@@ -2843,6 +2845,20 @@ public abstract class EntityLiving extends Entity { +@@ -2846,6 +2848,20 @@ public abstract class EntityLiving extends Entity { } } // Purpur end diff --git a/patches/server/0115-Customizable-wither-health-and-healing.patch b/patches/server/0115-Customizable-wither-health-and-healing.patch index a0aefe02b..357c023ec 100644 --- a/patches/server/0115-Customizable-wither-health-and-healing.patch +++ b/patches/server/0115-Customizable-wither-health-and-healing.patch @@ -6,24 +6,22 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index f68cf834aa65cc4bbb1eb9901586395d41770955..e8cc3af606f4874b6f32369f7f211f480670868b 100644 +index f68cf834aa65cc4bbb1eb9901586395d41770955..71b6fc480617f040029b2201f24d05affeb90b70 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java -@@ -145,6 +145,13 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -145,6 +145,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { skull.setPositionRaw(headX, headY, headZ); world.addEntity(skull); } + -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.witherMaxHealth); -+ //setHealth(getMaxHealth()); // do NOT do this for wither! health grows when first spawned -+ } ++ @Override ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.witherMaxHealth); + } // Purpur end @Override -@@ -348,7 +355,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -348,7 +353,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.setInvul(i); if (this.ticksLived % 10 == 0) { @@ -32,7 +30,7 @@ index f68cf834aa65cc4bbb1eb9901586395d41770955..e8cc3af606f4874b6f32369f7f211f48 } } else { -@@ -457,8 +464,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -457,8 +462,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } } @@ -45,14 +43,6 @@ index f68cf834aa65cc4bbb1eb9901586395d41770955..e8cc3af606f4874b6f32369f7f211f48 } //this.bossBattle.setProgress(this.getHealth() / this.getMaxHealth()); // Paper - Moved down -@@ -473,6 +482,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { - public void beginSpawnSequence() { - this.setInvul(220); - this.setHealth(this.getMaxHealth() / 3.0F); -+ initAttributes(this.world); // Purpur - building the wither with soul_sand + wither_skeleton_skulls does not call prepare, so we need to call this manually - } - - @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 1025b5daef29da23f1a80c1c0a1ef0eeee18384e..0f2e0e779198765a7dfa2d4c56b8b2ff8fb08f96 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java diff --git a/patches/server/0133-Make-animal-breeding-times-configurable.patch b/patches/server/0133-Make-animal-breeding-times-configurable.patch index 897148e6d..7df041124 100644 --- a/patches/server/0133-Make-animal-breeding-times-configurable.patch +++ b/patches/server/0133-Make-animal-breeding-times-configurable.patch @@ -62,11 +62,11 @@ index 05929d5c539a738e6b6e8d32d9b0f843a665f4f6..a6ce4ca27c9670655a8f66bfc624f126 public MinecraftKey eU() { diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index a16ecd7edcd0ed081fff254d1f1429b32a4dcfb3..26f7833496ceaf5c6f67ac7fb276e1f82e51de07 100644 +index ee59a9f272a9caebec8f2329e1e4b22ddd27a0f9..2e1dc047459889aea85a79eaa04e8fe1a80e5b9e 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java -@@ -36,6 +36,11 @@ public class EntityChicken extends EntityAnimal { - } +@@ -34,6 +34,11 @@ public class EntityChicken extends EntityAnimal { + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); } } + diff --git a/patches/server/0134-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0134-Apply-display-names-from-item-forms-of-entities-to-e.patch index e0014c2b4..b180ffc97 100644 --- a/patches/server/0134-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0134-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -52,10 +52,10 @@ index d53bbe31694c2d88939332691cdf145c46099e22..bc558c54c9e74e2158a5835173e6068c switch (this.getType()) { case OAK: diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 80589799ab08228d9e49afdf4570fa781092e5c5..2fef6967323145049a45d8cc44d50c788fb3e8be 100644 +index ace2bb69fcde9af2a1691a25ae945bfe44ce117b..2169de3c4118fca7048f9939a9570939cd287a34 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java -@@ -1368,7 +1368,13 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1366,7 +1366,13 @@ public abstract class EntityInsentient extends EntityLiving { this.by = null; if (!this.world.isClientSide && flag1) { this.forceDrops = true; // CraftBukkit @@ -70,7 +70,7 @@ index 80589799ab08228d9e49afdf4570fa781092e5c5..2fef6967323145049a45d8cc44d50c78 this.forceDrops = false; // CraftBukkit } -@@ -1444,7 +1450,13 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1442,7 +1448,13 @@ public abstract class EntityInsentient extends EntityLiving { } if (this.ticksLived > 100) { diff --git a/patches/server/0145-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0145-Changeable-Mob-Left-Handed-Chance.patch index 80dd0a420..649bf18c3 100644 --- a/patches/server/0145-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0145-Changeable-Mob-Left-Handed-Chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 2fef6967323145049a45d8cc44d50c788fb3e8be..e2d7c20e66b5a6c3d6037ee3e15d1ce676c29c97 100644 +index 2169de3c4118fca7048f9939a9570939cd287a34..04b1c82da8c5a76c302a988a68fd9fbfd93310c2 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1135,7 +1135,7 @@ public abstract class EntityInsentient extends EntityLiving { diff --git a/patches/server/0157-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0157-Configurable-chance-for-wolves-to-spawn-rabid.patch index 03ee5a517..5712822f8 100644 --- a/patches/server/0157-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0157-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,10 +7,10 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 84e37e38026e1fd5ec626c7c8b81972cd5ed2ea4..32cc85bdef9594df2d23b1c469d0314ce414a06a 100644 +index 418744b166571973a02dd6a31f0cc08376980076..ac14c0455cc92ea9f6af1d5451062ecab9980c69 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2091,6 +2091,7 @@ public abstract class EntityLiving extends Entity { +@@ -2094,6 +2094,7 @@ public abstract class EntityLiving extends Entity { } } diff --git a/patches/server/0159-Configurable-entity-base-attributes.patch b/patches/server/0159-Configurable-entity-base-attributes.patch index 3b25f05ef..952e4ce62 100644 --- a/patches/server/0159-Configurable-entity-base-attributes.patch +++ b/patches/server/0159-Configurable-entity-base-attributes.patch @@ -5,431 +5,363 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index bdf4e798ac8ca27edebd0122b894d15a76ecb9d0..65313c2678b1ca480951c5ce4c9799e5e7b6d4eb 100644 +index bdf4e798ac8ca27edebd0122b894d15a76ecb9d0..7718ec8ad3c1833e0bcc713c2e96e054e87453ad 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java -@@ -54,6 +54,14 @@ public class EntityBat extends EntityAmbient { +@@ -54,6 +54,18 @@ public class EntityBat extends EntityAmbient { setMot(mot.a(0.9D)); } } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.batMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.batMaxHealth); ++ this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(this.world.purpurConfig.batFollowRange); ++ this.getAttributeInstance(GenericAttributes.KNOCKBACK_RESISTANCE).setValue(this.world.purpurConfig.batKnockbackResistance); ++ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.world.purpurConfig.batMovementSpeed); ++ this.getAttributeInstance(GenericAttributes.FLYING_SPEED).setValue(this.world.purpurConfig.batFlyingSpeed); ++ this.getAttributeInstance(GenericAttributes.ARMOR).setValue(this.world.purpurConfig.batArmor); ++ this.getAttributeInstance(GenericAttributes.ARMOR_TOUGHNESS).setValue(this.world.purpurConfig.batArmorToughness); ++ this.getAttributeInstance(GenericAttributes.ATTACK_KNOCKBACK).setValue(this.world.purpurConfig.batAttackKnockback); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityBee.java b/src/main/java/net/minecraft/server/EntityBee.java -index ded4e10f5082fb5aa25368d9035affba287c3345..5ea6430ae5cbbdf7972f5addccd96554ba8412e8 100644 +index ded4e10f5082fb5aa25368d9035affba287c3345..bef806bfc60792a990209b57f3cd4b9da0c24acc 100644 --- a/src/main/java/net/minecraft/server/EntityBee.java +++ b/src/main/java/net/minecraft/server/EntityBee.java -@@ -105,6 +105,14 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -105,6 +105,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB int getPurpurBreedTime() { return this.world.purpurConfig.beeBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.beeMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.beeMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java -index dcfad16e06450068d5801fc002c9650102dbf995..ec4a790e48e7df3e36558f2ba49ae00b8b3af7f8 100644 +index dcfad16e06450068d5801fc002c9650102dbf995..90b90fa33b39020189a1d4a5826fa3ab720488cd 100644 --- a/src/main/java/net/minecraft/server/EntityBlaze.java +++ b/src/main/java/net/minecraft/server/EntityBlaze.java -@@ -45,6 +45,14 @@ public class EntityBlaze extends EntityMonster { +@@ -45,6 +45,11 @@ public class EntityBlaze extends EntityMonster { setMot(mot.a(0.9D)); } } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.blazeMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.blazeMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityCat.java b/src/main/java/net/minecraft/server/EntityCat.java -index a6ce4ca27c9670655a8f66bfc624f12659613379..a30e6a456ce6fe4af58a1995bcd919b6010579dc 100644 +index a6ce4ca27c9670655a8f66bfc624f12659613379..16623cc1670422b5b1fa1cabb24a4052358de0fc 100644 --- a/src/main/java/net/minecraft/server/EntityCat.java +++ b/src/main/java/net/minecraft/server/EntityCat.java -@@ -63,6 +63,14 @@ public class EntityCat extends EntityTameableAnimal { +@@ -63,6 +63,11 @@ public class EntityCat extends EntityTameableAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.catBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.catMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.catMaxHealth); + } // Purpur end public MinecraftKey eU() { diff --git a/src/main/java/net/minecraft/server/EntityCaveSpider.java b/src/main/java/net/minecraft/server/EntityCaveSpider.java -index 2e1f2dec17e7761b6534f29bbec813d135250e4f..75a6ca3469d9529eabf5b5f62f242d00aada2b85 100644 +index 2e1f2dec17e7761b6534f29bbec813d135250e4f..adbd665d455dfc1672a5bdf1b3b380d535835cd7 100644 --- a/src/main/java/net/minecraft/server/EntityCaveSpider.java +++ b/src/main/java/net/minecraft/server/EntityCaveSpider.java -@@ -18,6 +18,14 @@ public class EntityCaveSpider extends EntitySpider { +@@ -18,6 +18,11 @@ public class EntityCaveSpider extends EntitySpider { public boolean isRidableInWater() { return world.purpurConfig.caveSpiderRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.caveSpiderMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.caveSpiderMaxHealth); + } // Purpur end public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index 26f7833496ceaf5c6f67ac7fb276e1f82e51de07..23c9bb43ee4bcd5ad1bc8fe26a7143ebd76532bb 100644 +index 2e1dc047459889aea85a79eaa04e8fe1a80e5b9e..18aed81061a4033627214a65d38cd9509ed0f8e9 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java -@@ -34,6 +34,8 @@ public class EntityChicken extends EntityAnimal { - if (world.purpurConfig.chickenRetaliate) { - this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); - } -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.chickenMaxHealth); -+ setHealth(getMaxHealth()); +@@ -33,6 +33,7 @@ public class EntityChicken extends EntityAnimal { + if (world.purpurConfig.chickenRetaliate) { + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); } ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.chickenMaxHealth); } + @Override diff --git a/src/main/java/net/minecraft/server/EntityCod.java b/src/main/java/net/minecraft/server/EntityCod.java -index 039fae4c29648afa85ea1b27d82cfe51c4165315..2cf4faff8274556e7a377fe3ea193f93e9af54de 100644 +index 039fae4c29648afa85ea1b27d82cfe51c4165315..024a5ffa878d6e6749c1dd95e94ec6d65cf1d629 100644 --- a/src/main/java/net/minecraft/server/EntityCod.java +++ b/src/main/java/net/minecraft/server/EntityCod.java -@@ -16,6 +16,14 @@ public class EntityCod extends EntityFishSchool { +@@ -16,6 +16,11 @@ public class EntityCod extends EntityFishSchool { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.codMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.codMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java -index 63497ca0266073dc0a16b7dc22641d08c3eaf400..5924886db49a39206b9814f951798f119a7f41d7 100644 +index 63497ca0266073dc0a16b7dc22641d08c3eaf400..951531d65709ee3064371cbf4b3a9831a47b12aa 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java -@@ -26,6 +26,14 @@ public class EntityCow extends EntityAnimal { +@@ -26,6 +26,11 @@ public class EntityCow extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.cowBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.cowMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.cowMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index d186f257fa3bc613be7ec79cd6a6ff2e747cba78..a2448718de61fc3762af69de5ee35cf1a507fcac 100644 +index d186f257fa3bc613be7ec79cd6a6ff2e747cba78..b48610fefc8c72922a00dbab861de7b34d5ec1cf 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java -@@ -96,6 +96,14 @@ public class EntityCreeper extends EntityMonster { +@@ -96,6 +96,11 @@ public class EntityCreeper extends EntityMonster { } return getForward() == 0 && getStrafe() == 0; // do not jump if standing still } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.creeperMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.creeperMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityDolphin.java b/src/main/java/net/minecraft/server/EntityDolphin.java -index 9d5d143a997b74e0777bb79bf14d341ad5340db9..ff8f4ddfb160ed338c4378d0145bf8696c915dee 100644 +index 9d5d143a997b74e0777bb79bf14d341ad5340db9..82021ba825d6a36191174acf83d109a5c74f6db8 100644 --- a/src/main/java/net/minecraft/server/EntityDolphin.java +++ b/src/main/java/net/minecraft/server/EntityDolphin.java -@@ -63,6 +63,14 @@ public class EntityDolphin extends EntityWaterAnimal { +@@ -63,6 +63,11 @@ public class EntityDolphin extends EntityWaterAnimal { } return false; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.dolphinMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.dolphinMaxHealth); + } // Purpur end @Nullable diff --git a/src/main/java/net/minecraft/server/EntityDrowned.java b/src/main/java/net/minecraft/server/EntityDrowned.java -index 638efc67d66001ee085957d4698f51a7daac77fc..816c15650561f981522777a9113df448e01a8f15 100644 +index 638efc67d66001ee085957d4698f51a7daac77fc..0312ebee986e6da1956464481b4a7f8a5c15e3e0 100644 --- a/src/main/java/net/minecraft/server/EntityDrowned.java +++ b/src/main/java/net/minecraft/server/EntityDrowned.java -@@ -46,6 +46,14 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { +@@ -46,6 +46,11 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { public boolean jockeyTryExistingChickens() { return world.purpurConfig.drownedJockeyTryExistingChickens; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.drownedMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.drownedMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index 17a9217ed2d1677371d12b4ab0552378cd71652f..fd1e966d1a50837daa68d8a6c43897355996ae1a 100644 +index 17a9217ed2d1677371d12b4ab0552378cd71652f..8e16ae4be41a0f20b057b70e9ef255c548a36f08 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java -@@ -97,6 +97,14 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { +@@ -97,6 +97,11 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { public double getMaxY() { return world.purpurConfig.enderDragonMaxY; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.enderDragonMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.enderDragonMaxHealth); + } // Purpur end public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index acb2b3ed04ea0bf19335415310ce22cd076dd92a..cf3a607ace5965e5d9324a9163c7c34b8996be7e 100644 +index acb2b3ed04ea0bf19335415310ce22cd076dd92a..dfe6175ec8107f684ea1567d932d11de06c46372 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java -@@ -40,6 +40,14 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { +@@ -40,6 +40,11 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { public boolean isRidableInWater() { return world.purpurConfig.endermanRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.endermanMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.endermanMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityEndermite.java b/src/main/java/net/minecraft/server/EntityEndermite.java -index 7eef7f523a17434b38492006526920a955fc9120..389ed1cc1b3547f470071cdde8088af57b49f121 100644 +index 7eef7f523a17434b38492006526920a955fc9120..3f34ebc1c4ac6f6f0b883c3e4c768007c24fc194 100644 --- a/src/main/java/net/minecraft/server/EntityEndermite.java +++ b/src/main/java/net/minecraft/server/EntityEndermite.java -@@ -22,6 +22,14 @@ public class EntityEndermite extends EntityMonster { +@@ -22,6 +22,11 @@ public class EntityEndermite extends EntityMonster { public boolean isRidableInWater() { return world.purpurConfig.endermiteRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.endermiteMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.endermiteMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java -index c75dc75611991028e9de6db7c57304e913251a6b..194ed8fc149c96833a88bfdca4e42618c125168f 100644 +index c75dc75611991028e9de6db7c57304e913251a6b..f0ecc6e6ef5843714a6423af5d6619856ef23977 100644 --- a/src/main/java/net/minecraft/server/EntityEvoker.java +++ b/src/main/java/net/minecraft/server/EntityEvoker.java -@@ -22,6 +22,14 @@ public class EntityEvoker extends EntityIllagerWizard { +@@ -22,6 +22,11 @@ public class EntityEvoker extends EntityIllagerWizard { public boolean isRidableInWater() { return world.purpurConfig.evokerRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.evokerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.evokerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index e87f5aeb97fc35ff2b3464f31a2ec18432774cd4..2f924721fc1b8937de92b7188bd7fd3cc689f457 100644 +index e87f5aeb97fc35ff2b3464f31a2ec18432774cd4..c63878087ff0414602c4e7ed768a62f8e4899a3a 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java -@@ -91,6 +91,14 @@ public class EntityFox extends EntityAnimal { +@@ -91,6 +91,11 @@ public class EntityFox extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.foxBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.foxMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.foxMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityGhast.java b/src/main/java/net/minecraft/server/EntityGhast.java -index 216506a7b1f97b776ecd4e24f5b2afaf5b79ec2d..a6a0d1ffe6a0cf5e01a6a0145e5bb866365e032d 100644 +index 216506a7b1f97b776ecd4e24f5b2afaf5b79ec2d..2c0148229283f95bed3c8f33cc02a31d6f682191 100644 --- a/src/main/java/net/minecraft/server/EntityGhast.java +++ b/src/main/java/net/minecraft/server/EntityGhast.java -@@ -41,6 +41,14 @@ public class EntityGhast extends EntityFlying implements IMonster { +@@ -41,6 +41,11 @@ public class EntityGhast extends EntityFlying implements IMonster { setMot(mot.a(0.9D)); } } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.ghastMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.ghastMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityGuardian.java b/src/main/java/net/minecraft/server/EntityGuardian.java -index 0a7f51a2a1cb10438c9364faf3e4adc6322fc787..01a49898a0f4a8d0813784697002b657cdbd245a 100644 +index 0a7f51a2a1cb10438c9364faf3e4adc6322fc787..476f692df79e98779271cc5a395276ab9c755a58 100644 --- a/src/main/java/net/minecraft/server/EntityGuardian.java +++ b/src/main/java/net/minecraft/server/EntityGuardian.java -@@ -46,6 +46,14 @@ public class EntityGuardian extends EntityMonster { +@@ -46,6 +46,11 @@ public class EntityGuardian extends EntityMonster { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.guardianMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.guardianMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityGuardianElder.java b/src/main/java/net/minecraft/server/EntityGuardianElder.java -index f6f882746940c9e049106aa9b41591ba27a608ce..07f6baebb65682fe27deaecad12c66bd38014ab1 100644 +index f6f882746940c9e049106aa9b41591ba27a608ce..7afba8136f9a809e779d9af8c93cda7c0765c095 100644 --- a/src/main/java/net/minecraft/server/EntityGuardianElder.java +++ b/src/main/java/net/minecraft/server/EntityGuardianElder.java -@@ -26,6 +26,14 @@ public class EntityGuardianElder extends EntityGuardian { +@@ -26,6 +26,11 @@ public class EntityGuardianElder extends EntityGuardian { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.elderGuardianMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.elderGuardianMaxHealth); + } // Purpur end public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/server/EntityHoglin.java b/src/main/java/net/minecraft/server/EntityHoglin.java -index a1578aade4a535144b5e40277c902f2e9ab9e940..2fa388776e68f6f0d4d985a451a0a2b05de499fe 100644 +index a1578aade4a535144b5e40277c902f2e9ab9e940..4a3469aca9f9e47d2ea3f3bae6ce77f5f11d6b50 100644 --- a/src/main/java/net/minecraft/server/EntityHoglin.java +++ b/src/main/java/net/minecraft/server/EntityHoglin.java -@@ -35,6 +35,14 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin { +@@ -35,6 +35,11 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin { int getPurpurBreedTime() { return this.world.purpurConfig.hoglinBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.hoglinMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.hoglinMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java -index b19995f962180a44ff388d58a26cc5782d0826e4..839c862a3936ee298ed80b3ed0179ba8b171a60d 100644 +index b19995f962180a44ff388d58a26cc5782d0826e4..005281dbced10fa72ccd62ce63193f91824deaf7 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java -@@ -22,13 +22,30 @@ public class EntityHorse extends EntityHorseAbstract { +@@ -22,6 +22,21 @@ public class EntityHorse extends EntityHorseAbstract { int getPurpurBreedTime() { return this.world.purpurConfig.horseBreedingTicks; } + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.horseMaxHealthMin, world.purpurConfig.horseMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.horseMaxHealthMin, this.world.purpurConfig.horseMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.horseJumpStrengthMin, world.purpurConfig.horseJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.horseJumpStrengthMin, this.world.purpurConfig.horseJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.horseMovementSpeedMin, world.purpurConfig.horseMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.horseMovementSpeedMin, this.world.purpurConfig.horseMovementSpeedMax); + } // Purpur end - @Override - protected void eK() { -- this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue((double) this.fp()); -- this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.fr()); -- this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.fq()); -+ // Purpur start -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); -+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.generateMovementSpeed()); -+ this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.generateJumpStrength()); -+ // Purpur end - } - @Override diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index bb3ebf70f460c459defda833d6f40026321ad638..260b816e0d3c93afeaf8160306fdef0c3c6e12fd 100644 +index bb3ebf70f460c459defda833d6f40026321ad638..4391601b8a9e0b50240e70e85c8084b1762bf716 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -@@ -55,6 +55,30 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -55,6 +55,32 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven public boolean isRidableInWater() { return false; } + -+ @Override -+ public void initAttributes(World world) { -+ setHealth(getMaxHealth()); -+ } -+ + protected double generateMaxHealth(double min, double max) { + if (min == max) return min; + int diff = MathHelper.floor(max - min); @@ -448,16 +380,14 @@ index bb3ebf70f460c459defda833d6f40026321ad638..260b816e0d3c93afeaf8160306fdef0c + if (min == max) return min; + return min + (max - min) * this.random.nextDouble(); + } - // Purpur end - - @Override -@@ -806,6 +830,8 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven - double d2 = this.c(GenericAttributes.MOVEMENT_SPEED) + entityageable.c(GenericAttributes.MOVEMENT_SPEED) + this.fr(); - - entityhorseabstract.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(d2 / 3.0D); + -+ entityhorseabstract.setHealth(entityhorseabstract.getMaxHealth()); // Purpur - } ++ @Override ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); ++ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.generateMovementSpeed()); ++ this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.generateJumpStrength()); ++ } + // Purpur end @Override @@ -863,15 +889,15 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven @@ -479,25 +409,17 @@ index bb3ebf70f460c459defda833d6f40026321ad638..260b816e0d3c93afeaf8160306fdef0c return (0.44999998807907104D + this.random.nextDouble() * 0.3D + this.random.nextDouble() * 0.3D + this.random.nextDouble() * 0.3D) * 0.25D; } -diff --git a/src/main/java/net/minecraft/server/EntityHorseChestedAbstract.java b/src/main/java/net/minecraft/server/EntityHorseChestedAbstract.java -index 3bcebb89c9f9a5243d1d215a47d7d5e64d2529b2..f59c7c7ebc1233319dca0686db06fd5421954b63 100644 ---- a/src/main/java/net/minecraft/server/EntityHorseChestedAbstract.java -+++ b/src/main/java/net/minecraft/server/EntityHorseChestedAbstract.java -@@ -11,7 +11,11 @@ public abstract class EntityHorseChestedAbstract extends EntityHorseAbstract { +@@ -994,7 +1020,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven + groupdataentity = new EntityAgeable.a(0.2F); + } - @Override - protected void eK() { -- this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue((double) this.fp()); -+ // Purpur start -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); -+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.generateMovementSpeed()); -+ this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.generateJumpStrength()); -+ // Purpur end +- this.eK(); ++ //this.eK(); // Purpur + return super.prepare(worldaccess, difficultydamagescaler, enummobspawn, (GroupDataEntity) groupdataentity, nbttagcompound); } - - @Override + } diff --git a/src/main/java/net/minecraft/server/EntityHorseDonkey.java b/src/main/java/net/minecraft/server/EntityHorseDonkey.java -index f6421bb45c5e6adf39fdc085efe2b2f500b76c0c..3394c8dab2b2a91dd301c8a9bd71f0cef1a0c9df 100644 +index f6421bb45c5e6adf39fdc085efe2b2f500b76c0c..5b7c0e9c6cce440ed54a97803a4275eea497935a 100644 --- a/src/main/java/net/minecraft/server/EntityHorseDonkey.java +++ b/src/main/java/net/minecraft/server/EntityHorseDonkey.java @@ -18,6 +18,21 @@ public class EntityHorseDonkey extends EntityHorseChestedAbstract { @@ -507,23 +429,23 @@ index f6421bb45c5e6adf39fdc085efe2b2f500b76c0c..3394c8dab2b2a91dd301c8a9bd71f0ce + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.donkeyMaxHealthMin, world.purpurConfig.donkeyMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.donkeyMaxHealthMin, this.world.purpurConfig.donkeyMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.donkeyJumpStrengthMin, world.purpurConfig.donkeyJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.donkeyJumpStrengthMin, this.world.purpurConfig.donkeyJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.donkeyMovementSpeedMin, world.purpurConfig.donkeyMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.donkeyMovementSpeedMin, this.world.purpurConfig.donkeyMovementSpeedMax); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityHorseMule.java b/src/main/java/net/minecraft/server/EntityHorseMule.java -index 30cbc505d2b0f4d3247edfd271de8daab023eb2a..56476d1b5aa5049b865cd4d0704ec7df83dc91c9 100644 +index 30cbc505d2b0f4d3247edfd271de8daab023eb2a..a32c5347e4d77f5641e4eb3ea4a6ad63d0258bc3 100644 --- a/src/main/java/net/minecraft/server/EntityHorseMule.java +++ b/src/main/java/net/minecraft/server/EntityHorseMule.java @@ -18,7 +18,23 @@ public class EntityHorseMule extends EntityHorseChestedAbstract { @@ -533,17 +455,17 @@ index 30cbc505d2b0f4d3247edfd271de8daab023eb2a..56476d1b5aa5049b865cd4d0704ec7df + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.muleMaxHealthMin, world.purpurConfig.muleMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.muleMaxHealthMin, this.world.purpurConfig.muleMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.muleJumpStrengthMin, world.purpurConfig.muleJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.muleJumpStrengthMin, this.world.purpurConfig.muleJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.muleMovementSpeedMin, world.purpurConfig.muleMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.muleMovementSpeedMin, this.world.purpurConfig.muleMovementSpeedMax); + } // Purpur end + @@ -551,7 +473,7 @@ index 30cbc505d2b0f4d3247edfd271de8daab023eb2a..56476d1b5aa5049b865cd4d0704ec7df protected SoundEffect getSoundAmbient() { super.getSoundAmbient(); diff --git a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java -index 408db52cacbdfbca8af0a6a8e913b0128a3f5a76..68116289a0d89df1b0aec5aa7b0fde5f5657fd1b 100644 +index 408db52cacbdfbca8af0a6a8e913b0128a3f5a76..9eac8f39ddfb598f7dfb90625829e2b10d7ec140 100644 --- a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java +++ b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java @@ -27,6 +27,21 @@ public class EntityHorseSkeleton extends EntityHorseAbstract { @@ -561,36 +483,23 @@ index 408db52cacbdfbca8af0a6a8e913b0128a3f5a76..68116289a0d89df1b0aec5aa7b0fde5f + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.skeletonHorseMaxHealthMin, world.purpurConfig.skeletonHorseMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.skeletonHorseMaxHealthMin, this.world.purpurConfig.skeletonHorseMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.skeletonHorseJumpStrengthMin, world.purpurConfig.skeletonHorseJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.skeletonHorseJumpStrengthMin, this.world.purpurConfig.skeletonHorseJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.skeletonHorseMovementSpeedMin, world.purpurConfig.skeletonHorseMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.skeletonHorseMovementSpeedMin, this.world.purpurConfig.skeletonHorseMovementSpeedMax); + } // Purpur end public static AttributeProvider.Builder eL() { -@@ -35,7 +50,11 @@ public class EntityHorseSkeleton extends EntityHorseAbstract { - - @Override - protected void eK() { -- this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.fq()); -+ // Purpur start -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); -+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.generateMovementSpeed()); -+ this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.generateJumpStrength()); -+ // Purpur end - } - - @Override diff --git a/src/main/java/net/minecraft/server/EntityHorseZombie.java b/src/main/java/net/minecraft/server/EntityHorseZombie.java -index 2121a6c979ba2ea7cb596ca6081750d2f8c7df9f..565e499331564d921c6be56a824750b1bf013a48 100644 +index 2121a6c979ba2ea7cb596ca6081750d2f8c7df9f..c2dc8211b05b4ee2a2b42435f866f8e55295162d 100644 --- a/src/main/java/net/minecraft/server/EntityHorseZombie.java +++ b/src/main/java/net/minecraft/server/EntityHorseZombie.java @@ -23,6 +23,21 @@ public class EntityHorseZombie extends EntityHorseAbstract { @@ -600,55 +509,39 @@ index 2121a6c979ba2ea7cb596ca6081750d2f8c7df9f..565e499331564d921c6be56a824750b1 + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.zombieHorseMaxHealthMin, world.purpurConfig.zombieHorseMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.zombieHorseMaxHealthMin, this.world.purpurConfig.zombieHorseMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.zombieHorseJumpStrengthMin, world.purpurConfig.zombieHorseJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.zombieHorseJumpStrengthMin, this.world.purpurConfig.zombieHorseJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.zombieHorseMovementSpeedMin, world.purpurConfig.zombieHorseMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.zombieHorseMovementSpeedMin, this.world.purpurConfig.zombieHorseMovementSpeedMax); + } // Purpur end public static AttributeProvider.Builder eL() { -@@ -31,7 +46,11 @@ public class EntityHorseZombie extends EntityHorseAbstract { - - @Override - protected void eK() { -- this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.fq()); -+ // Purpur start -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); -+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(this.generateMovementSpeed()); -+ this.getAttributeInstance(GenericAttributes.JUMP_STRENGTH).setValue(this.generateJumpStrength()); -+ // Purpur end - } - - @Override diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java -index 9ee03b233b71d1b4b85a9a5e1f0ea9feb55dfe43..de4a4f4d6a025de5461fcaa68a455d3d47352370 100644 +index 9ee03b233b71d1b4b85a9a5e1f0ea9feb55dfe43..3e224eeb7bdcd0d1c6bd46012366c9d9878dd2a2 100644 --- a/src/main/java/net/minecraft/server/EntityIronGolem.java +++ b/src/main/java/net/minecraft/server/EntityIronGolem.java -@@ -32,6 +32,14 @@ public class EntityIronGolem extends EntityGolem implements IEntityAngerable { +@@ -32,6 +32,11 @@ public class EntityIronGolem extends EntityGolem implements IEntityAngerable { public boolean isRidableInWater() { return world.purpurConfig.ironGolemRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.ironGolemMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.ironGolemMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java -index 3bc6e6df9e0107debe5b15f5f7aad97ad336f304..1405fa71aeeef915fef3737cd8af9b1dbe229aaf 100644 +index 3bc6e6df9e0107debe5b15f5f7aad97ad336f304..f46a7cfe832c8cca83738b71882ff0a9819a7f41 100644 --- a/src/main/java/net/minecraft/server/EntityLlama.java +++ b/src/main/java/net/minecraft/server/EntityLlama.java @@ -62,6 +62,21 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -658,23 +551,23 @@ index 3bc6e6df9e0107debe5b15f5f7aad97ad336f304..1405fa71aeeef915fef3737cd8af9b1d + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.llamaMaxHealthMin, world.purpurConfig.llamaMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.llamaMaxHealthMin, this.world.purpurConfig.llamaMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.llamaJumpStrengthMin, world.purpurConfig.llamaJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.llamaJumpStrengthMin, this.world.purpurConfig.llamaJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.llamaMovementSpeedMin, world.purpurConfig.llamaMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.llamaMovementSpeedMin, this.world.purpurConfig.llamaMovementSpeedMax); + } // Purpur end public void setStrength(int i) { diff --git a/src/main/java/net/minecraft/server/EntityLlamaTrader.java b/src/main/java/net/minecraft/server/EntityLlamaTrader.java -index b6aae5cdee1f8bb842ab8e06c47fb497576b464f..9d94b2d1acc3e4dbc87bf441c8a886f1977bd66b 100644 +index b6aae5cdee1f8bb842ab8e06c47fb497576b464f..665de0c28e052d195bb30ca13e1b129245eff11c 100644 --- a/src/main/java/net/minecraft/server/EntityLlamaTrader.java +++ b/src/main/java/net/minecraft/server/EntityLlamaTrader.java @@ -26,6 +26,21 @@ public class EntityLlamaTrader extends EntityLlama { @@ -684,36 +577,33 @@ index b6aae5cdee1f8bb842ab8e06c47fb497576b464f..9d94b2d1acc3e4dbc87bf441c8a886f1 + + @Override + public float generateMaxHealth() { -+ return (float) generateMaxHealth(world.purpurConfig.llamaTraderMaxHealthMin, world.purpurConfig.llamaTraderMaxHealthMax); ++ return (float) generateMaxHealth(this.world.purpurConfig.llamaTraderMaxHealthMin, this.world.purpurConfig.llamaTraderMaxHealthMax); + } + + @Override + public double generateJumpStrength() { -+ return generateJumpStrength(world.purpurConfig.llamaTraderJumpStrengthMin, world.purpurConfig.llamaTraderJumpStrengthMax); ++ return generateJumpStrength(this.world.purpurConfig.llamaTraderJumpStrengthMin, this.world.purpurConfig.llamaTraderJumpStrengthMax); + } + + @Override + public double generateMovementSpeed() { -+ return generateMovementSpeed(world.purpurConfig.llamaTraderMovementSpeedMin, world.purpurConfig.llamaTraderMovementSpeedMax); ++ return generateMovementSpeed(this.world.purpurConfig.llamaTraderMovementSpeedMin, this.world.purpurConfig.llamaTraderMovementSpeedMax); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityMagmaCube.java b/src/main/java/net/minecraft/server/EntityMagmaCube.java -index cd28463e2bf944d94c121c8f8d6e37221754c168..df8f1ee0f2ff1371ace8d54bdb952da41746848d 100644 +index cd28463e2bf944d94c121c8f8d6e37221754c168..ac24a9de3b2b24bc8afebf54ea0a947fbdac2157 100644 --- a/src/main/java/net/minecraft/server/EntityMagmaCube.java +++ b/src/main/java/net/minecraft/server/EntityMagmaCube.java -@@ -23,6 +23,18 @@ public class EntityMagmaCube extends EntitySlime { +@@ -23,6 +23,15 @@ public class EntityMagmaCube extends EntitySlime { public float getJumpHeight() { return 0.42F * this.getBlockJumpFactor(); // from EntityLiving } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(generateMaxHealth()); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); + } + + public String getMaxHealthEquation() { @@ -723,64 +613,55 @@ index cd28463e2bf944d94c121c8f8d6e37221754c168..df8f1ee0f2ff1371ace8d54bdb952da4 public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index eb1f95d8bae4bc2580849614ba879dd1a8792ecb..aea40b479b3e667447ad13526dc288ad1e0a8c0d 100644 +index eb1f95d8bae4bc2580849614ba879dd1a8792ecb..6c26cd909aff83947108e272700d13e6cc9f2b09 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java -@@ -35,6 +35,14 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -35,6 +35,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable { int getPurpurBreedTime() { return this.world.purpurConfig.mooshroomBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.mooshroomMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.mooshroomMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java -index a5be10dfb0de08b0d97265278b1f11ad1e94b821..2ff3472ac8c19b55bc216d1965cacbb7d26e173d 100644 +index a5be10dfb0de08b0d97265278b1f11ad1e94b821..b8368cf397c26d06f2827a1a786e1f241b810cce 100644 --- a/src/main/java/net/minecraft/server/EntityOcelot.java +++ b/src/main/java/net/minecraft/server/EntityOcelot.java -@@ -31,6 +31,14 @@ public class EntityOcelot extends EntityAnimal { +@@ -31,6 +31,11 @@ public class EntityOcelot extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.ocelotBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.ocelotMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.ocelotMaxHealth); + } // Purpur end private boolean isTrusting() { diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java -index c70180fddb829419b9cc5188766e9130f9b8a94a..3f09d20683383dad32ae58000657ee10a6f49355 100644 +index c70180fddb829419b9cc5188766e9130f9b8a94a..d202624853a1a0a0562b62ad5f3792db0916ae03 100644 --- a/src/main/java/net/minecraft/server/EntityPanda.java +++ b/src/main/java/net/minecraft/server/EntityPanda.java -@@ -70,6 +70,15 @@ public class EntityPanda extends EntityAnimal { +@@ -70,6 +70,12 @@ public class EntityPanda extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.pandaBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.pandaMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.pandaMaxHealth); + updateAttributes(); + } // Purpur end @Override -@@ -542,9 +551,12 @@ public class EntityPanda extends EntityAnimal { +@@ -542,9 +548,12 @@ public class EntityPanda extends EntityAnimal { return this.random.nextBoolean() ? this.getMainGene() : this.getHiddenGene(); } @@ -796,349 +677,295 @@ index c70180fddb829419b9cc5188766e9130f9b8a94a..3f09d20683383dad32ae58000657ee10 if (this.isLazy()) { diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java -index 398e92bf7053c411bd98626efe4261e15256d3ee..2561298446d3a797da31a3de3955fb5ec904e8f0 100644 +index 398e92bf7053c411bd98626efe4261e15256d3ee..d19f8dda87c97de594ad051a6791d99eec581e95 100644 --- a/src/main/java/net/minecraft/server/EntityParrot.java +++ b/src/main/java/net/minecraft/server/EntityParrot.java -@@ -120,6 +120,14 @@ public class EntityParrot extends EntityPerchable implements EntityBird { +@@ -120,6 +120,11 @@ public class EntityParrot extends EntityPerchable implements EntityBird { int getPurpurBreedTime() { return 6000; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.parrotMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.parrotMaxHealth); + } // Purpur end @Nullable diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index f8c3480045e86a18501db223c1b2254cf3298a42..889e388cf13ba0a385ee88a3acd0b813c0776dee 100644 +index f8c3480045e86a18501db223c1b2254cf3298a42..25345d8d585735af407787f2c26fe92674721239 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java -@@ -75,6 +75,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -75,6 +75,11 @@ public class EntityPhantom extends EntityFlying implements IMonster { world.addEntity(flames); return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.phantomMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.phantomMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index 7172e8cabf5b715ae9a1087b0d11e6cee81ea6e4..5152a5e4027c36e0326b86776f3331dd61bc16ad 100644 +index 7172e8cabf5b715ae9a1087b0d11e6cee81ea6e4..61ea94586ec60dae8e7b32d91403fe93f81fc246 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java -@@ -34,6 +34,14 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { +@@ -34,6 +34,11 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { int getPurpurBreedTime() { return this.world.purpurConfig.pigBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.pigMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.pigMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index 57f3358b8dfd53f5b1d2e976d64b809f74bc3ce3..a00e56d1fc78f012751a0913dcc221b7a8f3a019 100644 +index 57f3358b8dfd53f5b1d2e976d64b809f74bc3ce3..75beebb29105b47798f313d72bcba03cd5d07b0a 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java -@@ -46,6 +46,14 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { +@@ -46,6 +46,11 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { public boolean jockeyTryExistingChickens() { return world.purpurConfig.zombifiedPiglinJockeyTryExistingChickens; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.zombifiedPiglinMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.zombifiedPiglinMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPiglin.java b/src/main/java/net/minecraft/server/EntityPiglin.java -index 334e0f73e67ef2db7e680874faf0646995d9de8a..16208564e8316cfe8670dcd59624b8b33883ddb6 100644 +index 334e0f73e67ef2db7e680874faf0646995d9de8a..4849829df1041568a9fcac6d16501fc0606d95da 100644 --- a/src/main/java/net/minecraft/server/EntityPiglin.java +++ b/src/main/java/net/minecraft/server/EntityPiglin.java -@@ -35,6 +35,14 @@ public class EntityPiglin extends EntityPiglinAbstract implements ICrossbow { +@@ -35,6 +35,11 @@ public class EntityPiglin extends EntityPiglinAbstract implements ICrossbow { public boolean isRidableInWater() { return world.purpurConfig.piglinRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.piglinMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.piglinMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPiglinBrute.java b/src/main/java/net/minecraft/server/EntityPiglinBrute.java -index f6b170811159544dc10b91226e4e54b349472c46..b9e965661a869c0b3261c1abb80ced8fbe3bb3d9 100644 +index f6b170811159544dc10b91226e4e54b349472c46..50e42cd8ccd48efe6251a37762953f7f55d18277 100644 --- a/src/main/java/net/minecraft/server/EntityPiglinBrute.java +++ b/src/main/java/net/minecraft/server/EntityPiglinBrute.java -@@ -25,6 +25,14 @@ public class EntityPiglinBrute extends EntityPiglinAbstract { +@@ -25,6 +25,11 @@ public class EntityPiglinBrute extends EntityPiglinAbstract { public boolean isRidableInWater() { return world.purpurConfig.piglinBruteRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.piglinBruteMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.piglinBruteMaxHealth); + } // Purpur end public static AttributeProvider.Builder eS() { diff --git a/src/main/java/net/minecraft/server/EntityPillager.java b/src/main/java/net/minecraft/server/EntityPillager.java -index cf7de0127166f6175a6246062c8664e64959edeb..7c19f0a00a0feb0a412ca0d340ef7194bb212314 100644 +index cf7de0127166f6175a6246062c8664e64959edeb..99b2d50d3958a9341d01108000f2719d271bdfd5 100644 --- a/src/main/java/net/minecraft/server/EntityPillager.java +++ b/src/main/java/net/minecraft/server/EntityPillager.java -@@ -23,6 +23,14 @@ public class EntityPillager extends EntityIllagerAbstract implements ICrossbow { +@@ -23,6 +23,11 @@ public class EntityPillager extends EntityIllagerAbstract implements ICrossbow { public boolean isRidableInWater() { return world.purpurConfig.pillagerRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.pillagerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.pillagerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java -index 40395dd7ea515e51a189d014a3274d15dc1d8ee6..9c72c8f46fe2252239bcd4de078cc9694f2c78de 100644 +index 40395dd7ea515e51a189d014a3274d15dc1d8ee6..f72a72e6f76c3896a80a75aae255081e2f8bb507 100644 --- a/src/main/java/net/minecraft/server/EntityPolarBear.java +++ b/src/main/java/net/minecraft/server/EntityPolarBear.java -@@ -72,6 +72,14 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable { +@@ -72,6 +72,11 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable { int getPurpurBreedTime() { return this.world.purpurConfig.polarBearBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.polarBearMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.polarBearMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityPufferFish.java b/src/main/java/net/minecraft/server/EntityPufferFish.java -index 16a4df27c557e2d4a0fd4f48317307b884c2688c..8c8a4b0d09380e773a35ec0b91001a99bb7416a9 100644 +index 16a4df27c557e2d4a0fd4f48317307b884c2688c..815ba3062e0cbc4400f4dae9f80ce8f6745816f5 100644 --- a/src/main/java/net/minecraft/server/EntityPufferFish.java +++ b/src/main/java/net/minecraft/server/EntityPufferFish.java -@@ -27,6 +27,14 @@ public class EntityPufferFish extends EntityFish { +@@ -27,6 +27,11 @@ public class EntityPufferFish extends EntityFish { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.pufferfishMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.pufferfishMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java -index 654cd036a8e4aa4499f10f528b684e003c469c9a..d13ad3e7796b8fc110b187cd0ebe95467c05f8c5 100644 +index 654cd036a8e4aa4499f10f528b684e003c469c9a..75f42e91449de71e154e2169ea986ff09224e2f0 100644 --- a/src/main/java/net/minecraft/server/EntityRabbit.java +++ b/src/main/java/net/minecraft/server/EntityRabbit.java -@@ -35,6 +35,14 @@ public class EntityRabbit extends EntityAnimal { +@@ -35,6 +35,11 @@ public class EntityRabbit extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.rabbitBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.rabbitMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.rabbitMaxHealth); + } // Purpur end // CraftBukkit start - code from constructor diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java -index a9021458814d84a3a82088f91956db73562c3b10..787b39b8b84a58aa909983092a59fe6c58cca965 100644 +index a9021458814d84a3a82088f91956db73562c3b10..9e21603cb1681cc702084fdeebb6f93754d87bc8 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java +++ b/src/main/java/net/minecraft/server/EntityRavager.java -@@ -39,6 +39,14 @@ public class EntityRavager extends EntityRaider { +@@ -39,6 +39,11 @@ public class EntityRavager extends EntityRaider { double speed = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue(); getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(speed); } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.ravagerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.ravagerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySalmon.java b/src/main/java/net/minecraft/server/EntitySalmon.java -index 6dfcee2c9b658c2c9ee1179e412389934c066d48..67635a40b243c7b9ea4b04d30d92b3a8ea611c5f 100644 +index 6dfcee2c9b658c2c9ee1179e412389934c066d48..475c375bebe2c7211869af28d23db3107b39fe51 100644 --- a/src/main/java/net/minecraft/server/EntitySalmon.java +++ b/src/main/java/net/minecraft/server/EntitySalmon.java -@@ -16,6 +16,14 @@ public class EntitySalmon extends EntityFishSchool { +@@ -16,6 +16,11 @@ public class EntitySalmon extends EntityFishSchool { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.salmonMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.salmonMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java -index 32130c0681501e3e5a47b199f0bb39daac416ed3..6593d171fe99141843c817f3c926b59c8df37ae4 100644 +index 32130c0681501e3e5a47b199f0bb39daac416ed3..d9fe8cf00088dba516ea2bfd7e9590d95c7e7939 100644 --- a/src/main/java/net/minecraft/server/EntitySheep.java +++ b/src/main/java/net/minecraft/server/EntitySheep.java -@@ -71,6 +71,14 @@ public class EntitySheep extends EntityAnimal implements IShearable { +@@ -71,6 +71,11 @@ public class EntitySheep extends EntityAnimal implements IShearable { int getPurpurBreedTime() { return this.world.purpurConfig.sheepBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.sheepMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.sheepMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityShulker.java b/src/main/java/net/minecraft/server/EntityShulker.java -index 30e0e14162cce0c0d228139d4c537243a400ef13..5c0e95a460cec4d146d91564fe9a7af34aa82f30 100644 +index 30e0e14162cce0c0d228139d4c537243a400ef13..d264b9469c891a0b81986d9be12b2cd8510b6015 100644 --- a/src/main/java/net/minecraft/server/EntityShulker.java +++ b/src/main/java/net/minecraft/server/EntityShulker.java -@@ -39,6 +39,14 @@ public class EntityShulker extends EntityGolem implements IMonster { +@@ -39,6 +39,11 @@ public class EntityShulker extends EntityGolem implements IMonster { public boolean isRidableInWater() { return world.purpurConfig.shulkerRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.shulkerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.shulkerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySilverfish.java b/src/main/java/net/minecraft/server/EntitySilverfish.java -index ad428e090089a461283445022b33313520585ac5..dfbd0bff32cf09f0737e272daeb6de6015276620 100644 +index ad428e090089a461283445022b33313520585ac5..6bd00f0b5735d694e370cf85fdbf508c31fc7c27 100644 --- a/src/main/java/net/minecraft/server/EntitySilverfish.java +++ b/src/main/java/net/minecraft/server/EntitySilverfish.java -@@ -21,6 +21,14 @@ public class EntitySilverfish extends EntityMonster { +@@ -21,6 +21,11 @@ public class EntitySilverfish extends EntityMonster { public boolean isRidableInWater() { return world.purpurConfig.silverfishRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.silverfishMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.silverfishMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java -index 3f130e03bf8b235360385fd169d4886ffcfa626a..a1fddbdf1a7fbd27732f0457dfdbf2edab76210e 100644 +index 3f130e03bf8b235360385fd169d4886ffcfa626a..a78e593cbdfa4a74d07fd53c9481534c856d01e6 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java +++ b/src/main/java/net/minecraft/server/EntitySkeleton.java -@@ -16,6 +16,14 @@ public class EntitySkeleton extends EntitySkeletonAbstract { +@@ -16,6 +16,11 @@ public class EntitySkeleton extends EntitySkeletonAbstract { public boolean isRidableInWater() { return world.purpurConfig.skeletonRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.skeletonMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.skeletonMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySkeletonStray.java b/src/main/java/net/minecraft/server/EntitySkeletonStray.java -index d123fb82b635d5271bea9b238554a3011858eeae..bd807058b1607e3086430f651c2095c9c9d8dbaf 100644 +index d123fb82b635d5271bea9b238554a3011858eeae..e34ab9eda7f610456193bdc0495c2ba478917625 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonStray.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonStray.java -@@ -18,6 +18,14 @@ public class EntitySkeletonStray extends EntitySkeletonAbstract { +@@ -18,6 +18,11 @@ public class EntitySkeletonStray extends EntitySkeletonAbstract { public boolean isRidableInWater() { return world.purpurConfig.strayRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.strayMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.strayMaxHealth); + } // Purpur end public static boolean a(EntityTypes entitytypes, WorldAccess worldaccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/server/EntitySkeletonWither.java b/src/main/java/net/minecraft/server/EntitySkeletonWither.java -index 96cb080d940db22330598a8806726088b79a53c1..aea8a191c07939ea0e21725ba0bbf0538064f27e 100644 +index 96cb080d940db22330598a8806726088b79a53c1..ee7805dccac9c4dcdf4fa83ab8041953dccdc83b 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonWither.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonWither.java -@@ -19,6 +19,14 @@ public class EntitySkeletonWither extends EntitySkeletonAbstract { +@@ -19,6 +19,11 @@ public class EntitySkeletonWither extends EntitySkeletonAbstract { public boolean isRidableInWater() { return world.purpurConfig.witherSkeletonRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.witherSkeletonMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.witherSkeletonMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java -index 46026362981ce8a3a9e7d63e16230b5425a5d388..12acdc2840ac1db5a8f1facf4350aa42e369eda1 100644 +index 46026362981ce8a3a9e7d63e16230b5425a5d388..5b4d5fd59760e24c8ed59086b4c6c3153a86967c 100644 --- a/src/main/java/net/minecraft/server/EntitySlime.java +++ b/src/main/java/net/minecraft/server/EntitySlime.java @@ -10,6 +10,7 @@ import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent; @@ -1157,17 +984,14 @@ index 46026362981ce8a3a9e7d63e16230b5425a5d388..12acdc2840ac1db5a8f1facf4350aa42 public float b; public float c; public float d; -@@ -63,6 +65,28 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -63,6 +65,25 @@ public class EntitySlime extends EntityInsentient implements IMonster { } return true; // do not jump() in wasd controller, let vanilla controller handle } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(generateMaxHealth()); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.generateMaxHealth()); + } + + public String getMaxHealthEquation() { @@ -1186,7 +1010,7 @@ index 46026362981ce8a3a9e7d63e16230b5425a5d388..12acdc2840ac1db5a8f1facf4350aa42 // Purpur end @Override -@@ -89,7 +113,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -89,7 +110,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { this.datawatcher.set(EntitySlime.bo, i); this.af(); this.updateSize(); @@ -1196,318 +1020,277 @@ index 46026362981ce8a3a9e7d63e16230b5425a5d388..12acdc2840ac1db5a8f1facf4350aa42 this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue((double) i); if (flag) { diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index e5b3d298f52006f39a36cfdd95097e7b4f89939a..c773c3a9f8ba60d376ca3d321d3d639fba7aa033 100644 +index e5b3d298f52006f39a36cfdd95097e7b4f89939a..319bb68f27f360bb36897c73a68ddeac64b67a6f 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -24,6 +24,14 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -24,6 +24,11 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt public boolean isRidableInWater() { return world.purpurConfig.snowGolemRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.snowGolemMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.snowGolemMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java -index 92d74137877d096970bf9d1b4fc91beabb862b9d..541b3152101f30cf6283a102b2feee8fbbf31668 100644 +index 92d74137877d096970bf9d1b4fc91beabb862b9d..9001ca50b8d9f77b0d997511b70c39b2712df67a 100644 --- a/src/main/java/net/minecraft/server/EntitySpider.java +++ b/src/main/java/net/minecraft/server/EntitySpider.java -@@ -21,6 +21,14 @@ public class EntitySpider extends EntityMonster { +@@ -21,6 +21,11 @@ public class EntitySpider extends EntityMonster { public boolean isRidableInWater() { return world.purpurConfig.spiderRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.spiderMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.spiderMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java -index cee226501690e1c00983a01ac82bc7384f233c3c..d25e28692be688546fbcedb5acdf36e2aed8aec7 100644 +index cee226501690e1c00983a01ac82bc7384f233c3c..918cd774bc7e9f84ddbc1e65b4cb4d661eb127a5 100644 --- a/src/main/java/net/minecraft/server/EntitySquid.java +++ b/src/main/java/net/minecraft/server/EntitySquid.java -@@ -56,6 +56,14 @@ public class EntitySquid extends EntityWaterAnimal { +@@ -56,6 +56,11 @@ public class EntitySquid extends EntityWaterAnimal { public boolean isInWater() { return this.inWater || world.purpurConfig.squidsCanFly; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.squidMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.squidMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityStrider.java b/src/main/java/net/minecraft/server/EntityStrider.java -index 9ab1b5af68774fa4d4da89195fdb91172370d43d..1bb33c4169902cf6eb323f79a5d98a1df5726d96 100644 +index 9ab1b5af68774fa4d4da89195fdb91172370d43d..a0bb64bea373c678c519e3fae8f808fd36e1ee4f 100644 --- a/src/main/java/net/minecraft/server/EntityStrider.java +++ b/src/main/java/net/minecraft/server/EntityStrider.java -@@ -43,6 +43,14 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab +@@ -43,6 +43,11 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab int getPurpurBreedTime() { return this.world.purpurConfig.striderBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.striderMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.striderMaxHealth); + } // Purpur end public static boolean c(EntityTypes entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/server/EntityTropicalFish.java b/src/main/java/net/minecraft/server/EntityTropicalFish.java -index 2c9df356e685ea6f71653023fadcf7e287dcd46e..e52408c5f115d80e91fbde7c73ed308610d02d9d 100644 +index 2c9df356e685ea6f71653023fadcf7e287dcd46e..4bf7b697c18f3d3a1987471571d665ed823c5c77 100644 --- a/src/main/java/net/minecraft/server/EntityTropicalFish.java +++ b/src/main/java/net/minecraft/server/EntityTropicalFish.java -@@ -29,6 +29,14 @@ public class EntityTropicalFish extends EntityFishSchool { +@@ -29,6 +29,11 @@ public class EntityTropicalFish extends EntityFishSchool { public boolean isRidableInWater() { return true; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.tropicalFishMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.tropicalFishMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityTurtle.java b/src/main/java/net/minecraft/server/EntityTurtle.java -index 067f7f28b02b388d56b93b1ed8274799757196e6..dbbf213a46bf71541dd666be251a01942143e327 100644 +index 067f7f28b02b388d56b93b1ed8274799757196e6..0233b65a996111af7bdc10e4da2d70e541411c09 100644 --- a/src/main/java/net/minecraft/server/EntityTurtle.java +++ b/src/main/java/net/minecraft/server/EntityTurtle.java -@@ -42,6 +42,14 @@ public class EntityTurtle extends EntityAnimal { +@@ -42,6 +42,11 @@ public class EntityTurtle extends EntityAnimal { int getPurpurBreedTime() { return this.world.purpurConfig.turtleBreedingTicks; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.turtleMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.turtleMaxHealth); + } // Purpur end public void setHomePos(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index ac75ed3e2e0e0cd8f91de9ff188e173591443b72..6870d175c714d7870072cd1e9825d8e9d8a1588a 100644 +index ac75ed3e2e0e0cd8f91de9ff188e173591443b72..af85dcc824e4ad50eca2ccd957da7b68c05d6b41 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java -@@ -56,6 +56,14 @@ public class EntityVex extends EntityMonster { +@@ -56,6 +56,11 @@ public class EntityVex extends EntityMonster { public boolean b(float f, float f1) { return false; // no fall damage please } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.vexMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.vexMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index ddfbc18722a18f534eb6e3a1a1bf5035102b0d94..387a95a70a68f570af0ae8eab6c3f6bbc9078110 100644 +index ddfbc18722a18f534eb6e3a1a1bf5035102b0d94..08edab66c18200dfea29b52e2825af94119a3415 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -95,6 +95,14 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -95,6 +95,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.villagerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.villagerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 3ea66955df304fd13aac2cf9bb93ea156558ae57..63b88871674f7d25f9dc30f6949cd82382ed9129 100644 +index 3ea66955df304fd13aac2cf9bb93ea156558ae57..32864e522b63d5d02c73a4df9f996c2ebe1b53ad 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -63,6 +63,14 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -63,6 +63,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed(); } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.villagerTraderMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.villagerTraderMaxHealth); + } // Purpur - end @Nullable diff --git a/src/main/java/net/minecraft/server/EntityVindicator.java b/src/main/java/net/minecraft/server/EntityVindicator.java -index 9950bda50f405ce44f8fc8d95682e2522cf9e10f..3c906f42379352026187b4c32a5d3574e3a299f3 100644 +index 9950bda50f405ce44f8fc8d95682e2522cf9e10f..894313f137578fa60faf80b36cff066d464d3897 100644 --- a/src/main/java/net/minecraft/server/EntityVindicator.java +++ b/src/main/java/net/minecraft/server/EntityVindicator.java -@@ -27,6 +27,14 @@ public class EntityVindicator extends EntityIllagerAbstract { +@@ -27,6 +27,11 @@ public class EntityVindicator extends EntityIllagerAbstract { public boolean isRidableInWater() { return world.purpurConfig.vindicatorRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.vindicatorMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.vindicatorMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index 323d79a99402b0f6952b4fb873170069f3428953..1809f2ba3f4e676395768c7da71e8917f2f241eb 100644 +index 323d79a99402b0f6952b4fb873170069f3428953..dc846e7bda587a47b1cce9054e587a734179e7fe 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java -@@ -34,6 +34,14 @@ public class EntityWitch extends EntityRaider implements IRangedEntity { +@@ -34,6 +34,11 @@ public class EntityWitch extends EntityRaider implements IRangedEntity { public boolean isRidableInWater() { return world.purpurConfig.witchRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.witchMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.witchMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java -index fd62dc51258876275adbe02f750fd88107c38a6b..9407ca671638a46bac8f1ee912d26a865751d7b0 100644 +index fd62dc51258876275adbe02f750fd88107c38a6b..03bcbf7c280476ef0e6fe87e3a96edb75544bddb 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java +++ b/src/main/java/net/minecraft/server/EntityWolf.java -@@ -121,6 +121,14 @@ public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable +@@ -121,6 +121,11 @@ public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable setCollarColor(world.purpurConfig.wolfDefaultCollarColor); super.tame(entityhuman); } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.wolfMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.wolfMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityZoglin.java b/src/main/java/net/minecraft/server/EntityZoglin.java -index d92fe8013fb3b43cb7eabdf1c624291b7e881889..067c99f13f2c016b1f753b3eeeda5927007bbf94 100644 +index d92fe8013fb3b43cb7eabdf1c624291b7e881889..bcc4aa1d3f09e43016d0009cd04dd6b797dcfeca 100644 --- a/src/main/java/net/minecraft/server/EntityZoglin.java +++ b/src/main/java/net/minecraft/server/EntityZoglin.java -@@ -31,6 +31,14 @@ public class EntityZoglin extends EntityMonster implements IMonster, IOglin { +@@ -31,6 +31,11 @@ public class EntityZoglin extends EntityMonster implements IMonster, IOglin { public boolean isRidableInWater() { return world.purpurConfig.zoglinRidableInWater; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.zoglinMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.zoglinMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 3ad8bd0847aacabf90e83c00cd7c1a8f51aaa2e4..23c1a6e69e7121f9d831d6dab0356b9679184d98 100644 +index 3ad8bd0847aacabf90e83c00cd7c1a8f51aaa2e4..13eb5269f5ed06958dae389ffc10b2fdc1a30e86 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java -@@ -67,6 +67,14 @@ public class EntityZombie extends EntityMonster { +@@ -67,6 +67,11 @@ public class EntityZombie extends EntityMonster { public boolean jockeyTryExistingChickens() { return world.purpurConfig.zombieJockeyTryExistingChickens; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.zombieMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.zombieMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/server/EntityZombieHusk.java b/src/main/java/net/minecraft/server/EntityZombieHusk.java -index 02b0ae550a0ed33b5b43beedf3b1405985c58c13..f22419837d5be8277716fc294b0192e7480c58ba 100644 +index 02b0ae550a0ed33b5b43beedf3b1405985c58c13..edcebb5e71e06eab5abfaed782a1a60033fe2223 100644 --- a/src/main/java/net/minecraft/server/EntityZombieHusk.java +++ b/src/main/java/net/minecraft/server/EntityZombieHusk.java -@@ -33,6 +33,14 @@ public class EntityZombieHusk extends EntityZombie { +@@ -33,6 +33,11 @@ public class EntityZombieHusk extends EntityZombie { public boolean jockeyTryExistingChickens() { return world.purpurConfig.huskJockeyTryExistingChickens; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.huskMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.huskMaxHealth); + } // Purpur end public static boolean a(EntityTypes entitytypes, WorldAccess worldaccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java -index 0c47477b416980d2e932321730525bf5a8feda4f..d6352539a5639db84f5654ba808f74ba3954dc0c 100644 +index 0c47477b416980d2e932321730525bf5a8feda4f..e346a15da14cfd607f5536fead33e1fd46266f1a 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java -@@ -53,6 +53,14 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo +@@ -53,6 +53,11 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo public boolean jockeyTryExistingChickens() { return world.purpurConfig.zombieVillagerJockeyTryExistingChickens; } + + @Override -+ public void initAttributes(World world) { -+ if (world != null) { -+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.zombieVillagerMaxHealth); -+ setHealth(getMaxHealth()); -+ } ++ public void initAttributes() { ++ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(this.world.purpurConfig.zombieVillagerMaxHealth); + } // Purpur end @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b2b76c3b7 100644 +index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..86a0ffb62e044a41a5e869b5594bf37dca018491 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -473,30 +473,51 @@ public class PurpurWorldConfig { +@@ -473,30 +473,58 @@ public class PurpurWorldConfig { 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); @@ -1555,7 +1338,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean catRidable = false; -@@ -505,6 +526,7 @@ public class PurpurWorldConfig { +@@ -505,6 +533,7 @@ public class PurpurWorldConfig { public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; @@ -1563,7 +1346,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -512,51 +534,92 @@ public class PurpurWorldConfig { +@@ -512,51 +541,92 @@ public class PurpurWorldConfig { catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks); @@ -1656,7 +1439,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean dolphinRidable = false; -@@ -564,19 +627,45 @@ public class PurpurWorldConfig { +@@ -564,19 +634,45 @@ public class PurpurWorldConfig { public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; public boolean dolphinDisableTreasureSearching = false; @@ -1702,7 +1485,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean drownedRidable = false; -@@ -584,17 +673,31 @@ public class PurpurWorldConfig { +@@ -584,17 +680,31 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1734,7 +1517,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean enderDragonRidable = false; -@@ -602,57 +705,103 @@ public class PurpurWorldConfig { +@@ -602,57 +712,103 @@ public class PurpurWorldConfig { public double enderDragonMaxY = 256D; public boolean enderDragonAlwaysDropsEggBlock = false; public boolean enderDragonAlwaysDropsFullExp = false; @@ -1838,7 +1621,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean giantRidable = false; -@@ -675,31 +824,68 @@ public class PurpurWorldConfig { +@@ -675,31 +831,68 @@ public class PurpurWorldConfig { giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.giant.max-health", giantMaxHealth); @@ -1909,7 +1692,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean huskRidable = false; -@@ -707,12 +893,19 @@ public class PurpurWorldConfig { +@@ -707,12 +900,19 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1929,7 +1712,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean illusionerRidable = false; -@@ -727,85 +920,188 @@ public class PurpurWorldConfig { +@@ -727,85 +927,188 @@ public class PurpurWorldConfig { illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.illusioner.max-health", illusionerMaxHealth); @@ -2120,7 +1903,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean phantomRidable = false; -@@ -831,6 +1127,7 @@ public class PurpurWorldConfig { +@@ -831,6 +1134,7 @@ public class PurpurWorldConfig { public int phantomBurnInLight = 0; public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; @@ -2128,7 +1911,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -855,38 +1152,72 @@ public class PurpurWorldConfig { +@@ -855,38 +1159,72 @@ public class PurpurWorldConfig { phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); @@ -2201,7 +1984,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean polarBearRidable = false; -@@ -894,6 +1225,7 @@ public class PurpurWorldConfig { +@@ -894,6 +1232,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -2209,7 +1992,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -901,11 +1233,24 @@ public class PurpurWorldConfig { +@@ -901,11 +1240,24 @@ public class PurpurWorldConfig { Item item = IRegistry.ITEM.get(new MinecraftKey(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -2234,7 +2017,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean rabbitRidable = false; -@@ -913,68 +1258,142 @@ public class PurpurWorldConfig { +@@ -913,68 +1265,142 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -2377,7 +2160,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean snowGolemRidable = false; -@@ -986,6 +1405,7 @@ public class PurpurWorldConfig { +@@ -986,6 +1412,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -2385,7 +2168,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -996,63 +1416,118 @@ public class PurpurWorldConfig { +@@ -996,63 +1423,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); @@ -2504,7 +2287,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean villagerRidable = false; -@@ -1069,6 +1544,7 @@ public class PurpurWorldConfig { +@@ -1069,6 +1551,7 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheck = 60; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -2512,7 +2295,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1089,33 +1565,60 @@ public class PurpurWorldConfig { +@@ -1089,33 +1572,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); @@ -2573,7 +2356,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean witherRidable = false; -@@ -1132,19 +1635,30 @@ public class PurpurWorldConfig { +@@ -1132,19 +1642,30 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); @@ -2606,7 +2389,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean wolfRidable = false; -@@ -1153,6 +1667,7 @@ public class PurpurWorldConfig { +@@ -1153,6 +1674,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2614,7 +2397,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1164,13 +1679,26 @@ public class PurpurWorldConfig { +@@ -1164,13 +1686,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); @@ -2641,7 +2424,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean zombieRidable = false; -@@ -1180,6 +1708,7 @@ public class PurpurWorldConfig { +@@ -1180,6 +1715,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public EnumDifficulty zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; @@ -2649,7 +2432,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1192,15 +1721,39 @@ public class PurpurWorldConfig { +@@ -1192,15 +1728,39 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; } @@ -2689,7 +2472,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean zombifiedPiglinRidable = false; -@@ -1209,6 +1762,7 @@ public class PurpurWorldConfig { +@@ -1209,6 +1769,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2697,7 +2480,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1216,6 +1770,12 @@ public class PurpurWorldConfig { +@@ -1216,6 +1777,12 @@ 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); @@ -2710,7 +2493,7 @@ index 513aa507aaea6fac108dbf1dc3c3d51259b16df6..0db403f19e0131a8a49d28bc7bd3534b } public boolean zombieVillagerRidable = false; -@@ -1223,11 +1783,18 @@ public class PurpurWorldConfig { +@@ -1223,11 +1790,18 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; diff --git a/patches/server/0160-Phantom-flames-on-swoop.patch b/patches/server/0160-Phantom-flames-on-swoop.patch index b0d7da775..4e4636f61 100644 --- a/patches/server/0160-Phantom-flames-on-swoop.patch +++ b/patches/server/0160-Phantom-flames-on-swoop.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantom flames on swoop diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index 889e388cf13ba0a385ee88a3acd0b813c0776dee..d6509eef1dc26beafc752c8518eabfeccb02653b 100644 +index 25345d8d585735af407787f2c26fe92674721239..087a91fedc49aaf6e74b81b90494849c4932c956 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java -@@ -184,6 +184,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -181,6 +181,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { this.world.addParticle(Particles.MYCELIUM, this.locX() - (double) f2, this.locY() + (double) f4, this.locZ() - (double) f3, 0.0D, 0.0D, 0.0D); } @@ -17,10 +17,10 @@ index 889e388cf13ba0a385ee88a3acd0b813c0776dee..d6509eef1dc26beafc752c8518eabfec @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0db403f19e0131a8a49d28bc7bd3534b2b76c3b7..66aaa47a5221cc025ca142b0cef70b3eb311bf4c 100644 +index 86a0ffb62e044a41a5e869b5594bf37dca018491..21319c01a5b7f470ec722cb3259b15299c3b27a7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1127,6 +1127,7 @@ public class PurpurWorldConfig { +@@ -1134,6 +1134,7 @@ public class PurpurWorldConfig { public int phantomBurnInLight = 0; public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; @@ -28,7 +28,7 @@ index 0db403f19e0131a8a49d28bc7bd3534b2b76c3b7..66aaa47a5221cc025ca142b0cef70b3e public double phantomMaxHealth = 20.0D; private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); -@@ -1152,6 +1153,7 @@ public class PurpurWorldConfig { +@@ -1159,6 +1160,7 @@ public class PurpurWorldConfig { phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); diff --git a/patches/server/0161-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0161-Option-for-chests-to-open-even-with-a-solid-block-on.patch index 5d12526ae..ea9068a1e 100644 --- a/patches/server/0161-Option-for-chests-to-open-even-with-a-solid-block-on.patch +++ b/patches/server/0161-Option-for-chests-to-open-even-with-a-solid-block-on.patch @@ -17,7 +17,7 @@ index 9e5e6de52efabe9126f6c47acb35fa1dc461ff4f..487b281cf53d3482853d56ee1e90a329 return iblockaccess.getType(blockposition1).isOccluding(iblockaccess, blockposition1); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 66aaa47a5221cc025ca142b0cef70b3eb311bf4c..480e3a30d42bfd0cc0344762361fc3523f148799 100644 +index 21319c01a5b7f470ec722cb3259b15299c3b27a7..d1f920930f538b8227adf7e6a7af4bd32ff2da9b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -370,6 +370,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0163-Striders-give-saddle-back.patch b/patches/server/0163-Striders-give-saddle-back.patch index a6ab1e640..f170906eb 100644 --- a/patches/server/0163-Striders-give-saddle-back.patch +++ b/patches/server/0163-Striders-give-saddle-back.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Striders give saddle back diff --git a/src/main/java/net/minecraft/server/EntityStrider.java b/src/main/java/net/minecraft/server/EntityStrider.java -index 1bb33c4169902cf6eb323f79a5d98a1df5726d96..96485d6f4db6b618413abc23199bdb9cefbda721 100644 +index a0bb64bea373c678c519e3fae8f808fd36e1ee4f..11911b10ddc6e2a681f2eda313a6e7c68674a1ac 100644 --- a/src/main/java/net/minecraft/server/EntityStrider.java +++ b/src/main/java/net/minecraft/server/EntityStrider.java -@@ -379,6 +379,18 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab +@@ -376,6 +376,18 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab if (!flag && this.hasSaddle() && !this.isVehicle() && !entityhuman.eq()) { if (!this.world.isClientSide) { @@ -28,10 +28,10 @@ index 1bb33c4169902cf6eb323f79a5d98a1df5726d96..96485d6f4db6b618413abc23199bdb9c } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 480e3a30d42bfd0cc0344762361fc3523f148799..57702bdf36efeb19b01fa88a0de62b875e2e2400 100644 +index d1f920930f538b8227adf7e6a7af4bd32ff2da9b..ac35991fce2a325e6eba66babb4867a295ae2fd1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1480,11 +1480,13 @@ public class PurpurWorldConfig { +@@ -1487,11 +1487,13 @@ public class PurpurWorldConfig { public boolean striderRidable = false; public boolean striderRidableInWater = false; public int striderBreedingTicks = 6000;