diff --git a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index b6d031c4d..c0346feeb 100644 --- a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -707,6 +707,50 @@ index 0a75d3790a4bf4812e4f3b27ec50d67fdccf812d..cd888e070a72ff46d35a4425a0013c61 } @Override +diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java +index a02a4b47cf02cd7eaa76d25af2dccb50ad884504..a32ac3907883f65c2a00173128a4a011fd552932 100644 +--- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java ++++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java +@@ -21,6 +21,17 @@ public class Nautilus extends AbstractNautilus { + super(type, level); + } + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.nautilusMaxHealth); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.nautilusMovementSpeed); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.nautilusAttackDamage); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level().purpurConfig.nautilusKnockbackResistance); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SCALE).setBaseValue(this.level().purpurConfig.nautilusScale); ++ } ++ // Purpur end - Configurable entity base attributes ++ + @Override + protected Brain.Provider brainProvider() { + return NautilusAi.brainProvider(); +diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +index 83c16a44b230efd010e06cabb428954d157cea47..7ef4a15ba2b315a41480484572a6c6898340466b 100644 +--- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java ++++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +@@ -43,6 +43,17 @@ public class ZombieNautilus extends AbstractNautilus { + super(type, level); + } + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieNautilusMaxHealth); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.zombieNautilusMovementSpeed); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.zombieNautilusAttackDamage); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level().purpurConfig.zombieNautilusKnockbackResistance); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieNautilusScale); ++ } ++ // Purpur end - Configurable entity base attributes ++ + public static AttributeSupplier.Builder createAttributes() { + return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); + } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java index 93503f6b4eea2cb2ae6c01279e847c307920c35d..d5060fb8e9a711e6230f2c4950521d8b4f5c01d2 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java diff --git a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch index 9c58505d2..2e0ef55a0 100644 --- a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch @@ -420,12 +420,12 @@ index cd888e070a72ff46d35a4425a0013c617b31e159..30204224ed83f6d3cfd64640b332b23c protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -index a02a4b47cf02cd7eaa76d25af2dccb50ad884504..a941cb9843fcf8d008ae846dcab95e32d823a1b2 100644 +index a32ac3907883f65c2a00173128a4a011fd552932..98199869b70c7c0f2b744ac74961c77d473617ca 100644 --- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -@@ -21,6 +21,13 @@ public class Nautilus extends AbstractNautilus { - super(type, level); +@@ -32,6 +32,13 @@ public class Nautilus extends AbstractNautilus { } + // Purpur end - Configurable entity base attributes + // Purpur start - Make entity breeding times configurable + @Override @@ -438,12 +438,12 @@ index a02a4b47cf02cd7eaa76d25af2dccb50ad884504..a941cb9843fcf8d008ae846dcab95e32 protected Brain.Provider brainProvider() { return NautilusAi.brainProvider(); diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -index 83c16a44b230efd010e06cabb428954d157cea47..9e2b703d23a044fecdbc544588079c345fd376c7 100644 +index 7ef4a15ba2b315a41480484572a6c6898340466b..94383c5020b6631203ddc4e0a58a222729ffe9a2 100644 --- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -@@ -43,6 +43,13 @@ public class ZombieNautilus extends AbstractNautilus { - super(type, level); +@@ -54,6 +54,13 @@ public class ZombieNautilus extends AbstractNautilus { } + // Purpur end - Configurable entity base attributes + // Purpur start - Make entity breeding times configurable + @Override diff --git a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch index 4aadaacfe..04eb4894b 100644 --- a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch @@ -472,6 +472,42 @@ index 828793aaa2992fd1077040309154f814b302476a..8034ce67266b6baab35c72eaebf5ad67 @Override protected void ageBoundaryReached() { if (this.isBaby()) { +diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java +index 98199869b70c7c0f2b744ac74961c77d473617ca..7c4467933061f097425d6c82188a65fd5e4c4d3b 100644 +--- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java ++++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java +@@ -39,6 +39,13 @@ public class Nautilus extends AbstractNautilus { + } + // Purpur end - Make entity breeding times configurable + ++ // Purpur start - Mobs always drop experience ++ @Override ++ protected boolean isAlwaysExperienceDropper() { ++ return this.level().purpurConfig.nautilusAlwaysDropExp; ++ } ++ // Purpur end - Mobs always drop experience ++ + @Override + protected Brain.Provider brainProvider() { + return NautilusAi.brainProvider(); +diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +index 94383c5020b6631203ddc4e0a58a222729ffe9a2..7e4d005053e6812f329ab7ac1f252c547d4c9a12 100644 +--- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java ++++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +@@ -61,6 +61,13 @@ public class ZombieNautilus extends AbstractNautilus { + } + // Purpur end - Make entity breeding times configurable + ++ // Purpur start - Mobs always drop experience ++ @Override ++ protected boolean isAlwaysExperienceDropper() { ++ return this.level().purpurConfig.zombieNautilusAlwaysDropExp; ++ } ++ // Purpur end - Mobs always drop experience ++ + public static AttributeSupplier.Builder createAttributes() { + return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); + } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java index e9aa07dea0515f53a08a7066fa9e23e0ee69d69e..5116e9e16070e23d13b526d21facb7b5ad0988ba 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index d063bedb0..0ee5516fe 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2365,25 +2365,21 @@ public class PurpurWorldConfig { muleAlwaysDropExp = getBoolean("mobs.mule.always-drop-exp", muleAlwaysDropExp); } - // public boolean nautilusRidable = false; - // public boolean nautilusRidableInWater = true; - // public boolean nautilusControllable = true; - // public double nautilusMaxHealth = 10.0D; - // public double nautilusScale = 1.0D; + public double nautilusMaxHealth = 15.0D; + public double nautilusMovementSpeed = 1.0D; + public double nautilusAttackDamage = 3.0D; + public double nautilusKnockbackResistance = 0.3D; + public double nautilusScale = 1.0D; public int nautilusBreedingTicks = 6000; - // public boolean nautilusTakeDamageFromWater = false; - // public boolean nautilusAlwaysDropExp = false; - // public boolean nautilusSpawnUnderSeaLevel = false; + public boolean nautilusAlwaysDropExp = false; private void nautilusSettings() { - // nautilusRidable = getBoolean("mobs.nautilus.ridable", nautilusRidable); - // nautilusRidableInWater = getBoolean("mobs.nautilus.ridable-in-water", nautilusRidableInWater); - // nautilusControllable = getBoolean("mobs.nautilus.controllable", nautilusControllable); - // nautilusMaxHealth = getDouble("mobs.nautilus.attributes.max_health", nautilusMaxHealth); - // nautilusScale = Mth.clamp(getDouble("mobs.nautilus.attributes.scale", nautilusScale), 0.0625D, 16.0D); + nautilusMaxHealth = getDouble("mobs.nautilus.attributes.max_health", nautilusMaxHealth); + nautilusMovementSpeed = getDouble("mobs.nautilus.attributes.movement_speed", nautilusMovementSpeed); + nautilusAttackDamage = getDouble("mobs.nautilus.attributes.attack_damage", nautilusAttackDamage); + nautilusKnockbackResistance = getDouble("mobs.nautilus.attributes.knockback_resistance", nautilusKnockbackResistance); + nautilusScale = Mth.clamp(getDouble("mobs.nautilus.attributes.scale", nautilusScale), 0.0625D, 16.0D); nautilusBreedingTicks = getInt("mobs.nautilus.breeding-delay-ticks", nautilusBreedingTicks); - // nautilusTakeDamageFromWater = getBoolean("mobs.nautilus.takes-damage-from-water", nautilusTakeDamageFromWater); - // nautilusAlwaysDropExp = getBoolean("mobs.nautilus.always-drop-exp", nautilusAlwaysDropExp); - // nautilusSpawnUnderSeaLevel = getBoolean("mobs.nautilus.spawn-below-sea-level", nautilusSpawnUnderSeaLevel); + nautilusAlwaysDropExp = getBoolean("mobs.nautilus.always-drop-exp", nautilusAlwaysDropExp); } public boolean ocelotRidable = false; @@ -3635,6 +3631,21 @@ public class PurpurWorldConfig { zombieHorseAlwaysDropExp = getBoolean("mobs.zombie_horse.always-drop-exp", zombieHorseAlwaysDropExp); } + public double zombieNautilusMaxHealth = 15.0D; + public double zombieNautilusMovementSpeed = 1.1D; + public double zombieNautilusAttackDamage = 3.0D; + public double zombieNautilusKnockbackResistance = 0.3D; + public double zombieNautilusScale = 1.0D; + public boolean zombieNautilusAlwaysDropExp = false; + private void zombieNautilusSettings() { + zombieNautilusMaxHealth = getDouble("mobs.zombie_nautilus.attributes.max_health", zombieNautilusMaxHealth); + zombieNautilusMovementSpeed = getDouble("mobs.zombie_nautilus.attributes.movement_speed", zombieNautilusMovementSpeed); + zombieNautilusAttackDamage = getDouble("mobs.zombie_nautilus.attributes.attack_damage", zombieNautilusAttackDamage); + zombieNautilusKnockbackResistance = getDouble("mobs.zombie_nautilus.attributes.knockback_resistance", zombieNautilusKnockbackResistance); + zombieNautilusScale = Mth.clamp(getDouble("mobs.zombie_nautilus.attributes.scale", zombieNautilusScale), 0.0625D, 16.0D); + zombieNautilusAlwaysDropExp = getBoolean("mobs.zombie_nautilus.always-drop-exp", zombieNautilusAlwaysDropExp); + } + public boolean zombieVillagerRidable = false; public boolean zombieVillagerRidableInWater = true; public boolean zombieVillagerControllable = true;