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/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java index 351f92e1627f465a9a292d4a5e5c256a8e323ab3..b6f52326f52ce2885ece346944a321d7c924a470 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java @@ -46,6 +46,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/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java index a6739650bfee639925a63f345ac39c6e0c5c3209..5208518ad9fe86e25b07aeffa9633407aa6f2f1c 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -278,6 +278,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected LivingEntity(EntityType entityType, Level level) { super(entityType, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(entityType), 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()); @@ -297,6 +298,8 @@ public abstract class LivingEntity extends Entity implements Attackable { 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 99845dde0c633714acefb0bb482d8422d946dd46..581894f58df1df4b50aa537252cb4be6bbcebf80 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java @@ -95,6 +95,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/Bee.java b/net/minecraft/world/entity/animal/Bee.java index e55507fa09001b431519ef9c76bf444d7df3f7ea..d07a708f06ba738369882ddaa968c2de9c6c560e 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java @@ -472,6 +472,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 int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java index 74a44f97dcf4fabeac28a2f8b31e9b717d47ea49..d2813c68df511a2702f2b57c31f828730a9a21c8 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java @@ -116,6 +116,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/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java index 8708a6e5a493b6150671b7bdd6b9971371ef309c..40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java @@ -88,6 +88,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/Cod.java b/net/minecraft/world/entity/animal/Cod.java index 651c9243902e3c48fb438913974e996d67d6f746..ed52fbbf93e7a238d0f45981f8629ba8613bf3d4 100644 --- a/net/minecraft/world/entity/animal/Cod.java +++ b/net/minecraft/world/entity/animal/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/Cow.java b/net/minecraft/world/entity/animal/Cow.java index ff1b8c93baccf1d417ef0f9338a6f8d66716dafc..7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java @@ -45,6 +45,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/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java index 144b163a4a82997ca88e906bbadcf5835636aece..932ec7ed4ec102f64fa977835d2c7ebe23afa6e3 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java @@ -150,6 +150,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 + @Nullable @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java index eb25d655140e425208ee9eeae24ebb756f1b7306..8d69b6bb1d5efd0b47595a12acdd2088cddd5ace 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java @@ -179,6 +179,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/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java index 3a78342a9ce9b5393a280530b50a8c843e201845..fd0d1abcb34862fc7a812f1e3d96969a5c917352 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/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/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java index f04342dd4addb2be47533f12a2a475f12c1869f1..af035af33db993cf7c573b87df576529e98a842e 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/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/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java index b8780911350ac5f4f10acdbed2b13523c8692344..b05aea388ddadaa5bc28bee9f3f4d7fbf673eaa7 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java @@ -80,6 +80,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/Panda.java b/net/minecraft/world/entity/animal/Panda.java index 44af6a2bcb1ba60a487555c5240b38798798b769..ebeed4fab4fff87ac61a3a4ef28443eb4746c3fa 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -132,6 +132,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.java b/net/minecraft/world/entity/animal/Parrot.java index 573efbc5f5f4ad0be30868c7faa058e68bf2fd67..94031cbd5d40c9a5536b1d1c404bbe2666e8ae0a 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java @@ -191,6 +191,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 + @Nullable @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java index 9e15bf55aa3986a227452fb1a5ebc4315f6f4d6c..70d5debdf6a7e9b631e21b47e7e35b15c065410b 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java @@ -82,6 +82,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.java b/net/minecraft/world/entity/animal/PolarBear.java index 4561b590b0068bfbcfd990bbf8b6640c0bd1493c..d6f5c2573f5fd072a7eaed39790b43e7a67cf3b8 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java @@ -116,6 +116,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 + @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java index c35973498b0abae2dafa63f30ed5e6ca87f6baa5..bed7d937f02d1fbc8fdd277a2d0524e79b19f707 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java @@ -58,6 +58,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/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java index 338a1d3f1352f49ba5b53c55a49abce3ded2b0c0..8e3dcd912d7631bc7863a576e28f85c8d1cb2818 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java @@ -144,6 +144,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/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java index 2b60d92eec3192416b0c39ddaa1fa490d15a6137..8559e7e8c5163eb55b997521dca2e96b5ae3c9bc 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java @@ -50,6 +50,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/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java index aca62391131333d604d21c9aaf2bcea620dc51b3..764429b9d20ac105c9ae3b050adf5d3defbd6038 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/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/Squid.java b/net/minecraft/world/entity/animal/Squid.java index 21ff0b49a1df9b8a95cb2fdf7b43d9a676a497a6..2a0dc779ec2a53a4feb4d2d665cf9d820113ba04 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java @@ -91,6 +91,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/TropicalFish.java b/net/minecraft/world/entity/animal/TropicalFish.java index d7bea58644dd707b835e0c728b2c89c697c7e554..946874b3146bd7b226b4cb07110eec57c2968bb7 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java @@ -88,6 +88,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/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java index 7c97f917b0cc5652c20abdd26428cccad10b8757..11772e81d932fae6542a0cb2d283ef91b5bbbd76 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java @@ -102,6 +102,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/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java index 31371684bb2bddc6bf9592bef1190af3b09f4d65..062f2ca0c8f2443cf890dc917b9de46310eb79bc 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -171,6 +171,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 2b38e942492b3324683e05d36ed906462da92ac4..67a93960b3c6fe5725783ebf9f1c5b57e931f58c 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java @@ -98,6 +98,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 f3f0f5d7fe79e87b893aa52113f02a774ccc057a..83b1080765eb49a8a606258bb2db8b1a7daea081 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -137,6 +137,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/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java index 3d4efc2918fd10a63065a052d9e460b49489cf00..6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java @@ -334,6 +334,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/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java index 8bd9fd0a017b9822129119d7e16e872f0bdc8c2d..601e2912790759487c8d2f270f30a82689c52236 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -138,6 +138,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 @@ -1054,7 +1094,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/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java index 66dda36aeb668488076f0c93dc83ab6cc4ec1a31..3aa12702cd1f4ef160180bc6ba64a6566cbddc9d 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/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/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java index 5b2d1fedf61880990ca29b51b3d83a19e79047d1..e0346014de51958976459eeb6677d886e7f261ab 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java @@ -53,6 +53,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/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java index b60fa4cb07d8dc6b52e76b5e9f596bafc815ba2d..10e7724d424cd39c96b91cf3de4bc4524d9311a4 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java @@ -129,6 +129,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/horse/Mule.java b/net/minecraft/world/entity/animal/horse/Mule.java index b1c96936ba8dcba4435a649dd7e6ec3c921c3702..0107bb5fc029c5390d73e9a4cd08c13838a2ded5 100644 --- a/net/minecraft/world/entity/animal/horse/Mule.java +++ b/net/minecraft/world/entity/animal/horse/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/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java index b8bdf9d4665cbfa590842727079a740274f13c34..b7903386ce4648ef577b1d4875866b7c268c888b 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -48,6 +48,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/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java index d67d24e64d387a7f6a18aef1c8dcab1c6df3f824..4664de247745c5346f1d131b19aac0512d394647 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java @@ -52,6 +52,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/horse/ZombieHorse.java b/net/minecraft/world/entity/animal/horse/ZombieHorse.java index 45d09ebcc9ce4321285a4ec49e8ee369290f6b2c..3d597bd355b6c918ea1bf4b7d537ad4f76e218d2 100644 --- a/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -45,6 +45,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, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java index a3df1d80dbaefb5bc7e7e2618039876bcf1d3462..7d4d13d78da258bdceae82cc57e0aa5a3e06fd7d 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java @@ -101,6 +101,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 6c252b8021dbeb2a9ffee8a3744ac0165fd032e8..fab5a8d0974aab57a1e4a803eb4f3b47a3ee4a07 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -105,6 +105,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/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java index cff9bc3d8c9ef1935c25c4001dfd638855062573..601343a604322bae7ef91eecc91da70ee377d8f3 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java @@ -209,6 +209,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 a414934ae4332cc6cf622d4bb19c5937713f92a2..793567170b33ba21016b8767598d294fca4acec4 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -164,6 +164,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); } @@ -1062,7 +1069,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 15e2c0d566256c4ba175e991d6d7fd4fdcd49c8e..f0ec9334d9e6bf879568a085db691c46f7c652b6 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -212,6 +212,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); @@ -434,7 +442,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 971b974c6717a544f7f96c441cd76e9dc8d0cc2c..1636e2809701013a18700ac17807fe7ecf191aa5 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java @@ -75,6 +75,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/Bogged.java b/net/minecraft/world/entity/monster/Bogged.java index f572ee0a8edd6c4adb17c06083e165d4d8ed8550..bc8f46b656895d916e44a9e1dc9175da96c2fde8 100644 --- a/net/minecraft/world/entity/monster/Bogged.java +++ b/net/minecraft/world/entity/monster/Bogged.java @@ -59,6 +59,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/CaveSpider.java b/net/minecraft/world/entity/monster/CaveSpider.java index 4873a3d8dd9c160ecdbda594ee546c35ec03a1e7..64eecd8d1acd318743800c1daa77cd97097a0f7c 100644 --- a/net/minecraft/world/entity/monster/CaveSpider.java +++ b/net/minecraft/world/entity/monster/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 source) { if (super.doHurtTarget(level, source)) { diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java index 562641cdb76e7a50706459bee8a2dcdf441588cd..53a7390c61b9ada8784eae0c9b4e78ee85c68317 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java @@ -135,6 +135,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/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java index be7b7eb8328277dc790b9953161c3603d3bbe873..526de34154d873d1479f9276981e181be959ebef 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java @@ -92,6 +92,19 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Ridables + // 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/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java index eccbb27aa7efa6e24e04db114b06c7dbf54f9938..15f037dbd9bafc8a978911dfa04c42f3c19dc7fd 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 f991e59e896fc39da8f318871168b4c9bb0d8328..c01c91db94136700f9501624763e3bd735986a9f 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -108,6 +108,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 ddb40c13cee7db16fc9b094828356e743e9507f2..a3095f2a5ff162d502502ad2ed0a485daba86962 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java @@ -63,6 +63,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/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java index 889f6be331b3b7b80de60c414b77d68947477f9e..5773dd99ad2b014dde6666f4b32a1e6ee024a9fc 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java @@ -67,6 +67,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/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java index e087a2348dee66e0374246e992ed66bb8f18dce0..a55d588709bbf04d4267bd991fb3be0daaba34d4 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -77,6 +77,14 @@ public class Ghast extends FlyingMob 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 135f83484ac31db7dcc225ba6f94e2e4ca27eea8..13021800af7cc9263ef4f393f9cfbda5061a32ae 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).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java index 26fb38b9741304f4fe461c929ead0f392255a3de..2b03af6e0f378d855c42fa688d0cd2bc8480102b 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -90,6 +90,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/Husk.java b/net/minecraft/world/entity/monster/Husk.java index 0335e85f196363c06597812149e9a93cba57fa9e..5b0794bd87423715cada1f860b4141fdacd9ede6 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java @@ -38,6 +38,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 + public static boolean checkHuskSpawnRules( EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Illusioner.java b/net/minecraft/world/entity/monster/Illusioner.java index d75eb765f271fb7e33d0332079aea024788dc227..09804a8c789bff4f40277c2697c3f9aed00c4d15 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -74,6 +74,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/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java index 4a1299d6cee2807522de0c2d0d4745c5810e4121..bb1364c4a220cc93f7ac01cbaa617561de4cd2e3 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 2653cf2c353d7ae360201e74c4860a4745dd4948..2f14561a3722f8175a234ad656ef64d4c58e3b96 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -152,7 +152,10 @@ public class Phantom extends FlyingMob 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() { @@ -177,6 +180,23 @@ public class Phantom extends FlyingMob implements Enemy { return true; } + // 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/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java index 852316c9a9d0860a538eae32001e60f05dc6938f..eb4fcf0e78c39a4b94b7edb733694a87e3103552 100644 --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java @@ -80,6 +80,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/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java index 382ef8b0f8d5c5ef6a7698097e9b41b7adc04353..3adf0ec66db61b556a06ffe0fe835b57f8520948 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java @@ -92,6 +92,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 14cddb216b32990c2ce2381a4d6bf6f76c686f95..2b19edafe00be425427f47cac045bf301e3caa39 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -126,6 +126,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 @@ -609,7 +617,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 19dcc657fd2a995638d5e23c2b043d012d978e79..c200d57841304ba0d7a76fdd9a440fe9f2b25136 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -56,6 +56,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/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java index 9a197c2be40e0a69f4a68ff045c2395802f0a5f3..54941e5f93579db512472d324a48a9b272787b91 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/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/Slime.java b/net/minecraft/world/entity/monster/Slime.java index 9127e99d632bcd01c2f042c33dc87dd49736b96f..015af82ab82c3676a7b80c01b83eaf61ee28b61b 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java @@ -100,6 +100,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 @@ -130,9 +163,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/Spider.java b/net/minecraft/world/entity/monster/Spider.java index 5721a690859a1232234c9f6a4385f7185d9800ec..c2bcf769a85a28616472b050cd09d3d6cc60e81f 100644 --- a/net/minecraft/world/entity/monster/Spider.java +++ b/net/minecraft/world/entity/monster/Spider.java @@ -67,6 +67,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/Stray.java b/net/minecraft/world/entity/monster/Stray.java index 4a7dbd1e4d927240433882a95822e9edfc83b827..b5465b552c5aea7603a54cfdeafe451bfaf38bf2 100644 --- a/net/minecraft/world/entity/monster/Stray.java +++ b/net/minecraft/world/entity/monster/Stray.java @@ -39,6 +39,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/Strider.java b/net/minecraft/world/entity/monster/Strider.java index bb46a6ec3ad6a7d0943bf61028d5f9abf76bbeb7..4ea92637677997ab4c98da437394f5682ba2389a 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 129c712f767fbbdcc7d0df83f838194102efcd15..43de5ca497f5e3ac3d64345cb998f392852e6e3b 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/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java index 922c5ce69fc2a3cb53dc230f4efe96bde91cd96a..01a5357d5359394b61f2456fdee8bf3aadf0ca32 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java @@ -73,6 +73,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/Witch.java b/net/minecraft/world/entity/monster/Witch.java index 4c5372be4bfc68184a88825214d36477f83edf73..2ff6ae7e1c809fa6607cf4d8685ba9b8ac46064c 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -73,6 +73,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/WitherSkeleton.java b/net/minecraft/world/entity/monster/WitherSkeleton.java index d8c10f5f93e3ca92a49e1df3216256450c62f219..213530a2378411db2bc597ba7e0bb68cfdb3ebc9 100644 --- a/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/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/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java index 636b1e88f6d76a4c0110fa34e89634eee3fbdcdf..9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java @@ -103,6 +103,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/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java index f9233f0689b26a8c65d60ab9421c1216d436bae7..126c5982c1b274cad67649b8e26391c7c4011bab 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java @@ -121,6 +121,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 @@ -633,7 +641,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 } @Override diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java index 2d3636697a544e78113fc1e6902dd216acee070b..239e78203dec09653ef8e001aef3e4b95b0f7a7c 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java @@ -94,6 +94,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/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/ZombifiedPiglin.java index f16aa79ba5137cd6132452c21b0dc81cbf4fac8b..ada982eb4dca7c75a5fd3576d3793f1f12819e51 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -80,6 +80,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 public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; @@ -265,7 +273,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 } @Nullable diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java index a23d624abb0622d362af0dc816425283e25c479a..d19f34616942177e736ba507c27ec93ba1e1e903 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java @@ -125,6 +125,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 7c83e0612b8b0d48966aa3808d86daac79753584..6b0eb12e9d879f22098eb2294d0d73db6ca266ed 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -112,6 +112,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/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java index 589e3014fb86448456c249c0255186644abb13c2..b37038568b83db1602dca06aa06d72c4c4978cdd 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -153,6 +153,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 public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index 4c8e49ba064241ec7ac505fa6f5df6d7f9c009b6..f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09 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/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java index 15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52..b2687ee9494d491971fa4124382b214d7c3ba9be 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -271,6 +271,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.java b/net/minecraft/world/entity/npc/WanderingTrader.java index 21ab5911d52e49ec2de99071cb85ff2daa090dc4..4abc4037a059b9c1dc58bf7a776e6269c5188868 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java @@ -83,6 +83,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // 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));