From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 10 Dec 2020 16:44:54 -0600 Subject: [PATCH] Configurable entity base attributes diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java index 6e0a2741db06f93f31349515d1d13181b70e08ed..42dcad656dff5ba1e7fa8aced86628ac28f300af 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -295,6 +295,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(EntityType type, Level level) { super(type, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur - Ridables + this.initAttributes(); // Purpur - Configurable entity base attributes this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); @@ -316,6 +317,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return new EntityEquipment(); } + protected void initAttributes() {}// Purpur - Configurable entity base attributes + public Brain getBrain() { return this.brain; } diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java index 2cfcf1f7473d8612777ca0752f6d1521c231ef42..a09b5035e91d50e12f613a7a1211c6869fbbf4df 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java @@ -94,6 +94,21 @@ public class Bat extends AmbientCreature { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.batMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.batScale); + this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level().purpurConfig.batFollowRange); + this.getAttribute(Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level().purpurConfig.batKnockbackResistance); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.batMovementSpeed); + this.getAttribute(Attributes.FLYING_SPEED).setBaseValue(this.level().purpurConfig.batFlyingSpeed); + this.getAttribute(Attributes.ARMOR).setBaseValue(this.level().purpurConfig.batArmor); + this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level().purpurConfig.batArmorToughness); + this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level().purpurConfig.batAttackKnockback); + } + // Purpur end - Configurable entity base attributes + @Override public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java index 6ab6305f0b25f7c860673c70d9ce911688ecf1e6..ea7666cc10aee49e13dbdd6e3367fabaa0dcbc17 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -167,6 +167,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.allayMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.allayScale); + } + // Purpur end - Configurable entity base attributes + @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java index 767a730baa8a7694ed7d5f05b70118da1f4288cc..1f6b28531127ea2e5b291583f6bb6a236868fbf0 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java @@ -99,6 +99,14 @@ public class Armadillo extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.armadilloMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.armadilloScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java index 3837397563bf3d568c120ae4e4e38d1a6dc7a8b2..3f9e15685ba52a5b9bd4282ba6de6751296975bf 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -138,6 +138,14 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.axolotlMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.axolotlScale); + } + // Purpur end - Configurable entity base attributes + @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java index bd3dc923058b884afcfad08062230182810c65a2..7d7ab4c5092ac085e8cd6d3a432feb683db5a282 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -477,6 +477,14 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return beehiveBlockEntity != null && beehiveBlockEntity.isFireNearby(); } + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.beeMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); + } + // Purpur end - Configurable entity base attributes + @Override public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java index a6a66084323435697b3185d7b86acaf5c7453719..95e86330e1e973c43e50bd4ac310212b8a057430 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java @@ -343,6 +343,23 @@ public class Camel extends AbstractHorse { return this.dashCooldown; } + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(net.minecraft.util.RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.camelMaxHealthMin, this.level().purpurConfig.camelMaxHealthMax); + } + + @Override + public double generateJumpStrength(net.minecraft.util.RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.camelJumpStrengthMin, this.level().purpurConfig.camelJumpStrengthMax); + } + + @Override + public double generateSpeed(net.minecraft.util.RandomSource random) { + return generateSpeed(this.level().purpurConfig.camelMovementSpeedMin, this.level().purpurConfig.camelMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + @Override public SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java index 4961bb85b91f68075cf0d22440d6377d9fcb7721..bfc5c6639ef1005d2752d5164f3613ddacc46bf1 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java @@ -90,6 +90,14 @@ public class Chicken extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.chickenScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java index 0268063bb0db8c30c594a7d75d0d11f7236c3a68..5e5b239ebc774ae66f8c35a725ea917993239ef2 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java @@ -46,6 +46,14 @@ public class Cow extends AbstractCow { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.cowMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.cowScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java index 1a9f5f17e46af831bc6621c83c57e5436397dbc2..85ad44eb3e64232cf1ea326257078c46288a613a 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java @@ -78,6 +78,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Ridables + // 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.mooshroomMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/dolphin/Dolphin.java b/net/minecraft/world/entity/animal/dolphin/Dolphin.java index 656335a3bd021efc538ab407673c09a83178ed7c..94f92080de46f2af67e1d28753208691da534ddf 100644 --- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java +++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java @@ -152,6 +152,14 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.dolphinMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.dolphinScale); + } + // Purpur end - Configurable entity base attributes + @Override public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/equine/AbstractHorse.java b/net/minecraft/world/entity/animal/equine/AbstractHorse.java index a1dce0a5ce1fcd0a2ff7104b3592ffd5c948db34..5bd1e0f20a9553ae20db1d72d0b2a88bd92db723 100644 --- a/net/minecraft/world/entity/animal/equine/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/equine/AbstractHorse.java @@ -140,6 +140,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateMaxHealth(random)); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.generateSpeed(random)); + this.getAttribute(Attributes.JUMP_STRENGTH).setBaseValue(this.generateJumpStrength(random)); + } + + protected double generateMaxHealth(double min, double max) { + if (min == max) return min; + int diff = Mth.floor(max - min); + double base = max - diff; + int first = Mth.floor((double) diff / 2); + int rest = diff - first; + return base + random.nextInt(first + 1) + random.nextInt(rest + 1); + } + + protected double generateJumpStrength(double min, double max) { + if (min == max) return min; + return min + (max - min) * this.random.nextDouble(); + } + + protected double generateSpeed(double min, double max) { + if (min == max) return min; + return min + (max - min) * this.random.nextDouble(); + } + + protected float generateMaxHealth(RandomSource random) { + return 15.0F + (float) random.nextInt(8) + (float) random.nextInt(9); + } + + protected double generateJumpStrength(RandomSource random) { + return 0.4F + random.nextDouble() * 0.2 + random.nextDouble() * 0.2 + random.nextDouble() * 0.2; + } + + protected double generateSpeed(RandomSource random) { + return (0.45F + random.nextDouble() * 0.3 + random.nextDouble() * 0.3 + random.nextDouble() * 0.3) * 0.25; + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur - Ridables @@ -1050,7 +1090,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory spawnGroupData = new AgeableMob.AgeableMobGroupData(0.2F); } - this.randomizeAttributes(level.getRandom()); + //this.randomizeAttributes(level.getRandom()); // Purpur - replaced by initAttributes() return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java index 8aec9f254c82993632e68368d37b8c9bee7869cc..b85d967c7c809683e4576be30ed855941c6e68cc 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java @@ -23,6 +23,23 @@ public class Donkey extends AbstractChestedHorse { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(net.minecraft.util.RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.donkeyMaxHealthMin, this.level().purpurConfig.donkeyMaxHealthMax); + } + + @Override + public double generateJumpStrength(net.minecraft.util.RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.donkeyJumpStrengthMin, this.level().purpurConfig.donkeyJumpStrengthMax); + } + + @Override + public double generateSpeed(net.minecraft.util.RandomSource random) { + return generateSpeed(this.level().purpurConfig.donkeyMovementSpeedMin, this.level().purpurConfig.donkeyMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + @Override public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java index cc50151ce6e6daffc1ecd41eb89a0d2f159f651e..9a97cd588fb2dc0f393b2c8768f4e45066a34850 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java @@ -57,6 +57,23 @@ public class Horse extends AbstractHorse { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.horseMaxHealthMin, this.level().purpurConfig.horseMaxHealthMax); + } + + @Override + public double generateJumpStrength(RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.horseJumpStrengthMin, this.level().purpurConfig.horseJumpStrengthMax); + } + + @Override + public double generateSpeed(RandomSource random) { + return generateSpeed(this.level().purpurConfig.horseMovementSpeedMin, this.level().purpurConfig.horseMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + @Override protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java index bba6493eee2f605faac0d49d665117d2f2c41213..b54a535add643390a6164ab3f4a2fdd475d60162 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java @@ -135,6 +135,23 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.llamaMaxHealthMin, this.level().purpurConfig.llamaMaxHealthMax); + } + + @Override + public double generateJumpStrength(RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.llamaJumpStrengthMin, this.level().purpurConfig.llamaJumpStrengthMax); + } + + @Override + public double generateSpeed(RandomSource random) { + return generateSpeed(this.level().purpurConfig.llamaMovementSpeedMin, this.level().purpurConfig.llamaMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + public boolean isTraderLlama() { return false; } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java index 60c151af9e51ba1dd1063344a3f5c021b6a48440..f49c8a61ac3883f7ff8ad8193ae9ea9136f54c45 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java @@ -22,6 +22,23 @@ public class Mule extends AbstractChestedHorse { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(net.minecraft.util.RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.muleMaxHealthMin, this.level().purpurConfig.muleMaxHealthMax); + } + + @Override + public double generateJumpStrength(net.minecraft.util.RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.muleJumpStrengthMin, this.level().purpurConfig.muleJumpStrengthMax); + } + + @Override + public double generateSpeed(net.minecraft.util.RandomSource random) { + return generateSpeed(this.level().purpurConfig.muleMovementSpeedMin, this.level().purpurConfig.muleMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + @Override public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java index 3d98259439c3bdb97ab2c66734daf90a56b290ef..d8b7b787b98b86d16578abe1cd19321ad2c176c0 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java @@ -50,6 +50,23 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.skeletonHorseMaxHealthMin, this.level().purpurConfig.skeletonHorseMaxHealthMax); + } + + @Override + public double generateJumpStrength(RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.skeletonHorseJumpStrengthMin, this.level().purpurConfig.skeletonHorseJumpStrengthMax); + } + + @Override + public double generateSpeed(RandomSource random) { + return generateSpeed(this.level().purpurConfig.skeletonHorseMovementSpeedMin, this.level().purpurConfig.skeletonHorseMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java index 68b72c18a3880dead3b32b646a2f6a09d4b98c44..deb0a1eb867daec57a644ce698fe50d79fd8960e 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java @@ -53,6 +53,23 @@ public class TraderLlama extends Llama { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(net.minecraft.util.RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.traderLlamaMaxHealthMin, this.level().purpurConfig.traderLlamaMaxHealthMax); + } + + @Override + public double generateJumpStrength(net.minecraft.util.RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.traderLlamaJumpStrengthMin, this.level().purpurConfig.traderLlamaJumpStrengthMax); + } + + @Override + public double generateSpeed(net.minecraft.util.RandomSource random) { + return generateSpeed(this.level().purpurConfig.traderLlamaMovementSpeedMin, this.level().purpurConfig.traderLlamaMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + @Override public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java index c1a13047c673cafc5de873215dd368eae6ac8b5e..8b8580f8c082a40f958ec61adf32dc7d1485ea68 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java @@ -64,6 +64,23 @@ public class ZombieHorse extends AbstractHorse { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public float generateMaxHealth(RandomSource random) { + return (float) generateMaxHealth(this.level().purpurConfig.zombieHorseMaxHealthMin, this.level().purpurConfig.zombieHorseMaxHealthMax); + } + + @Override + public double generateJumpStrength(RandomSource random) { + return generateJumpStrength(this.level().purpurConfig.zombieHorseJumpStrengthMin, this.level().purpurConfig.zombieHorseJumpStrengthMax); + } + + @Override + public double generateSpeed(RandomSource random) { + return generateSpeed(this.level().purpurConfig.zombieHorseMovementSpeedMin, this.level().purpurConfig.zombieHorseMovementSpeedMax); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java index 2fe8b8382b7cb4056f4d430cf632ecf413e8e25b..b7c17aed96dce39cb03780ff251e0e38c3c6adb1 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java @@ -120,6 +120,14 @@ public class Cat extends TamableAnimal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.catMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.catScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java index 22fa29aa785eda8fb4a895d36413626da8a49a0e..c9a8dcfd1e46f97dee0393db3205049c0db1cefb 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java @@ -83,6 +83,14 @@ public class Ocelot extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ocelotMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ocelotScale); + } + // Purpur end - Configurable entity base attributes + public boolean isTrusting() { return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/fish/Cod.java b/net/minecraft/world/entity/animal/fish/Cod.java index f73b3f5ae65f7793ff25145c72fb35e3daec8494..e00e623d7df9e179d8bb5ee4812538578c5f4c08 100644 --- a/net/minecraft/world/entity/animal/fish/Cod.java +++ b/net/minecraft/world/entity/animal/fish/Cod.java @@ -25,6 +25,13 @@ public class Cod extends AbstractSchoolingFish { } // Purpur end - Ridables + // 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.codMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/fish/Pufferfish.java b/net/minecraft/world/entity/animal/fish/Pufferfish.java index 1eaa5e5fb65b18e5042d69b5dbfea15a7271c0aa..b2932aeb6000a4e268db12cb7b05be746788569c 100644 --- a/net/minecraft/world/entity/animal/fish/Pufferfish.java +++ b/net/minecraft/world/entity/animal/fish/Pufferfish.java @@ -59,6 +59,13 @@ public class Pufferfish extends AbstractFish { } // Purpur end - Ridables + // 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.pufferfishMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/fish/Salmon.java b/net/minecraft/world/entity/animal/fish/Salmon.java index b362ce156765ad45b8c29b5dc2c6d9d99d2e1474..97194d5c844bf96ba431c12ccc1a82cb8944c52b 100644 --- a/net/minecraft/world/entity/animal/fish/Salmon.java +++ b/net/minecraft/world/entity/animal/fish/Salmon.java @@ -52,6 +52,13 @@ public class Salmon extends AbstractSchoolingFish { } // Purpur end - Ridables + // 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.salmonMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override public int getMaxSchoolSize() { return 5; diff --git a/net/minecraft/world/entity/animal/fish/TropicalFish.java b/net/minecraft/world/entity/animal/fish/TropicalFish.java index 3281e75c48fb6cafdba088254009e5b4285b3819..8ffb253c114d882c9459f74a27bd8a086ae82f01 100644 --- a/net/minecraft/world/entity/animal/fish/TropicalFish.java +++ b/net/minecraft/world/entity/animal/fish/TropicalFish.java @@ -89,6 +89,13 @@ public class TropicalFish extends AbstractSchoolingFish { } // Purpur end - Ridables + // 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.tropicalFishMaxHealth); + } + // Purpur end - Configurable entity base attributes + public static String getPredefinedName(int variantId) { return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java index bf00cf5e6fd8b9143e1b327ef7b90ae055d264ff..6819bcb15ad6c85f41a098a9fdb73ce5a7987d8f 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java @@ -189,6 +189,14 @@ public class Fox extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.foxScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java index 4dc1ce5e07e23134cf3ed68e78a055c3b75fdc83..e3c5b6fe7d6cdb674fbf5ac22001c3d917bf91ec 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -130,6 +130,16 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.copperGolemMaxHealth); + this.getAttribute(Attributes.STEP_HEIGHT).setBaseValue(this.level().purpurConfig.copperGolemStepHeight); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.copperGolemMovementSpeed); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.copperGolemScale); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/golem/IronGolem.java b/net/minecraft/world/entity/animal/golem/IronGolem.java index 363bf7781c8785bc6fdbc65941794a5a02f8a57a..677f584b38aeb6805db0bb867f62d5617e309f5e 100644 --- a/net/minecraft/world/entity/animal/golem/IronGolem.java +++ b/net/minecraft/world/entity/animal/golem/IronGolem.java @@ -91,6 +91,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ironGolemMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ironGolemScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java index d8a3b7d329757bb84ee4d53671c89f211e8581ab..ab44bc401438d589696d9f25ebaca0fc39648bed 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -79,6 +79,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snowGolemMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.snowGolemScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java index 0a75d3790a4bf4812e4f3b27ec50d67fdccf812d..cd888e070a72ff46d35a4425a0013c617b31e159 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -133,6 +133,19 @@ public class HappyGhast extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.happyGhastMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.happyGhastScale); + this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.happyGhastTemptRange); + this.getAttribute(Attributes.FLYING_SPEED).setBaseValue(this.level().purpurConfig.happyGhastFlyingSpeed); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.happyGhastMovementSpeed); + this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level().purpurConfig.happyGhastFollowRange); + this.getAttribute(Attributes.CAMERA_DISTANCE).setBaseValue(this.level().purpurConfig.happyGhastCameraDistance); + } + // Purpur end - Configurable entity base attributes + @Override protected void ageBoundaryReached() { if (this.isBaby()) { @@ -156,7 +169,7 @@ public class HappyGhast extends Animal { @Override protected float sanitizeScale(float scale) { - return Math.min(scale, 1.0F); + return Math.min(scale, 1.0F); // Purpur - Configurable entity base attributes } @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 +++ b/net/minecraft/world/entity/animal/panda/Panda.java @@ -134,6 +134,15 @@ public class Panda extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pandaMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.pandaScale); + setAttributes(); + } + // Purpur end - Configurable entity base attributes + @Override protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); @@ -625,7 +634,11 @@ public class Panda extends Animal { public void setAttributes() { if (this.isWeak()) { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(10.0); + // Purpur start - Configurable entity base attributes + net.minecraft.world.entity.ai.attributes.AttributeInstance maxHealth = this.getAttribute(Attributes.MAX_HEALTH); + maxHealth.setBaseValue(maxHealth.getValue() / 2); + // Purpur end - Configurable entity base attributes + } if (this.isLazy()) { diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java index 6a4d170cd1e4dde2af30895f9fbac9dd599d0602..7480a491533a47882eaf4b36c320adf45ebfb190 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java @@ -199,6 +199,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.parrotMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.parrotScale); + } + // Purpur end - Configurable entity base attributes + @Override public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java index 2a3fc6ad3a12a3cc9815b66b659e3c9ce2afa7a8..aeb9e57db2233bff20fa5208a679ac9bcb8d5026 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java @@ -80,6 +80,14 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pigMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.pigScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java index 718531a324c36ac65a93af5c12e0c0a3948606cb..904e4c641f1892220f263528c65f6f81708399cd 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java @@ -118,6 +118,14 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.polarBearMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.polarBearScale); + } + // Purpur end - Configurable entity base attributes + @Override public @Nullable AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java index 16fbee742f28cf4571effb66265daeee64bae9b7..cfbab57dd0527c5e2f17718f3974059eb881c2ea 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -148,6 +148,14 @@ public class Rabbit extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.rabbitScale); + } + // Purpur end - Configurable entity base attributes + @Override public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java index a33800517d5fb5ab008e22b77be2f079901c1a99..1d60d35c1330418009f7d1d0b60d263559b68b7f 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java @@ -80,6 +80,14 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.sheepMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java index 3d5cf62bd9bd99a978b7dc535675178deb695af0..eb6675394ecc5bba67e0f8bb0220ad92ef2b5e4f 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -106,6 +106,14 @@ public class Sniffer extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snifferMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.snifferScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/squid/GlowSquid.java b/net/minecraft/world/entity/animal/squid/GlowSquid.java index c5a8080aa0fa1014602ba76fb4d8ad69b926dbfa..7d41aaa0546a9ca02e46ce46e61ecc57120bfca9 100644 --- a/net/minecraft/world/entity/animal/squid/GlowSquid.java +++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java @@ -50,6 +50,13 @@ public class GlowSquid extends Squid { } // Purpur end - Ridables + // 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.glowSquidMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java index 69d87bd27a95bb9e92cd24fb7973a9b06714567e..5e4181f95711c6b0299f28de14d95da421dda373 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -93,6 +93,14 @@ public class Squid extends AgeableWaterCreature { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.squidScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java index 7699967db327cf80940bf30d8e0c734b43fd1e8f..8d9a1fe887c39588e43e4ccfc46151a033c8ccb7 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -104,6 +104,14 @@ public class Turtle extends Animal { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.turtleMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.turtleScale); + } + // Purpur end - Configurable entity base attributes + public void setHomePos(BlockPos homePos) { this.homePos = homePos; } diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java index 44b650de646ea605e41f39f3d99d8f550c9a8e19..7bccee8b5dd689bbff18f34d3afac52bfe34aa42 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java @@ -208,6 +208,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wolfMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.wolfScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java index b8ddcc460ff1ae1cbfde70d3d8c16486bb2d3f8c..844c989fc4e0d131d823bf8a59951f35f30b7641 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -163,6 +163,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.enderDragonMaxHealth); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } @@ -1059,7 +1066,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected float sanitizeScale(float scale) { - return 1.0F; + return 1.0F; // Purpur - Configurable entity base attributes } // CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time. diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java index dbf3c7049fae08dc5c4ac491a5fc8141ab177a22..612df8799b80f1793ab9781212442098633e9d65 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -213,6 +213,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witherMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witherScale); + } + // Purpur end - Configurable entity base attributes + @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); @@ -435,7 +443,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { this.setInvulnerableTicks(i); if (this.tickCount % 10 == 0) { - this.heal(10.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.WITHER_SPAWN); // CraftBukkit + this.heal(this.getMaxHealth() / 30, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.WITHER_SPAWN); // CraftBukkit // Purpur - Configurable entity base attributes } } else { super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java index 1febee23188d91e2a27c182b97502e8c7ab696a2..4cd7975a8e9e55d6b6ded0b7e13d8da436e49c6c 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java @@ -76,6 +76,14 @@ public class Blaze extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.blazeMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.blazeScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java index cfd09a5ff326cf4ecc248901696ce1f623a8e7c0..ed1ccd712a2fe00740beeee4fe615976258f5c6c 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java @@ -137,6 +137,14 @@ public class Creeper extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creeperMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creeperScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java index e5d16ca14a40d520dce43dd3d9b6347aefbd25d7..57fb334f670d35aa181b13e12fa2c5f36da1dda6 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java @@ -43,6 +43,14 @@ public class ElderGuardian extends Guardian { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.elderGuardianMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.elderGuardianScale); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java index bd78d8c3e8c1d9b581c751d336322fbfe20dacef..29570047bfc78a8993b0bbd7168cb4fe318a6be6 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -106,6 +106,14 @@ public class EnderMan extends Monster implements NeutralMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.endermanMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.endermanScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java index 844ba943a2a752f9b25506b644a4b4abc981b4cb..c6ae00f6ab83743b9ce43d9e55f04ba23b0de0f1 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java @@ -64,6 +64,14 @@ public class Endermite extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.endermiteMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.endermiteScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java index 451627153610f2c8db2403f73545c9af6dfd2e4b..7d97c00ae49629b97104631317aa6174741cdd5e 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -75,6 +75,14 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ghastMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ghastScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Giant.java b/net/minecraft/world/entity/monster/Giant.java index dcbe6bbce0baa4fad7fe180944beeb6ca4026f7d..416bb85fc87b5f9e372f33df8fe27f12e83834b9 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -35,6 +35,16 @@ public class Giant extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + protected void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.giantMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.giantScale); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.giantMovementSpeed); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.giantAttackDamage); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java index 4cf54e55de1ecc57061ad0c09e7966d6104f1cc2..1eaa4f255b01eddc93ddbc5615ad05e7d8273581 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -89,6 +89,14 @@ public class Guardian extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.guardianMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.guardianScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java index a3cd6d4b999fc49893794838c73370c19c6a66b6..e0fda9a975e00c49ba09db65d7b3fba8fa434757 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -46,6 +46,28 @@ public class MagmaCube extends Slime { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + protected String getMaxHealthEquation() { + return level().purpurConfig.magmaCubeMaxHealth; + } + + @Override + protected String getAttackDamageEquation() { + return level().purpurConfig.magmaCubeAttackDamage; + } + + @Override + protected java.util.Map getMaxHealthCache() { + return level().purpurConfig.magmaCubeMaxHealthCache; + } + + @Override + protected java.util.Map getAttackDamageCache() { + return level().purpurConfig.magmaCubeAttackDamageCache; + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java index 64e55d48bc81d6237970e86e6e1cc719831902fd..046d6d3b665d0dbb5403ebe91d18503ec7613936 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -140,7 +140,10 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); if (level().purpurConfig.phantomFlamesOnSwoop && attackPhase == AttackPhase.SWOOP) shoot(); // Purpur - Ridables - Phantom flames on swoop - this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6 + this.getPhantomSize()); + // Purpur start - Configurable entity base attributes + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(getFromCache(() -> this.level().purpurConfig.phantomMaxHealth, () -> this.level().purpurConfig.phantomMaxHealthCache, () -> 20.0D)); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(getFromCache(() -> this.level().purpurConfig.phantomAttackDamage, () -> this.level().purpurConfig.phantomAttackDamageCache, () -> (double) (6 + this.getPhantomSize()))); + // Purpur end - Configurable entity base attributes } public int getPhantomSize() { @@ -160,6 +163,23 @@ public class Phantom extends Mob implements Enemy { return this.getId() * 3; } + // Purpur start - Configurable entity base attributes + private double getFromCache(java.util.function.Supplier equation, java.util.function.Supplier> cache, java.util.function.Supplier defaultValue) { + int size = getPhantomSize(); + Double value = cache.get().get(size); + if (value == null) { + try { + value = ((Number) scriptEngine.eval("let size = " + size + "; " + equation.get())).doubleValue(); + } catch (javax.script.ScriptException e) { + e.printStackTrace(); + value = defaultValue.get(); + } + cache.get().put(size, value); + } + return value; + } + // Purpur end - Configurable entity base attributes + @Override public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java index f7807aac5a8f9c92ba77ac38c469ef14948197ac..86c55955ff6c0a411cde34999c7bd6ad07be5d4e 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java @@ -95,6 +95,14 @@ public class Ravager extends Raider { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ravagerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ravagerScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java index 9647741b67e1b4b7bbff0df22fc1bf3fb26afa73..30f2503ebd045b05f5594cef28389a694338d13a 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -125,6 +125,14 @@ public class Shulker extends AbstractGolem implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.shulkerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.shulkerScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -601,7 +609,7 @@ public class Shulker extends AbstractGolem implements Enemy { @Override protected float sanitizeScale(float scale) { - return Math.min(scale, 3.0F); + return Math.min(scale, MAX_SCALE); // Purpur - Configurable entity base attributes } private void setVariant(Optional variant) { diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java index cf305d4a0a71f91caa31757dcd8ca5be84fc3f03..1df006a0a49038f1e737194e7da8e0b27e6eeb95 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -55,6 +55,16 @@ public class Silverfish extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.silverfishMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.silverfishScale); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.silverfishMovementSpeed); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.silverfishAttackDamage); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java index 0c56f9ae47b9263ac65fd3593911e2c8479fc157..f93a2c58b5835e9ce8318d28e944533ef69df8ef 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java @@ -102,6 +102,39 @@ public class Slime extends Mob implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + protected String getMaxHealthEquation() { + return level().purpurConfig.slimeMaxHealth; + } + + protected String getAttackDamageEquation() { + return level().purpurConfig.slimeAttackDamage; + } + + protected java.util.Map getMaxHealthCache() { + return level().purpurConfig.slimeMaxHealthCache; + } + + protected java.util.Map getAttackDamageCache() { + return level().purpurConfig.slimeAttackDamageCache; + } + + protected double getFromCache(java.util.function.Supplier equation, java.util.function.Supplier> cache, java.util.function.Supplier defaultValue) { + int size = getSize(); + Double value = cache.get().get(size); + if (value == null) { + try { + value = ((Number) scriptEngine.eval("let size = " + size + "; " + equation.get())).doubleValue(); + } catch (javax.script.ScriptException e) { + e.printStackTrace(); + value = defaultValue.get(); + } + cache.get().put(size, value); + } + return value; + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -132,9 +165,9 @@ public class Slime extends Mob implements Enemy { this.entityData.set(ID_SIZE, i); this.reapplyPosition(); this.refreshDimensions(); - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(i * i); + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(getFromCache(this::getMaxHealthEquation, this::getMaxHealthCache, () -> (double) (size * size))); // Purpur - Configurable entity base attributes this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.2F + 0.1F * i); - this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(i); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(getFromCache(this::getAttackDamageEquation, this::getAttackDamageCache, () -> (double) i)); // Purpur - Configurable entity base attributes if (resetHealth) { this.setHealth(this.getMaxHealth()); } diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java index 46121b018c5dd87d888a3724df12a9af0d007772..3308e954c8f6deff89c6df0af01f7774e36b0385 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java @@ -109,6 +109,14 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.striderMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.striderScale); + } + // Purpur end - Configurable entity base attributes + public static boolean checkStriderSpawnRules( EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java index d567e2b9843606c36a61c83a3a4e2d181f3eefd9..32759864a8ff0c4e28ce80ae8906cbcf1927094e 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -102,6 +102,14 @@ public class Vex extends Monster implements TraceableEntity { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vexMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vexScale); + } + // Purpur end - Configurable entity base attributes + @Override public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java index bcb136e71db2272dc107304b52be41f83d6772b7..3c3c258d4cc7cf7376d0d3ad0794ec3611ab81ce 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -74,6 +74,14 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witchMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witchScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java index c4f009357e416ed4052e058d8bf3b8c3e9dfd4ae..e0192a13b8d7131024471569bf34329ba0f28287 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java @@ -104,6 +104,14 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zoglinScale); + } + // Purpur end - Configurable entity base attributes + @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java index 01d3d638e194ec5e812eea0ab96b100f4752ea18..a84edd4953e59daed6816531545a6ec1c914bce6 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java @@ -126,6 +126,14 @@ public class Creaking extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creakingMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creakingScale); + } + // Purpur end - Configurable entity base attributes + @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java index c84f009cb0498e9c1898e310f19cff80ec6989ea..baf81e1919e64af9d6da0a49b19e5f34cf962a79 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -114,6 +114,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.hoglinMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.hoglinScale); + } + // Purpur end - Configurable entity base attributes + @VisibleForTesting public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java index e40434d24c7a9ffe76c3410601942d0c8a963e30..46f79ed345ec51125364b49b244d6d005a3e64ae 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java @@ -66,6 +66,14 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.evokerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.evokerScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Illusioner.java b/net/minecraft/world/entity/monster/illager/Illusioner.java index 8a80c202752f56ba174c00531993795a4e621910..8fa53cccb73b2d8c599c898f298681735007d2a0 100644 --- a/net/minecraft/world/entity/monster/illager/Illusioner.java +++ b/net/minecraft/world/entity/monster/illager/Illusioner.java @@ -76,6 +76,16 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + protected void initAttributes() { + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.illusionerMovementSpeed); + this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level().purpurConfig.illusionerFollowRange); + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.illusionerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.illusionerScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java index 0b97c4fe89c8549841cbb79ecb9383a9be7a44af..1e43c69366287c7a191a6f8e3a7d5459743f07a2 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -82,6 +82,14 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pillagerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.pillagerScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java index 4162e7ee482829f0c5276a31d44ed4c5ee24c3cf..5f3857186e86e27fe237c62cec4af13ebf58debe 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -74,6 +74,14 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vindicatorMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vindicatorScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java index a42b84611836b970d0d7ddb602bd04d9ec850712..98241af88cc961470e07df47d128d8912338bd44 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -158,6 +158,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index e33809e9ccc4a65909f1c12ec4b0fdc4050aeee7..3d34bef7ffe9e66e77e3fc10b2c5869d98a4a5c9 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -82,6 +82,14 @@ public class PiglinBrute extends AbstractPiglin { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinBruteMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinBruteScale); + } + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Bogged.java b/net/minecraft/world/entity/monster/skeleton/Bogged.java index 10e66643a918184d858a4e6c9de7a6c2664fbcaf..f1e9cec85ce911a50bb83eff9228d6b98aa00d44 100644 --- a/net/minecraft/world/entity/monster/skeleton/Bogged.java +++ b/net/minecraft/world/entity/monster/skeleton/Bogged.java @@ -58,6 +58,14 @@ public class Bogged extends AbstractSkeleton implements Shearable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.boggedMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.boggedScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java index 7f8298892565b073373ad68f9c1399a9c565c29a..96d989cffc6ff72954ed92e2535c72992d489372 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java @@ -43,6 +43,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Ridables + // 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.skeletonMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java index 23ceecffe8f1b758433e02b61cae421c518cc841..575f30cc9a6166a4e0733cc33e8b5814acb92660 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -40,6 +40,13 @@ public class Stray extends AbstractSkeleton { } // Purpur end - Ridables + // 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.strayMaxHealth); + } + // Purpur end - Configurable entity base attributes + public static boolean checkStraySpawnRules( EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java index d49200718e7fab29ce5e55278b7584458bfb10e7..f38bb54c0f5d7797179e5e75eb8092baea7b9dcb 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -51,6 +51,14 @@ public class WitherSkeleton extends AbstractSkeleton { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witherSkeletonMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witherSkeletonScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/spider/CaveSpider.java b/net/minecraft/world/entity/monster/spider/CaveSpider.java index 17a9b046ccd8de37aa79501f7556a5a816dfa90f..a1391173cc4997df723c59f176726dde88491978 100644 --- a/net/minecraft/world/entity/monster/spider/CaveSpider.java +++ b/net/minecraft/world/entity/monster/spider/CaveSpider.java @@ -43,6 +43,14 @@ public class CaveSpider extends Spider { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.caveSpiderMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.caveSpiderScale); + } + // Purpur end - Configurable entity base attributes + @Override public boolean doHurtTarget(ServerLevel level, Entity target) { if (super.doHurtTarget(level, target)) { diff --git a/net/minecraft/world/entity/monster/spider/Spider.java b/net/minecraft/world/entity/monster/spider/Spider.java index 7a8b9c83490a05629e4996844a575ba4c7e9f156..6a9c807ed50dab4b65787d9f7269385103fa5f26 100644 --- a/net/minecraft/world/entity/monster/spider/Spider.java +++ b/net/minecraft/world/entity/monster/spider/Spider.java @@ -69,6 +69,14 @@ public class Spider extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.spiderMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.spiderScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java index 03c801d5982eed73fd8f56f63ccab570e83b8a53..b5d3bfb68d8f167e5d6439d15024597d7d2a40a7 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java @@ -96,6 +96,19 @@ public class Drowned extends Zombie implements RangedAttackMob { return new AmphibiousPathNavigation(this, level); } + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.drownedMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.drownedScale); + } + + @Override + protected void randomizeReinforcementsChance() { + this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.drownedSpawnReinforcements); + } + // Purpur end - Configurable entity base attributes + @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java index f18ac33d31ae23db02654658840b89ba03736bf3..03270138e6fae7ee28f958cafee5b74b18dce355 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java @@ -46,6 +46,18 @@ public class Husk extends Zombie { } // Purpur end - Ridables + // 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.huskMaxHealth); + } + + @Override + protected void randomizeReinforcementsChance() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.huskSpawnReinforcements); + } + // Purpur end - Configurable entity base attributes + @Override public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java index b2d322bee9343079c0c21cc7b47493df9cfd861e..d873ca9873e95f3a5869cb63a93b0643a9c867dc 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -120,6 +120,14 @@ public class Zombie extends Monster { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -604,7 +612,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { - this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * 0.1F); + this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieSpawnReinforcements); // Purpur - Configurable entity base attributes } class ZombieAttackTurtleEggGoal extends RemoveBlockGoal { diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java index d91a1aec302a93326a357311f1743fa87ec92fa3..0a02684ec00540b91a2a68e5787e51d15b3743a7 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java @@ -102,6 +102,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables + // 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.zombieVillagerMaxHealth); + } + + @Override + protected void randomizeReinforcementsChance() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieVillagerSpawnReinforcements); + } + // Purpur end - Configurable entity base attributes + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java index e2c5301a465e28cea057f9afec7e9d78090e1c9e..3ff8c95075f9d25c3a2e4160ee6d18057838a7b5 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -81,6 +81,14 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombifiedPiglinScale); + } + // Purpur end - Configurable entity base attributes + @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new SpearUseGoal<>(this, 1.0, 1.0, 10.0F, 2.0F)); @@ -267,7 +275,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { - this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0); + this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombifiedPiglinSpawnReinforcements); // Purpur - Configurable entity base attributes } @Override diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java index 6d4ef7b5d64639eb7fe400b2ed612c3b3552aa52..6f9658af51f1f30434756f871cf6ab5cd2f3a7ea 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java @@ -272,6 +272,14 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); + } + // Purpur end - Configurable entity base attributes + @Override public Brain getBrain() { return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java index 5c7da654ef967356173a9d85a8675a7dc61ef395..9d5dbaeafd899594425547fc58b87a1d0a52066e 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -85,6 +85,13 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over } // Purpur end - Ridables + // 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.wanderingTraderMaxHealth); + } + // Purpur end - Configurable entity base attributes + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this));