Files
Purpur/patches/server/0007-Configurable-entity-base-attributes.patch
granny 20e182a936 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@730882f Chunk System and Starlight WIP
PaperMC/Paper@512fd08 Update Gradle Wrapper to v8.8
PaperMC/Paper@097284d Bump tiny-remapper to 0.10.3
PaperMC/Paper@ee9b820 Update more optimization patches
PaperMC/Paper@5d834b1 rebuild patches
PaperMC/Paper@4bc15f1 Updated Upstream (Bukkit/CraftBukkit)
PaperMC/Paper@0b6701d Revert DamageSource#getCausingEntity to vanilla
PaperMC/Paper@5bd7f4e Update AbstractArrow item method implementations for 1.20.6 (#10885)
PaperMC/Paper@fb511c6 Fix Player#sendBlockState (#10855)
PaperMC/Paper@b420038 Fix ItemMeta#removeEnchantments (#10886)
PaperMC/Paper@a835ad1 Merge remote-tracking branch 'origin/dev/1.21' into dev/1.21
PaperMC/Paper@04dad71 Improve enchantWithLevels logic
PaperMC/Paper@0008fa1 Add back more optimization patches
PaperMC/Paper@56b5b7d Fix max chunk status checks
PaperMC/Paper@c1aefee correctly change enchantment registry to a 'delayed' version
PaperMC/Paper@d41636f Add back RecipeIterator fixes patch (#10887)
PaperMC/Paper@7df4725 Configurable damage tick when blocking with shield (#10877)
PaperMC/Paper@3555a77 Properly forward DispenseEvent #getItem to saddle
PaperMC/Paper@e339ec2 Deprecate BlockData#getDestroySpeed for removal
PaperMC/Paper@b090c65 Remove unnecessary changes from chunk status fix
PaperMC/Paper@5e7cd07 add some generated typed/tag keys
PaperMC/Paper@5a5412c Owen fixing stuff!!!
PaperMC/Paper@7240d9d Restore functionality to sand dupe setting
2024-06-15 23:01:19 -07:00

2905 lines
153 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Thu, 10 Dec 2020 16:44:54 -0600
Subject: [PATCH] Configurable entity base attributes
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 67aa0563c33bc9a98facfff6bf5a1a8ace483d99..4c7439645974fd20f9f23196c5fbdce6ce324d13 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -168,7 +168,7 @@ import org.bukkit.plugin.PluginManager;
// CraftBukkit end
public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess, CommandSource, ScoreHolder, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity { // Paper - rewrite chunk system
-
+ public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur
// CraftBukkit start
private static final int CURRENT_LEVEL = 2;
public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation
diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java
index aa76a24421cdb3908a3544d92eb3d1e3c2ebedc4..8211c152e6f4232e82e452b08047e4579465d770 100644
--- a/src/main/java/net/minecraft/world/entity/GlowSquid.java
+++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java
@@ -36,6 +36,11 @@ public class GlowSquid extends Squid {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.glowSquidMaxHealth);
+ }
+
@Override
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 6b5d09b34c9fe88548a14e64e9aa42841e9031f5..8bad6672c689c7bc65e5941887b3826ad99e36bb 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -314,6 +314,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.activeLocationDependentEnchantments = new Reference2ObjectArrayMap();
this.appliedScale = 1.0F;
this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur
+ this.initAttributes(); // Purpur
this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit
// CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor
this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue());
@@ -328,6 +329,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap()))));
}
+ protected void initAttributes() {}// Purpur
+
public Brain<?> getBrain() {
return this.brain;
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index c4a09778ca6bf5c15b588234bcadec3496017e3d..49adf3f230fa34289a2ce09a9d829f5dbf952fc8 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -265,6 +265,18 @@ public class Bat extends AmbientCreature {
}
}
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.batMaxHealth);
+ this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level().purpurConfig.batFollowRange);
+ this.getAttribute(Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level().purpurConfig.batKnockbackResistance);
+ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.batMovementSpeed);
+ this.getAttribute(Attributes.FLYING_SPEED).setBaseValue(this.level().purpurConfig.batFlyingSpeed);
+ this.getAttribute(Attributes.ARMOR).setBaseValue(this.level().purpurConfig.batArmor);
+ this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level().purpurConfig.batArmorToughness);
+ this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level().purpurConfig.batAttackKnockback);
+ }
+
@Override
public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index f7ff98245583ab471ce1fa2f84f4684e195cdacc..3a7e413ba17901ed8e4ef0299555305c62f0d303 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -478,6 +478,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
}
}
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.beeMaxHealth);
+ }
+
@Override
public int getRemainingPersistentAngerTime() {
return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
index 07f0ca108d515df1ff97ba79265bbf2c8bfbc8a5..5d89b2c9bd6ee2d0d5176c93988b97ff2e913e83 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
@@ -128,6 +128,13 @@ public class Cat extends TamableAnimal implements VariantHolder<Holder<CatVarian
}
// Purpur end
+ // Purpur start
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.catMaxHealth);
+ }
+ // Purpur end
+
public ResourceLocation getTextureId() {
return ((CatVariant) this.getVariant().value()).texture();
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
index 2af1bab53530bcf0e06fe6ed5577880f019f6c22..ca213cb0b8618b85c67066236eaba87c0439376f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
@@ -71,6 +71,11 @@ public class Chicken extends Animal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cod.java b/src/main/java/net/minecraft/world/entity/animal/Cod.java
index e2a98b45e56a368de19bb65e304370a5998c7cb9..3d61c2d5da103de68242c16d85c703813979d179 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cod.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java
@@ -25,6 +25,11 @@ public class Cod extends AbstractSchoolingFish {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.codMaxHealth);
+ }
+
@Override
public ItemStack getBucketItemStack() {
return new ItemStack(Items.COD_BUCKET);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 8c6bda1ed0408fa1c7cc772097159410443b7fae..478663c16a5763dda9a6c3edbafc843b8dfe06f2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -61,6 +61,11 @@ public class Cow extends Animal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.cowMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
index df68b516576f0984d3b18972114a1af247f0a2ad..e60464efd9986e1cf857d8595b13535df7ffc7b1 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -157,6 +157,11 @@ public class Dolphin extends WaterAnimal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.dolphinMaxHealth);
+ }
+
@Nullable
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index d23566a00226d99a4309b2b8adf49e20c1c5f19d..473c857b83b87d824800eb91b2019bcf106189ae 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -183,6 +183,11 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth);
+ }
+
@Override
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
index 1cecb12d9c9958239a71a8599fcd787d07953c76..9ea96c02d08b342b42b5600acc703be359023dbe 100644
--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
@@ -77,6 +77,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
public boolean isControllable() {
return level().purpurConfig.ironGolemControllable;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ironGolemMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
index 11944ee34fc7e3e5551b9e18a563164f96898a54..b47dddb2fc6058a90665ccbd362088d9a2e837b5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -81,6 +81,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.mooshroomMaxHealth);
+ }
+
@Override
public float getWalkTargetValue(BlockPos pos, LevelReader world) {
return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
index 0083119b44ef10e8ebc4414828f0d5fd6f68a830..0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
@@ -83,6 +83,11 @@ public class Ocelot extends Animal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ocelotMaxHealth);
+ }
+
public boolean isTrusting() {
return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java
index fff8abfe14be823867aa9bd145146763cfe83148..0fd0358d287604d0ff1f52f0c71633586d100e3e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java
@@ -147,6 +147,12 @@ public class Panda extends Animal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pandaMaxHealth);
+ setAttributes();
+ }
+
@Override
public boolean canTakeItem(ItemStack stack) {
EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack);
@@ -665,7 +671,10 @@ public class Panda extends Animal {
public void setAttributes() {
if (this.isWeak()) {
- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(10.0D);
+ // Purpur start
+ net.minecraft.world.entity.ai.attributes.AttributeInstance maxHealth = this.getAttribute(Attributes.MAX_HEALTH);
+ maxHealth.setBaseValue(maxHealth.getValue() / 2);
+ // Purpur end
}
if (this.isLazy()) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
index 0549fafbd6e76cf1b0d4e56e4fc745c4773f4c5d..17983481386709110b7c4749ec8432866454492d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -186,6 +186,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder<Parrot
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.parrotMaxHealth);
+ }
+
@Nullable
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java
index a6550df2eb2ccf0f5cb2cee49b996a2457c4c142..0f7e77e4f72be611a34ebe00d9979179519c54d9 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java
@@ -81,6 +81,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pigMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
index 5aeeb7b57a37ea49a28b2e244fb99a78320ed006..9bb4fd13e3c60ed889f4acd941b48922c9a4e8df 100644
--- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
+++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
@@ -93,6 +93,11 @@ public class PolarBear extends Animal implements NeutralMob {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.polarBearMaxHealth);
+ }
+
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
index d75016647c513841358d08e5931821ecf8c21c2a..0682df1037e23068c715f7bc06f1dc461641bb2f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java
@@ -63,6 +63,11 @@ public class Pufferfish extends AbstractFish {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pufferfishMaxHealth);
+ }
+
@Override
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
index ee13da112fb4f9b4f8543cd72485d39d2450b9e5..826484123d864172a73e3d0d6e16923533748ea1 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
@@ -140,6 +140,11 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> {
}
wasOnGround = onGround;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java
index 87c442fb198cad8671ad1419e589a5a67c4fdca8..742805994f29a18af444912b10af631d2c60cacf 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java
@@ -25,6 +25,11 @@ public class Salmon extends AbstractSchoolingFish {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.salmonMaxHealth);
+ }
+
@Override
public int getMaxSchoolSize() {
return 5;
diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
index c70c78d7aa046995e77eadf348d434bd131c2380..90dff2e658e8b77d37952080d389e1f2db47264f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
@@ -132,6 +132,11 @@ public class Sheep extends Animal implements Shearable {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.sheepMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.eatBlockGoal = new EatBlockGoal(this);
diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
index d51b486afb83bf3e12046ed5e61e73eec5bd7c7c..a54893d51cc1ce204e59a6ffe8b84228775af4da 100644
--- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
@@ -69,6 +69,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snowGolemMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index fddd8693858f9b1d15b0fddeacc030339ac39c0d..eb85356f0e2d1dc2eeecb30a36f88df900eb5caa 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -67,6 +67,11 @@ public class Squid extends WaterAnimal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
index 18dcb67d246b63637d8c948b6c3f48c58d71c339..327b1805d9d4069212a8772ff189c9ab24ae1183 100644
--- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
+++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java
@@ -79,6 +79,11 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.tropicalFishMaxHealth);
+ }
+
public static String getPredefinedName(int variant) {
return "entity.minecraft.tropical_fish.predefined." + variant;
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
index 960eaebcb12d32bc51026c48e4b5e09effb66dda..d24697dc1e3cdc5eb61632935e81e25b1e341287 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
@@ -104,6 +104,11 @@ public class Turtle extends Animal {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.turtleMaxHealth);
+ }
+
public void setHomePos(BlockPos pos) {
this.entityData.set(Turtle.HOME_POS, pos);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index 1ae38914582cfb17da882304c8bcba84a7793f79..81ca20878d552d9b674c638dbd8cdebe9e666ec5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -148,6 +148,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wolfMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java
index 6af72246e7f9bb845a497ef0f3394e634996fd40..b7ea18861b4516a4895afee2551e5848598d8e8b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java
+++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java
@@ -93,6 +93,11 @@ public class Armadillo extends Animal {
public boolean isControllable() {
return level().purpurConfig.armadilloControllable;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.armadilloMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index 384fb16dac5eede49d89ad9fdcddcec442f0e7ca..d7cf42cee8ce84b62a2ab12519d3d66234d8dedd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -114,6 +114,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder<Axolo
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.axolotlMaxHealth);
+ }
+
@Override
public Map<String, Vector3f> getModelRotationValues() {
return this.modelRotationValues;
diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java
index 32c10771db71c1cd190769614edd1c24762d32c6..e0c981cef6992c4a83813c6f77fe11841fe11c1c 100644
--- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java
+++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java
@@ -316,6 +316,23 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl
return this.dashCooldown;
}
+ // Purpur start
+ @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
+
@Override
protected SoundEvent getAmbientSound() {
return SoundEvents.CAMEL_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
index 28b5bda64b5f7a5b1ac8551bb05bf3f6fa522364..4eec1fe4e5996817c26c4f7e701e97fd5d8dcf60 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -231,6 +231,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
}
// Purpur end
+ @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.4000000059604645D + random.nextDouble() * 0.2D + random.nextDouble() * 0.2D + random.nextDouble() * 0.2D;
+ }
+
+ protected double generateSpeed(RandomSource random) {
+ return (0.44999998807907104D + random.nextDouble() * 0.3D + random.nextDouble() * 0.3D + random.nextDouble() * 0.3D) * 0.25D;
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur
@@ -1261,7 +1299,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
entityData = new AgeableMob.AgeableMobGroupData(0.2F);
}
- this.randomizeAttributes(world.getRandom());
+ // this.randomizeAttributes(world.getRandom()); // Purpur - replaced by initAttributes()
return super.finalizeSpawn(world, difficulty, spawnReason, (SpawnGroupData) entityData);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
index 1febe8e173886d501e40331c12261701bd36b0f6..b47a72ffb8b947cea5d4bc6ee37b824c4161be31 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
@@ -22,6 +22,21 @@ public class Donkey extends AbstractChestedHorse {
}
// Purpur end
+ @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);
+ }
+
@Override
protected SoundEvent getAmbientSound() {
return SoundEvents.DONKEY_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
index 91bee4729074fdabadd40641050e49ef0d0c760e..273365b9bca6e26760f45a794c1ebef1f9118c43 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
@@ -52,6 +52,21 @@ public class Horse extends AbstractHorse implements VariantHolder<Variant> {
}
// Purpur end
+ @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);
+ }
+
@Override
protected void randomizeAttributes(RandomSource random) {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt));
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index b339f61e15f29666ca7ff2d820bc22723738f422..6098251783c7c24fe2510c170d628462023d8ab2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -125,6 +125,21 @@ public class Llama extends AbstractChestedHorse implements VariantHolder<Llama.V
}
// Purpur end
+ @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);
+ }
+
public boolean isTraderLlama() {
return false;
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
index 1d18c983efad3ea309e7bc2a7c75d60d46ab80a7..68fe99ea6d683dd18171d35764b4cb319433f6e0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
@@ -21,6 +21,21 @@ public class Mule extends AbstractChestedHorse {
}
// Purpur end
+ @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);
+ }
+
@Override
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
index b3ce3c484c2e447e2d9fa52e1ccc30b2e4883923..6180f750ed159e35d20bbaefc57bdd7293c657ec 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
@@ -49,6 +49,21 @@ public class SkeletonHorse extends AbstractHorse {
}
// Purpur end
+ @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);
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, 0.20000000298023224D);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
index 2abc4a5a9043d7c8643b27b7ba874d42bbdc04b7..af29ba1512bfda03718fb01ecff8d86b4e927611 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
@@ -52,6 +52,21 @@ public class TraderLlama extends Llama {
}
// Purpur end
+ @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);
+ }
+
@Override
public boolean isTraderLlama() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
index 2cf47ea1cedc1cecfeb4d2bcebc0810a19f64022..d2b3859f9c69e6d73fa859db858d38dd41fa35cd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
@@ -45,6 +45,21 @@ public class ZombieHorse extends AbstractHorse {
}
// Purpur end
+ @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);
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
index b96a041041509dbb52f325eb52f53b458ba3cc64..9caafde133bed014fde0e0b5339e859966c39134 100644
--- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
+++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
@@ -109,6 +109,11 @@ public class Sniffer extends Animal {
public boolean isControllable() {
return level().purpurConfig.snifferControllable;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snifferMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index bc2bcae9e18f76c2db1a75b4db9bd9874b9f79cf..4218c84f3bef499bd6ebd4df224d4dcc95f5ce6c 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -186,6 +186,11 @@ public class EnderDragon extends Mob implements Enemy {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.enderDragonMaxHealth);
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
index 57a91dc073739b81d5acb973bf8c9c74a4a825cd..c4894f62a2c3d84d063e5caa5a38df80575660cb 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -116,6 +116,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
this.xpReward = 50;
}
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witherMaxHealth);
+ }
+
@Override
protected PathNavigation createNavigation(Level world) {
FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world);
@@ -428,7 +433,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
this.setInvulnerableTicks(i);
if (this.tickCount % 10 == 0) {
- this.heal(10.0F, EntityRegainHealthEvent.RegainReason.WITHER_SPAWN); // CraftBukkit
+ this.heal(this.getMaxHealth() / 33, EntityRegainHealthEvent.RegainReason.WITHER_SPAWN); // CraftBukkit // Purpur
}
} else {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
index d4aac30f9c9b356cec9fc1450a9e684faf030391..32f22f46e6b108b1ac9d8ac7b4bed0861696aaf1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
@@ -74,6 +74,11 @@ public class Blaze extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.blazeMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
index 3fc3ab534b00f26cf2f1a79c20909f25021164a1..8f08b45b7e6279e2f57e3921ebe879082a5fd261 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
@@ -60,6 +60,11 @@ public class Bogged extends AbstractSkeleton implements Shearable {
public boolean isControllable() {
return level().purpurConfig.boggedControllable;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.boggedMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
index 504996c8309fcd11de1dd166dee12d7e7db8db56..562f73dd5e617c10382c50be86ce88f4de1a4fe1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java
@@ -43,6 +43,11 @@ public class CaveSpider extends Spider {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.caveSpiderMaxHealth);
+ }
+
@Override
public boolean doHurtTarget(Entity target) {
if (super.doHurtTarget(target)) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index bc9db0ebd4280fe4dcb43bc47d5b7fc1f831394b..4cb68050f93027225b63176724b2c882902d8b71 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -252,6 +252,11 @@ public class Creeper extends Monster implements PowerableMob {
}
}
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creeperMaxHealth);
+ }
+
@Override
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREEPER_HURT;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
index 2b93338db154e6c0c3c8814adabaab761f08af08..02bceb31c517b94653573380ed29d9401a6b9ce8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -88,6 +88,16 @@ public class Drowned extends Zombie implements RangedAttackMob {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.drownedMaxHealth);
+ }
+
+ @Override
+ protected void randomizeReinforcementsChance() {
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.drownedSpawnReinforcements);
+ }
+
@Override
protected void addBehaviourGoals() {
this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D));
diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
index 430899602940aa04c21d45ae94bcc506352389cf..6152117a3e13252068e16945b4346a73a3090dda 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
@@ -45,6 +45,11 @@ public class ElderGuardian extends Guardian {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.elderGuardianMaxHealth);
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index d77e4a354983b6d6c4d5bbc37d886193af396dff..37b1d81f6a77affe345a78fefbd86a156e9db193 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -112,6 +112,11 @@ public class EnderMan extends Monster implements NeutralMob {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.endermanMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
index ee88933c7baba3bc82c6dc9d52291d5f9fc0f25d..52e2588b32b56b51bdbbdf63a290b2a4a4b02c13 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
@@ -55,6 +55,11 @@ public class Endermite extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.endermiteMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
index fb2409536741e814f20fa6793003c38ed898e443..3ac01d7e55934d145365790b6cb0c5a04ac2a74d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
@@ -69,6 +69,11 @@ public class Evoker extends SpellcasterIllager {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.evokerMaxHealth);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
index 24384a8bba59d335949ca641f8b2b599f769b316..82d8e23e7e0b8f806fe93597c8869518dde0cb36 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
@@ -131,6 +131,11 @@ public class Ghast extends FlyingMob implements Enemy {
}
}
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ghastMaxHealth);
+ }
+
@Override
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java
index 868e8383a890d76b4cfeac8b77b06e8f58d0a6dc..9602e59cbebeedc85ea75d2a41d3e74f0ff45b46 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Giant.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java
@@ -33,6 +33,14 @@ public class Giant extends Monster {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));
this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));
}
+
+ @Override
+ protected void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.giantMaxHealth);
+ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.giantMovementSpeed);
+ this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.giantAttackDamage);
+ }
+
// Purpur end
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
index 8fd7d578c4875ab1d6059dc445734e378c82b40f..af33e2b099ba1b41c0ac62d5504b130b6aa3e41b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -90,6 +90,11 @@ public class Guardian extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.guardianMaxHealth);
+ }
+
@Override
protected void registerGoals() {
MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
index 20ea3187626a667815245974df88189f7d6ffc76..805bfee8b061445de5b5d8aeb13c792178e25f7b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -39,6 +39,16 @@ public class Husk extends Zombie {
}
// Purpur end
+ @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);
+ }
+
public static boolean checkHuskSpawnRules(EntityType<Husk> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
index 58e9bf99ace27a59df56a378e25d9156e71aa313..060f82c4be49db618871dca29db7fd959a6ada0b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
@@ -74,6 +74,13 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob {
}
// Purpur end
+ @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);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
index d8501995801f636173a46481268d602f028dd034..7769faef7606afca7de8a11fd82a7c3cc61f0b32 100644
--- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
+++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java
@@ -46,6 +46,26 @@ public class MagmaCube extends Slime {
}
// Purpur end
+ @Override
+ protected String getMaxHealthEquation() {
+ return level().purpurConfig.magmaCubeMaxHealth;
+ }
+
+ @Override
+ protected String getAttackDamageEquation() {
+ return level().purpurConfig.magmaCubeAttackDamage;
+ }
+
+ @Override
+ protected java.util.Map<Integer, Double> getMaxHealthCache() {
+ return level().purpurConfig.magmaCubeMaxHealthCache;
+ }
+
+ @Override
+ protected java.util.Map<Integer, Double> getAttackDamageCache() {
+ return level().purpurConfig.magmaCubeAttackDamageCache;
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index e02992d97f552ecc8ce48e0c2e981d771dfabf19..4dea7aed072caf383986e09ead8ee790b35d9706 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -149,7 +149,10 @@ public class Phantom extends FlyingMob implements Enemy {
private void updatePhantomSizeInfo() {
this.refreshDimensions();
- this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue((double) (6 + this.getPhantomSize()));
+ // Purpur start
+ 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
}
public int getPhantomSize() {
@@ -174,6 +177,21 @@ public class Phantom extends FlyingMob implements Enemy {
return true;
}
+ private double getFromCache(java.util.function.Supplier<String> equation, java.util.function.Supplier<java.util.Map<Integer, Double>> cache, java.util.function.Supplier<Double> 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;
+ }
+
@Override
public void tick() {
super.tick();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
index adacd02cabde55a305b3643b6060f1792e122b1c..6dd51e6a3542436f5adb0e32b367517132261459 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
@@ -79,6 +79,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pillagerMaxHealth);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
index 9af3d05206ae64cfffbfb3fa89318e6184469204..ebbfd1fec85f1d4e099f02c91f3d7346b6bb3c7b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
@@ -92,6 +92,11 @@ public class Ravager extends Raider {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ravagerMaxHealth);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
index f36ccb36753d1b1a6c7706729e598078f4467644..123f8418544468d5c8d0d280f7dd44ebd25339d7 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -114,6 +114,11 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.shulkerMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
index 97cab38a47e302f40ca69ef4eb8f7dcb11eccf35..75f82922260b2c0666021e7ed42dfde401e1a9d6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
@@ -60,6 +60,11 @@ public class Silverfish extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.silverfishMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
index 8b40824f974bba1dae9166c2425be3d5d74a5ffd..ff42908b1204af4694761e84b1b29a658ea5bcef 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -44,6 +44,11 @@ public class Skeleton extends AbstractSkeleton {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.skeletonMaxHealth);
+ }
+
@Override
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java
index d34892ac85b08f017221c5bb98c7442a8017afbe..d7d16e091f25db68d22b0609f5a16360604e8cd7 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
@@ -103,6 +103,37 @@ public class Slime extends Mob implements Enemy {
}
return true; // do not jump() in wasd controller, let vanilla controller handle
}
+
+ protected String getMaxHealthEquation() {
+ return level().purpurConfig.slimeMaxHealth;
+ }
+
+ protected String getAttackDamageEquation() {
+ return level().purpurConfig.slimeAttackDamage;
+ }
+
+ protected java.util.Map<Integer, Double> getMaxHealthCache() {
+ return level().purpurConfig.slimeMaxHealthCache;
+ }
+
+ protected java.util.Map<Integer, Double> getAttackDamageCache() {
+ return level().purpurConfig.slimeAttackDamageCache;
+ }
+
+ protected double getFromCache(java.util.function.Supplier<String> equation, java.util.function.Supplier<java.util.Map<Integer, Double>> cache, java.util.function.Supplier<Double> 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
@Override
@@ -137,9 +168,9 @@ public class Slime extends Mob implements Enemy {
this.entityData.set(Slime.ID_SIZE, j);
this.reapplyPosition();
this.refreshDimensions();
- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double) (j * j));
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(getFromCache(this::getMaxHealthEquation, this::getMaxHealthCache, () -> (double) size * size)); // Purpur
this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue((double) (0.2F + 0.1F * (float) j));
- this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue((double) j);
+ this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(getFromCache(this::getAttackDamageEquation, this::getAttackDamageCache, () -> (double) j)); // Purpur
if (heal) {
this.setHealth(this.getMaxHealth());
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java
index 93d7cd8fe60b0c0bc3620bca2fe2cfbbee2e9421..c636705accfc0936d65f8fca6a2551becee2c4bf 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Spider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java
@@ -68,6 +68,11 @@ public class Spider extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.spiderMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java
index c47fb4577d31583806584dffe2b0b7674c5565af..ead3b59c853334cef8ad3ac38c928a5b9ebb7728 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java
@@ -39,6 +39,11 @@ public class Stray extends AbstractSkeleton {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.strayMaxHealth);
+ }
+
public static boolean checkStraySpawnRules(EntityType<Stray> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
BlockPos blockPos = pos;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java
index cc8a169858709cf3c63bd4973018b4c40429784a..b52f17211805d2abac6997476ae5c7ef53725802 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Strider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java
@@ -114,6 +114,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.striderMaxHealth);
+ }
+
public static boolean checkStriderSpawnRules(EntityType<Strider> type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index 34e88c071b5cedf0a66d5a81e70cccdb0768962e..fbd4c39a41b07e49abc610de8dd8ed748e299993 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -102,6 +102,11 @@ public class Vex extends Monster implements TraceableEntity {
public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) {
return false; // no fall damage please
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vexMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
index fa7af386c89f5f9181d345191dc545674a257996..eb6dce8b2dcc7f4e63c69cfa6acbd9b36a923706 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java
@@ -70,6 +70,11 @@ public class Vindicator extends AbstractIllager {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vindicatorMaxHealth);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java
index cd299591c00c1860b252c7abfdd2afa2abcbd537..e51c793addced500092da2305da2ce0acc87a5f2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
@@ -73,6 +73,11 @@ public class Witch extends Raider implements RangedAttackMob {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witchMaxHealth);
+ }
+
@Override
protected void registerGoals() {
super.registerGoals();
diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
index 09f7277283bf6ec44d3f1cc068893e0e1155eb61..3b59dd9509320aad82c4246154e61f479eae5f2b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
@@ -50,6 +50,11 @@ public class WitherSkeleton extends AbstractSkeleton {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witherSkeletonMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
index e683b14ed7bc0284fbbe93dedf6ab8c0423e0764..4bdbcb59051cc4bbc44aca2f70318275d4267b14 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java
@@ -96,6 +96,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth);
+ }
+
@Override
protected Brain.Provider<Zoglin> brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
index ba630beb18830e92432669f643dfd4cf8d2386fb..28587e17b15748880576f7a71e71a05c9c1bcf78 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -125,6 +125,11 @@ public class Zombie extends Monster {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
@@ -607,7 +612,7 @@ public class Zombie extends Monster {
}
protected void randomizeReinforcementsChance() {
- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * 0.10000000149011612D);
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieSpawnReinforcements); // Purpur
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
index 778edd9a723459ae41f521e953ea97eeac123c5f..199770256cf7f838228b5263ec9af8c6b18f30fb 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -100,6 +100,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
}
// Purpur end
+ @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);
+ }
+
@Override
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
index 18e6a56da9f714f4e5b78ec63df6cf310deb1247..883cd9a96a1d4276ca10c5558b553c36a1bb0d79 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java
@@ -80,6 +80,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth);
+ }
+
@Override
public void setPersistentAngerTarget(@Nullable UUID angryAt) {
this.persistentAngerTarget = angryAt;
@@ -262,7 +267,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob {
@Override
protected void randomizeReinforcementsChance() {
- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0D);
+ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombifiedPiglinSpawnReinforcements); // Purpur
}
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
index a2c0f73c84651f713781deaaa588a3c704eb32b3..373bf138f8b77413e6c29724e01572f64e0bc005 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -105,6 +105,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
public boolean isControllable() {
return level().purpurConfig.hoglinControllable;
}
+
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.hoglinMaxHealth);
+ }
// Purpur end
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
index a8df353eef6ab0dc2a6bd4242f6b85af91444ae9..faf5889c040a6c8fbac61a1d02036d32601f3d24 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -110,6 +110,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinMaxHealth);
+ }
+
@Override
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
index 17e2457bc83e7ee4402c10ee7d2ef5aa36901565..362f3fddd8090799278f4b4e58c5af5de00315f2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java
@@ -79,6 +79,11 @@ public class PiglinBrute extends AbstractPiglin {
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinBruteMaxHealth);
+ }
+
public static AttributeSupplier.Builder createAttributes() {
return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0);
}
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 7c4c545fca0858caac1cf98ad24b6d59be79dc32..97071390c66aaeb37c41778d6b7f8a5af4522274 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -178,6 +178,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth);
+ }
+
@Override
public Brain<Villager> getBrain() {
return (Brain<Villager>) super.getBrain(); // CraftBukkit - decompile error
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
index d514faecb9e6b244aa043383fa072316da939518..a4ca761f6e8e6e8f86fc20ce5e3dcf92a66b3f2a 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -88,6 +88,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
}
// Purpur end
+ @Override
+ public void initAttributes() {
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth);
+ }
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index bb64706d04fb25dcd564799c26fad231086ff827..767d977cf47b0c7d94c248091f3ce98d6383ae04 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -113,116 +113,211 @@ public class PurpurWorldConfig {
public boolean armadilloRidable = false;
public boolean armadilloRidableInWater = true;
public boolean armadilloControllable = true;
+ public double armadilloMaxHealth = 12.0D;
private void armadilloSettings() {
armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable);
armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater);
armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable);
+ armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth);
}
public boolean axolotlRidable = false;
public boolean axolotlControllable = true;
+ public double axolotlMaxHealth = 14.0D;
private void axolotlSettings() {
axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable);
axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable);
+ axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth);
}
public boolean batRidable = false;
public boolean batRidableInWater = true;
public boolean batControllable = true;
public double batMaxY = 320D;
+ public double batMaxHealth = 6.0D;
+ public double batFollowRange = 16.0D;
+ public double batKnockbackResistance = 0.0D;
+ public double batMovementSpeed = 0.6D;
+ public double batFlyingSpeed = 0.6D;
+ public double batArmor = 0.0D;
+ public double batArmorToughness = 0.0D;
+ public double batAttackKnockback = 0.0D;
private void batSettings() {
batRidable = getBoolean("mobs.bat.ridable", batRidable);
batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater);
batControllable = getBoolean("mobs.bat.controllable", batControllable);
batMaxY = getDouble("mobs.bat.ridable-max-y", batMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.bat.attributes.max-health", batMaxHealth);
+ set("mobs.bat.attributes.max-health", null);
+ set("mobs.bat.attributes.max_health", oldValue);
+ }
+ batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth);
+ batFollowRange = getDouble("mobs.bat.attributes.follow_range", batFollowRange);
+ batKnockbackResistance = getDouble("mobs.bat.attributes.knockback_resistance", batKnockbackResistance);
+ batMovementSpeed = getDouble("mobs.bat.attributes.movement_speed", batMovementSpeed);
+ batFlyingSpeed = getDouble("mobs.bat.attributes.flying_speed", batFlyingSpeed);
+ batArmor = getDouble("mobs.bat.attributes.armor", batArmor);
+ batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness);
+ batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback);
}
public boolean beeRidable = false;
public boolean beeRidableInWater = true;
public boolean beeControllable = true;
public double beeMaxY = 320D;
+ public double beeMaxHealth = 10.0D;
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
beeControllable = getBoolean("mobs.bee.controllable", beeControllable);
beeMaxY = getDouble("mobs.bee.ridable-max-y", beeMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth);
+ set("mobs.bee.attributes.max-health", null);
+ set("mobs.bee.attributes.max_health", oldValue);
+ }
+ beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth);
}
public boolean blazeRidable = false;
public boolean blazeRidableInWater = true;
public boolean blazeControllable = true;
public double blazeMaxY = 320D;
+ public double blazeMaxHealth = 20.0D;
private void blazeSettings() {
blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable);
blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater);
blazeControllable = getBoolean("mobs.blaze.controllable", blazeControllable);
blazeMaxY = getDouble("mobs.blaze.ridable-max-y", blazeMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.blaze.attributes.max-health", blazeMaxHealth);
+ set("mobs.blaze.attributes.max-health", null);
+ set("mobs.blaze.attributes.max_health", oldValue);
+ }
+ blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth);
}
public boolean boggedRidable = false;
public boolean boggedRidableInWater = true;
public boolean boggedControllable = true;
+ public double boggedMaxHealth = 16.0D;
private void boggedSettings() {
boggedRidable = getBoolean("mobs.bogged.ridable", boggedRidable);
boggedRidableInWater = getBoolean("mobs.bogged.ridable-in-water", boggedRidableInWater);
boggedControllable = getBoolean("mobs.bogged.controllable", boggedControllable);
+ boggedMaxHealth = getDouble("mobs.bogged.attributes.max_health", boggedMaxHealth);
}
public boolean camelRidableInWater = false;
+ public double camelMaxHealthMin = 32.0D;
+ public double camelMaxHealthMax = 32.0D;
+ public double camelJumpStrengthMin = 0.42D;
+ public double camelJumpStrengthMax = 0.42D;
+ public double camelMovementSpeedMin = 0.09D;
+ public double camelMovementSpeedMax = 0.09D;
private void camelSettings() {
camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater);
+ camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin);
+ camelMaxHealthMax = getDouble("mobs.camel.attributes.max_health.max", camelMaxHealthMax);
+ camelJumpStrengthMin = getDouble("mobs.camel.attributes.jump_strength.min", camelJumpStrengthMin);
+ camelJumpStrengthMax = getDouble("mobs.camel.attributes.jump_strength.max", camelJumpStrengthMax);
+ camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin);
+ camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax);
}
public boolean catRidable = false;
public boolean catRidableInWater = true;
public boolean catControllable = true;
+ public double catMaxHealth = 10.0D;
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
catControllable = getBoolean("mobs.cat.controllable", catControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cat.attributes.max-health", catMaxHealth);
+ set("mobs.cat.attributes.max-health", null);
+ set("mobs.cat.attributes.max_health", oldValue);
+ }
+ catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth);
}
public boolean caveSpiderRidable = false;
public boolean caveSpiderRidableInWater = true;
public boolean caveSpiderControllable = true;
+ public double caveSpiderMaxHealth = 12.0D;
private void caveSpiderSettings() {
caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
caveSpiderControllable = getBoolean("mobs.cave_spider.controllable", caveSpiderControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cave_spider.attributes.max-health", caveSpiderMaxHealth);
+ set("mobs.cave_spider.attributes.max-health", null);
+ set("mobs.cave_spider.attributes.max_health", oldValue);
+ }
+ caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth);
}
public boolean chickenRidable = false;
public boolean chickenRidableInWater = false;
public boolean chickenControllable = true;
+ public double chickenMaxHealth = 4.0D;
private void chickenSettings() {
chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable);
chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater);
chickenControllable = getBoolean("mobs.chicken.controllable", chickenControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.chicken.attributes.max-health", chickenMaxHealth);
+ set("mobs.chicken.attributes.max-health", null);
+ set("mobs.chicken.attributes.max_health", oldValue);
+ }
+ chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth);
}
public boolean codRidable = false;
public boolean codControllable = true;
+ public double codMaxHealth = 3.0D;
private void codSettings() {
codRidable = getBoolean("mobs.cod.ridable", codRidable);
codControllable = getBoolean("mobs.cod.controllable", codControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cod.attributes.max-health", codMaxHealth);
+ set("mobs.cod.attributes.max-health", null);
+ set("mobs.cod.attributes.max_health", oldValue);
+ }
+ codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth);
}
public boolean cowRidable = false;
public boolean cowRidableInWater = true;
public boolean cowControllable = true;
+ public double cowMaxHealth = 10.0D;
private void cowSettings() {
cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
cowControllable = getBoolean("mobs.cow.controllable", cowControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.cow.attributes.max-health", cowMaxHealth);
+ set("mobs.cow.attributes.max-health", null);
+ set("mobs.cow.attributes.max_health", oldValue);
+ }
+ cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth);
}
public boolean creeperRidable = false;
public boolean creeperRidableInWater = true;
public boolean creeperControllable = true;
+ public double creeperMaxHealth = 20.0D;
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
creeperControllable = getBoolean("mobs.creeper.controllable", creeperControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth);
+ set("mobs.creeper.attributes.max-health", null);
+ set("mobs.creeper.attributes.max_health", oldValue);
+ }
+ creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth);
}
public boolean dolphinRidable = false;
@@ -230,80 +325,161 @@ public class PurpurWorldConfig {
public int dolphinSpitCooldown = 20;
public float dolphinSpitSpeed = 1.0F;
public float dolphinSpitDamage = 2.0F;
+ public double dolphinMaxHealth = 10.0D;
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
dolphinSpitCooldown = getInt("mobs.dolphin.spit.cooldown", dolphinSpitCooldown);
dolphinSpitSpeed = (float) getDouble("mobs.dolphin.spit.speed", dolphinSpitSpeed);
dolphinSpitDamage = (float) getDouble("mobs.dolphin.spit.damage", dolphinSpitDamage);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.dolphin.attributes.max-health", dolphinMaxHealth);
+ set("mobs.dolphin.attributes.max-health", null);
+ set("mobs.dolphin.attributes.max_health", oldValue);
+ }
+ dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth);
}
public boolean donkeyRidableInWater = false;
+ public double donkeyMaxHealthMin = 15.0D;
+ public double donkeyMaxHealthMax = 30.0D;
+ public double donkeyJumpStrengthMin = 0.5D;
+ public double donkeyJumpStrengthMax = 0.5D;
+ public double donkeyMovementSpeedMin = 0.175D;
+ public double donkeyMovementSpeedMax = 0.175D;
private void donkeySettings() {
donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
+ if (PurpurConfig.version < 10) {
+ double oldMin = getDouble("mobs.donkey.attributes.max-health.min", donkeyMaxHealthMin);
+ double oldMax = getDouble("mobs.donkey.attributes.max-health.max", donkeyMaxHealthMax);
+ set("mobs.donkey.attributes.max-health", null);
+ set("mobs.donkey.attributes.max_health.min", oldMin);
+ set("mobs.donkey.attributes.max_health.max", oldMax);
+ }
+ donkeyMaxHealthMin = getDouble("mobs.donkey.attributes.max_health.min", donkeyMaxHealthMin);
+ donkeyMaxHealthMax = getDouble("mobs.donkey.attributes.max_health.max", donkeyMaxHealthMax);
+ donkeyJumpStrengthMin = getDouble("mobs.donkey.attributes.jump_strength.min", donkeyJumpStrengthMin);
+ donkeyJumpStrengthMax = getDouble("mobs.donkey.attributes.jump_strength.max", donkeyJumpStrengthMax);
+ donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin);
+ donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax);
}
public boolean drownedRidable = false;
public boolean drownedRidableInWater = true;
public boolean drownedControllable = true;
+ public double drownedMaxHealth = 20.0D;
+ public double drownedSpawnReinforcements = 0.1D;
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
drownedControllable = getBoolean("mobs.drowned.controllable", drownedControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.drowned.attributes.max-health", drownedMaxHealth);
+ set("mobs.drowned.attributes.max-health", null);
+ set("mobs.drowned.attributes.max_health", oldValue);
+ }
+ drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth);
+ drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements);
}
public boolean elderGuardianRidable = false;
public boolean elderGuardianControllable = true;
+ public double elderGuardianMaxHealth = 80.0D;
private void elderGuardianSettings() {
elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable);
elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.elder_guardian.attributes.max-health", elderGuardianMaxHealth);
+ set("mobs.elder_guardian.attributes.max-health", null);
+ set("mobs.elder_guardian.attributes.max_health", oldValue);
+ }
+ elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth);
}
public boolean enderDragonRidable = false;
public boolean enderDragonRidableInWater = true;
public boolean enderDragonControllable = true;
public double enderDragonMaxY = 320D;
+ public double enderDragonMaxHealth = 200.0D;
private void enderDragonSettings() {
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
enderDragonControllable = getBoolean("mobs.ender_dragon.controllable", enderDragonControllable);
enderDragonMaxY = getDouble("mobs.ender_dragon.ridable-max-y", enderDragonMaxY);
+ if (PurpurConfig.version < 8) {
+ double oldValue = getDouble("mobs.ender_dragon.max-health", enderDragonMaxHealth);
+ set("mobs.ender_dragon.max-health", null);
+ set("mobs.ender_dragon.attributes.max_health", oldValue);
+ } else if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.ender_dragon.attributes.max-health", enderDragonMaxHealth);
+ set("mobs.ender_dragon.attributes.max-health", null);
+ set("mobs.ender_dragon.attributes.max_health", oldValue);
+ }
+ enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth);
}
public boolean endermanRidable = false;
public boolean endermanRidableInWater = true;
public boolean endermanControllable = true;
+ public double endermanMaxHealth = 40.0D;
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
endermanControllable = getBoolean("mobs.enderman.controllable", endermanControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth);
+ set("mobs.enderman.attributes.max-health", null);
+ set("mobs.enderman.attributes.max_health", oldValue);
+ }
+ endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth);
}
public boolean endermiteRidable = false;
public boolean endermiteRidableInWater = true;
public boolean endermiteControllable = true;
+ public double endermiteMaxHealth = 8.0D;
private void endermiteSettings() {
endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable);
endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater);
endermiteControllable = getBoolean("mobs.endermite.controllable", endermiteControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.endermite.attributes.max-health", endermiteMaxHealth);
+ set("mobs.endermite.attributes.max-health", null);
+ set("mobs.endermite.attributes.max_health", oldValue);
+ }
+ endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth);
}
public boolean evokerRidable = false;
public boolean evokerRidableInWater = true;
public boolean evokerControllable = true;
+ public double evokerMaxHealth = 24.0D;
private void evokerSettings() {
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
evokerControllable = getBoolean("mobs.evoker.controllable", evokerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.evoker.attributes.max-health", evokerMaxHealth);
+ set("mobs.evoker.attributes.max-health", null);
+ set("mobs.evoker.attributes.max_health", oldValue);
+ }
+ evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
}
public boolean foxRidable = false;
public boolean foxRidableInWater = true;
public boolean foxControllable = true;
+ public double foxMaxHealth = 10.0D;
private void foxSettings() {
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
foxControllable = getBoolean("mobs.fox.controllable", foxControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.fox.attributes.max-health", foxMaxHealth);
+ set("mobs.fox.attributes.max-health", null);
+ set("mobs.fox.attributes.max_health", oldValue);
+ }
+ foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth);
}
public boolean frogRidable = false;
@@ -321,147 +497,316 @@ public class PurpurWorldConfig {
public boolean ghastRidableInWater = true;
public boolean ghastControllable = true;
public double ghastMaxY = 320D;
+ public double ghastMaxHealth = 10.0D;
private void ghastSettings() {
ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable);
ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater);
ghastControllable = getBoolean("mobs.ghast.controllable", ghastControllable);
ghastMaxY = getDouble("mobs.ghast.ridable-max-y", ghastMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.ghast.attributes.max-health", ghastMaxHealth);
+ set("mobs.ghast.attributes.max-health", null);
+ set("mobs.ghast.attributes.max_health", oldValue);
+ }
+ ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth);
}
public boolean giantRidable = false;
public boolean giantRidableInWater = true;
public boolean giantControllable = true;
+ public double giantMovementSpeed = 0.5D;
+ public double giantAttackDamage = 50.0D;
+ public double giantMaxHealth = 100.0D;
private void giantSettings() {
giantRidable = getBoolean("mobs.giant.ridable", giantRidable);
giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater);
giantControllable = getBoolean("mobs.giant.controllable", giantControllable);
+ giantMovementSpeed = getDouble("mobs.giant.movement-speed", giantMovementSpeed);
+ giantAttackDamage = getDouble("mobs.giant.attack-damage", giantAttackDamage);
+ if (PurpurConfig.version < 8) {
+ double oldValue = getDouble("mobs.giant.max-health", giantMaxHealth);
+ set("mobs.giant.max-health", null);
+ set("mobs.giant.attributes.max_health", oldValue);
+ } else if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.giant.attributes.max-health", giantMaxHealth);
+ set("mobs.giant.attributes.max-health", null);
+ set("mobs.giant.attributes.max_health", oldValue);
+ }
+ giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth);
}
public boolean glowSquidRidable = false;
public boolean glowSquidControllable = true;
+ public double glowSquidMaxHealth = 10.0D;
private void glowSquidSettings() {
glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable);
glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable);
+ glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth);
}
public boolean goatRidable = false;
public boolean goatRidableInWater = true;
public boolean goatControllable = true;
+ public double goatMaxHealth = 10.0D;
private void goatSettings() {
goatRidable = getBoolean("mobs.goat.ridable", goatRidable);
goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater);
goatControllable = getBoolean("mobs.goat.controllable", goatControllable);
+ goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth);
}
public boolean guardianRidable = false;
public boolean guardianControllable = true;
+ public double guardianMaxHealth = 30.0D;
private void guardianSettings() {
guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable);
guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.guardian.attributes.max-health", guardianMaxHealth);
+ set("mobs.guardian.attributes.max-health", null);
+ set("mobs.guardian.attributes.max_health", oldValue);
+ }
+ guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth);
}
public boolean hoglinRidable = false;
public boolean hoglinRidableInWater = true;
public boolean hoglinControllable = true;
+ public double hoglinMaxHealth = 40.0D;
private void hoglinSettings() {
hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
hoglinControllable = getBoolean("mobs.hoglin.controllable", hoglinControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.hoglin.attributes.max-health", hoglinMaxHealth);
+ set("mobs.hoglin.attributes.max-health", null);
+ set("mobs.hoglin.attributes.max_health", oldValue);
+ }
+ hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth);
}
public boolean horseRidableInWater = false;
+ public double horseMaxHealthMin = 15.0D;
+ public double horseMaxHealthMax = 30.0D;
+ public double horseJumpStrengthMin = 0.4D;
+ public double horseJumpStrengthMax = 1.0D;
+ public double horseMovementSpeedMin = 0.1125D;
+ public double horseMovementSpeedMax = 0.3375D;
private void horseSettings() {
horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
+ if (PurpurConfig.version < 10) {
+ double oldMin = getDouble("mobs.horse.attributes.max-health.min", horseMaxHealthMin);
+ double oldMax = getDouble("mobs.horse.attributes.max-health.max", horseMaxHealthMax);
+ set("mobs.horse.attributes.max-health", null);
+ set("mobs.horse.attributes.max_health.min", oldMin);
+ set("mobs.horse.attributes.max_health.max", oldMax);
+ }
+ horseMaxHealthMin = getDouble("mobs.horse.attributes.max_health.min", horseMaxHealthMin);
+ horseMaxHealthMax = getDouble("mobs.horse.attributes.max_health.max", horseMaxHealthMax);
+ horseJumpStrengthMin = getDouble("mobs.horse.attributes.jump_strength.min", horseJumpStrengthMin);
+ horseJumpStrengthMax = getDouble("mobs.horse.attributes.jump_strength.max", horseJumpStrengthMax);
+ horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin);
+ horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax);
}
public boolean huskRidable = false;
public boolean huskRidableInWater = true;
public boolean huskControllable = true;
+ public double huskMaxHealth = 20.0D;
+ public double huskSpawnReinforcements = 0.1D;
private void huskSettings() {
huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
huskControllable = getBoolean("mobs.husk.controllable", huskControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.husk.attributes.max-health", huskMaxHealth);
+ set("mobs.husk.attributes.max-health", null);
+ set("mobs.husk.attributes.max_health", oldValue);
+ }
+ huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth);
+ huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements);
}
public boolean illusionerRidable = false;
public boolean illusionerRidableInWater = true;
public boolean illusionerControllable = true;
+ public double illusionerMovementSpeed = 0.5D;
+ public double illusionerFollowRange = 18.0D;
+ public double illusionerMaxHealth = 32.0D;
private void illusionerSettings() {
illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable);
illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater);
illusionerControllable = getBoolean("mobs.illusioner.controllable", illusionerControllable);
+ illusionerMovementSpeed = getDouble("mobs.illusioner.movement-speed", illusionerMovementSpeed);
+ illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange);
+ if (PurpurConfig.version < 8) {
+ double oldValue = getDouble("mobs.illusioner.max-health", illusionerMaxHealth);
+ set("mobs.illusioner.max-health", null);
+ set("mobs.illusioner.attributes.max_health", oldValue);
+ } else if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.illusioner.attributes.max-health", illusionerMaxHealth);
+ set("mobs.illusioner.attributes.max-health", null);
+ set("mobs.illusioner.attributes.max_health", oldValue);
+ }
+ illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth);
}
public boolean ironGolemRidable = false;
public boolean ironGolemRidableInWater = true;
public boolean ironGolemControllable = true;
public boolean ironGolemCanSwim = false;
+ public double ironGolemMaxHealth = 100.0D;
private void ironGolemSettings() {
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
ironGolemControllable = getBoolean("mobs.iron_golem.controllable", ironGolemControllable);
ironGolemCanSwim = getBoolean("mobs.iron_golem.can-swim", ironGolemCanSwim);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.iron_golem.attributes.max-health", ironGolemMaxHealth);
+ set("mobs.iron_golem.attributes.max-health", null);
+ set("mobs.iron_golem.attributes.max_health", oldValue);
+ }
+ ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth);
}
public boolean llamaRidable = false;
public boolean llamaRidableInWater = false;
public boolean llamaControllable = true;
+ public double llamaMaxHealthMin = 15.0D;
+ public double llamaMaxHealthMax = 30.0D;
+ public double llamaJumpStrengthMin = 0.5D;
+ public double llamaJumpStrengthMax = 0.5D;
+ public double llamaMovementSpeedMin = 0.175D;
+ public double llamaMovementSpeedMax = 0.175D;
private void llamaSettings() {
llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
llamaControllable = getBoolean("mobs.llama.controllable", llamaControllable);
+ if (PurpurConfig.version < 10) {
+ double oldMin = getDouble("mobs.llama.attributes.max-health.min", llamaMaxHealthMin);
+ double oldMax = getDouble("mobs.llama.attributes.max-health.max", llamaMaxHealthMax);
+ set("mobs.llama.attributes.max-health", null);
+ set("mobs.llama.attributes.max_health.min", oldMin);
+ set("mobs.llama.attributes.max_health.max", oldMax);
+ }
+ llamaMaxHealthMin = getDouble("mobs.llama.attributes.max_health.min", llamaMaxHealthMin);
+ llamaMaxHealthMax = getDouble("mobs.llama.attributes.max_health.max", llamaMaxHealthMax);
+ llamaJumpStrengthMin = getDouble("mobs.llama.attributes.jump_strength.min", llamaJumpStrengthMin);
+ llamaJumpStrengthMax = getDouble("mobs.llama.attributes.jump_strength.max", llamaJumpStrengthMax);
+ llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin);
+ llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax);
}
public boolean magmaCubeRidable = false;
public boolean magmaCubeRidableInWater = true;
public boolean magmaCubeControllable = true;
+ public String magmaCubeMaxHealth = "size * size";
+ public String magmaCubeAttackDamage = "size";
+ public Map<Integer, Double> magmaCubeMaxHealthCache = new HashMap<>();
+ public Map<Integer, Double> magmaCubeAttackDamageCache = new HashMap<>();
private void magmaCubeSettings() {
magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable);
magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater);
magmaCubeControllable = getBoolean("mobs.magma_cube.controllable", magmaCubeControllable);
+ if (PurpurConfig.version < 10) {
+ String oldValue = getString("mobs.magma_cube.attributes.max-health", magmaCubeMaxHealth);
+ set("mobs.magma_cube.attributes.max-health", null);
+ set("mobs.magma_cube.attributes.max_health", oldValue);
+ }
+ magmaCubeMaxHealth = getString("mobs.magma_cube.attributes.max_health", magmaCubeMaxHealth);
+ magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage);
+ magmaCubeMaxHealthCache.clear();
+ magmaCubeAttackDamageCache.clear();
}
public boolean mooshroomRidable = false;
public boolean mooshroomRidableInWater = true;
public boolean mooshroomControllable = true;
+ public double mooshroomMaxHealth = 10.0D;
private void mooshroomSettings() {
mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
mooshroomControllable = getBoolean("mobs.mooshroom.controllable", mooshroomControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.mooshroom.attributes.max-health", mooshroomMaxHealth);
+ set("mobs.mooshroom.attributes.max-health", null);
+ set("mobs.mooshroom.attributes.max_health", oldValue);
+ }
+ mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth);
}
public boolean muleRidableInWater = false;
+ public double muleMaxHealthMin = 15.0D;
+ public double muleMaxHealthMax = 30.0D;
+ public double muleJumpStrengthMin = 0.5D;
+ public double muleJumpStrengthMax = 0.5D;
+ public double muleMovementSpeedMin = 0.175D;
+ public double muleMovementSpeedMax = 0.175D;
private void muleSettings() {
muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
+ if (PurpurConfig.version < 10) {
+ double oldMin = getDouble("mobs.mule.attributes.max-health.min", muleMaxHealthMin);
+ double oldMax = getDouble("mobs.mule.attributes.max-health.max", muleMaxHealthMax);
+ set("mobs.mule.attributes.max-health", null);
+ set("mobs.mule.attributes.max_health.min", oldMin);
+ set("mobs.mule.attributes.max_health.max", oldMax);
+ }
+ muleMaxHealthMin = getDouble("mobs.mule.attributes.max_health.min", muleMaxHealthMin);
+ muleMaxHealthMax = getDouble("mobs.mule.attributes.max_health.max", muleMaxHealthMax);
+ muleJumpStrengthMin = getDouble("mobs.mule.attributes.jump_strength.min", muleJumpStrengthMin);
+ muleJumpStrengthMax = getDouble("mobs.mule.attributes.jump_strength.max", muleJumpStrengthMax);
+ muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin);
+ muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax);
}
public boolean ocelotRidable = false;
public boolean ocelotRidableInWater = true;
public boolean ocelotControllable = true;
+ public double ocelotMaxHealth = 10.0D;
private void ocelotSettings() {
ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
ocelotControllable = getBoolean("mobs.ocelot.controllable", ocelotControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.ocelot.attributes.max-health", ocelotMaxHealth);
+ set("mobs.ocelot.attributes.max-health", null);
+ set("mobs.ocelot.attributes.max_health", oldValue);
+ }
+ ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth);
}
public boolean pandaRidable = false;
public boolean pandaRidableInWater = true;
public boolean pandaControllable = true;
+ public double pandaMaxHealth = 20.0D;
private void pandaSettings() {
pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
pandaControllable = getBoolean("mobs.panda.controllable", pandaControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.panda.attributes.max-health", pandaMaxHealth);
+ set("mobs.panda.attributes.max-health", null);
+ set("mobs.panda.attributes.max_health", oldValue);
+ }
+ pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth);
}
public boolean parrotRidable = false;
public boolean parrotRidableInWater = true;
public boolean parrotControllable = true;
public double parrotMaxY = 320D;
+ public double parrotMaxHealth = 6.0D;
private void parrotSettings() {
parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable);
parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater);
parrotControllable = getBoolean("mobs.parrot.controllable", parrotControllable);
parrotMaxY = getDouble("mobs.parrot.ridable-max-y", parrotMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.parrot.attributes.max-health", parrotMaxHealth);
+ set("mobs.parrot.attributes.max-health", null);
+ set("mobs.parrot.attributes.max_health", oldValue);
+ }
+ parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth);
}
public boolean phantomRidable = false;
@@ -471,6 +816,10 @@ public class PurpurWorldConfig {
public float phantomFlameDamage = 1.0F;
public int phantomFlameFireTime = 8;
public boolean phantomAllowGriefing = false;
+ public String phantomMaxHealth = "20.0";
+ public String phantomAttackDamage = "6 + size";
+ public Map<Integer, Double> phantomMaxHealthCache = new HashMap<>();
+ public Map<Integer, Double> phantomAttackDamageCache = new HashMap<>();
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
@@ -479,191 +828,363 @@ public class PurpurWorldConfig {
phantomFlameDamage = (float) getDouble("mobs.phantom.flames.damage", phantomFlameDamage);
phantomFlameFireTime = getInt("mobs.phantom.flames.fire-time", phantomFlameFireTime);
phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.phantom.attributes.max-health", Double.parseDouble(phantomMaxHealth));
+ set("mobs.phantom.attributes.max-health", null);
+ set("mobs.phantom.attributes.max_health", String.valueOf(oldValue));
+ }
+ if (PurpurConfig.version < 25) {
+ double oldValue = getDouble("mobs.phantom.attributes.max_health", Double.parseDouble(phantomMaxHealth));
+ set("mobs.phantom.attributes.max_health", String.valueOf(oldValue));
+ }
+ phantomMaxHealth = getString("mobs.phantom.attributes.max_health", phantomMaxHealth);
+ phantomAttackDamage = getString("mobs.phantom.attributes.attack_damage", phantomAttackDamage);
+ phantomMaxHealthCache.clear();
+ phantomAttackDamageCache.clear();
}
public boolean pigRidable = false;
public boolean pigRidableInWater = false;
public boolean pigControllable = true;
+ public double pigMaxHealth = 10.0D;
private void pigSettings() {
pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
pigControllable = getBoolean("mobs.pig.controllable", pigControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.pig.attributes.max-health", pigMaxHealth);
+ set("mobs.pig.attributes.max-health", null);
+ set("mobs.pig.attributes.max_health", oldValue);
+ }
+ pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth);
}
public boolean piglinRidable = false;
public boolean piglinRidableInWater = true;
public boolean piglinControllable = true;
+ public double piglinMaxHealth = 16.0D;
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
piglinControllable = getBoolean("mobs.piglin.controllable", piglinControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.piglin.attributes.max-health", piglinMaxHealth);
+ set("mobs.piglin.attributes.max-health", null);
+ set("mobs.piglin.attributes.max_health", oldValue);
+ }
+ piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
}
public boolean piglinBruteRidable = false;
public boolean piglinBruteRidableInWater = true;
public boolean piglinBruteControllable = true;
+ public double piglinBruteMaxHealth = 50.0D;
private void piglinBruteSettings() {
piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable);
piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater);
piglinBruteControllable = getBoolean("mobs.piglin_brute.controllable", piglinBruteControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.piglin_brute.attributes.max-health", piglinBruteMaxHealth);
+ set("mobs.piglin_brute.attributes.max-health", null);
+ set("mobs.piglin_brute.attributes.max_health", oldValue);
+ }
+ piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth);
}
public boolean pillagerRidable = false;
public boolean pillagerRidableInWater = true;
public boolean pillagerControllable = true;
+ public double pillagerMaxHealth = 24.0D;
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
pillagerControllable = getBoolean("mobs.pillager.controllable", pillagerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.pillager.attributes.max-health", pillagerMaxHealth);
+ set("mobs.pillager.attributes.max-health", null);
+ set("mobs.pillager.attributes.max_health", oldValue);
+ }
+ pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
}
public boolean polarBearRidable = false;
public boolean polarBearRidableInWater = true;
public boolean polarBearControllable = true;
+ public double polarBearMaxHealth = 30.0D;
private void polarBearSettings() {
polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
polarBearControllable = getBoolean("mobs.polar_bear.controllable", polarBearControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.polar_bear.attributes.max-health", polarBearMaxHealth);
+ set("mobs.polar_bear.attributes.max-health", null);
+ set("mobs.polar_bear.attributes.max_health", oldValue);
+ }
+ polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth);
}
public boolean pufferfishRidable = false;
public boolean pufferfishControllable = true;
+ public double pufferfishMaxHealth = 3.0D;
private void pufferfishSettings() {
pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable);
pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.pufferfish.attributes.max-health", pufferfishMaxHealth);
+ set("mobs.pufferfish.attributes.max-health", null);
+ set("mobs.pufferfish.attributes.max_health", oldValue);
+ }
+ pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth);
}
public boolean rabbitRidable = false;
public boolean rabbitRidableInWater = true;
public boolean rabbitControllable = true;
+ public double rabbitMaxHealth = 3.0D;
private void rabbitSettings() {
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
rabbitControllable = getBoolean("mobs.rabbit.controllable", rabbitControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.rabbit.attributes.max-health", rabbitMaxHealth);
+ set("mobs.rabbit.attributes.max-health", null);
+ set("mobs.rabbit.attributes.max_health", oldValue);
+ }
+ rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth);
}
public boolean ravagerRidable = false;
public boolean ravagerRidableInWater = false;
public boolean ravagerControllable = true;
+ public double ravagerMaxHealth = 100.0D;
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
ravagerControllable = getBoolean("mobs.ravager.controllable", ravagerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.ravager.attributes.max-health", ravagerMaxHealth);
+ set("mobs.ravager.attributes.max-health", null);
+ set("mobs.ravager.attributes.max_health", oldValue);
+ }
+ ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
}
public boolean salmonRidable = false;
public boolean salmonControllable = true;
+ public double salmonMaxHealth = 3.0D;
private void salmonSettings() {
salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable);
salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.salmon.attributes.max-health", salmonMaxHealth);
+ set("mobs.salmon.attributes.max-health", null);
+ set("mobs.salmon.attributes.max_health", oldValue);
+ }
+ salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth);
}
public boolean sheepRidable = false;
public boolean sheepRidableInWater = true;
public boolean sheepControllable = true;
+ public double sheepMaxHealth = 8.0D;
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
sheepControllable = getBoolean("mobs.sheep.controllable", sheepControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.sheep.attributes.max-health", sheepMaxHealth);
+ set("mobs.sheep.attributes.max-health", null);
+ set("mobs.sheep.attributes.max_health", oldValue);
+ }
+ sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
}
public boolean shulkerRidable = false;
public boolean shulkerRidableInWater = true;
public boolean shulkerControllable = true;
+ public double shulkerMaxHealth = 30.0D;
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
shulkerControllable = getBoolean("mobs.shulker.controllable", shulkerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.shulker.attributes.max-health", shulkerMaxHealth);
+ set("mobs.shulker.attributes.max-health", null);
+ set("mobs.shulker.attributes.max_health", oldValue);
+ }
+ shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth);
}
public boolean silverfishRidable = false;
public boolean silverfishRidableInWater = true;
public boolean silverfishControllable = true;
+ public double silverfishMaxHealth = 8.0D;
private void silverfishSettings() {
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
silverfishControllable = getBoolean("mobs.silverfish.controllable", silverfishControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.silverfish.attributes.max-health", silverfishMaxHealth);
+ set("mobs.silverfish.attributes.max-health", null);
+ set("mobs.silverfish.attributes.max_health", oldValue);
+ }
+ silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth);
}
public boolean skeletonRidable = false;
public boolean skeletonRidableInWater = true;
public boolean skeletonControllable = true;
+ public double skeletonMaxHealth = 20.0D;
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
skeletonControllable = getBoolean("mobs.skeleton.controllable", skeletonControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.skeleton.attributes.max-health", skeletonMaxHealth);
+ set("mobs.skeleton.attributes.max-health", null);
+ set("mobs.skeleton.attributes.max_health", oldValue);
+ }
+ skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
}
public boolean skeletonHorseRidable = false;
public boolean skeletonHorseRidableInWater = true;
public boolean skeletonHorseCanSwim = false;
+ public double skeletonHorseMaxHealthMin = 15.0D;
+ public double skeletonHorseMaxHealthMax = 15.0D;
+ public double skeletonHorseJumpStrengthMin = 0.4D;
+ public double skeletonHorseJumpStrengthMax = 1.0D;
+ public double skeletonHorseMovementSpeedMin = 0.2D;
+ public double skeletonHorseMovementSpeedMax = 0.2D;
private void skeletonHorseSettings() {
skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable);
skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater);
skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.skeleton_horse.attributes.max-health", skeletonHorseMaxHealthMin);
+ set("mobs.skeleton_horse.attributes.max-health", null);
+ set("mobs.skeleton_horse.attributes.max_health.min", oldValue);
+ set("mobs.skeleton_horse.attributes.max_health.max", oldValue);
+ }
+ skeletonHorseMaxHealthMin = getDouble("mobs.skeleton_horse.attributes.max_health.min", skeletonHorseMaxHealthMin);
+ skeletonHorseMaxHealthMax = getDouble("mobs.skeleton_horse.attributes.max_health.max", skeletonHorseMaxHealthMax);
+ skeletonHorseJumpStrengthMin = getDouble("mobs.skeleton_horse.attributes.jump_strength.min", skeletonHorseJumpStrengthMin);
+ skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax);
+ skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin);
+ skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax);
}
public boolean slimeRidable = false;
public boolean slimeRidableInWater = true;
public boolean slimeControllable = true;
+ public String slimeMaxHealth = "size * size";
+ public String slimeAttackDamage = "size";
+ public Map<Integer, Double> slimeMaxHealthCache = new HashMap<>();
+ public Map<Integer, Double> slimeAttackDamageCache = new HashMap<>();
private void slimeSettings() {
slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable);
slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater);
slimeControllable = getBoolean("mobs.slime.controllable", slimeControllable);
+ if (PurpurConfig.version < 10) {
+ String oldValue = getString("mobs.slime.attributes.max-health", slimeMaxHealth);
+ set("mobs.slime.attributes.max-health", null);
+ set("mobs.slime.attributes.max_health", oldValue);
+ }
+ slimeMaxHealth = getString("mobs.slime.attributes.max_health", slimeMaxHealth);
+ slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage);
+ slimeMaxHealthCache.clear();
+ slimeAttackDamageCache.clear();
}
public boolean snowGolemRidable = false;
public boolean snowGolemRidableInWater = true;
public boolean snowGolemControllable = true;
public boolean snowGolemLeaveTrailWhenRidden = false;
+ public double snowGolemMaxHealth = 4.0D;
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
snowGolemControllable = getBoolean("mobs.snow_golem.controllable", snowGolemControllable);
snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.snow_golem.attributes.max-health", snowGolemMaxHealth);
+ set("mobs.snow_golem.attributes.max-health", null);
+ set("mobs.snow_golem.attributes.max_health", oldValue);
+ }
+ snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth);
}
public boolean snifferRidable = false;
public boolean snifferRidableInWater = true;
public boolean snifferControllable = true;
+ public double snifferMaxHealth = 14.0D;
private void snifferSettings() {
snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable);
snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater);
snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable);
+ snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth);
}
public boolean squidRidable = false;
public boolean squidControllable = true;
+ public double squidMaxHealth = 10.0D;
private void squidSettings() {
squidRidable = getBoolean("mobs.squid.ridable", squidRidable);
squidControllable = getBoolean("mobs.squid.controllable", squidControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.squid.attributes.max-health", squidMaxHealth);
+ set("mobs.squid.attributes.max-health", null);
+ set("mobs.squid.attributes.max_health", oldValue);
+ }
+ squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth);
}
public boolean spiderRidable = false;
public boolean spiderRidableInWater = false;
public boolean spiderControllable = true;
+ public double spiderMaxHealth = 16.0D;
private void spiderSettings() {
spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable);
spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater);
spiderControllable = getBoolean("mobs.spider.controllable", spiderControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.spider.attributes.max-health", spiderMaxHealth);
+ set("mobs.spider.attributes.max-health", null);
+ set("mobs.spider.attributes.max_health", oldValue);
+ }
+ spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth);
}
public boolean strayRidable = false;
public boolean strayRidableInWater = true;
public boolean strayControllable = true;
+ public double strayMaxHealth = 20.0D;
private void straySettings() {
strayRidable = getBoolean("mobs.stray.ridable", strayRidable);
strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater);
strayControllable = getBoolean("mobs.stray.controllable", strayControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.stray.attributes.max-health", strayMaxHealth);
+ set("mobs.stray.attributes.max-health", null);
+ set("mobs.stray.attributes.max_health", oldValue);
+ }
+ strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth);
}
public boolean striderRidable = false;
public boolean striderRidableInWater = false;
public boolean striderControllable = true;
+ public double striderMaxHealth = 20.0D;
private void striderSettings() {
striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
striderControllable = getBoolean("mobs.strider.controllable", striderControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.strider.attributes.max-health", striderMaxHealth);
+ set("mobs.strider.attributes.max-health", null);
+ set("mobs.strider.attributes.max_health", oldValue);
+ }
+ striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth);
}
public boolean tadpoleRidable = false;
@@ -678,64 +1199,125 @@ public class PurpurWorldConfig {
public boolean traderLlamaRidable = false;
public boolean traderLlamaRidableInWater = false;
public boolean traderLlamaControllable = true;
+ public double traderLlamaMaxHealthMin = 15.0D;
+ public double traderLlamaMaxHealthMax = 30.0D;
+ public double traderLlamaJumpStrengthMin = 0.5D;
+ public double traderLlamaJumpStrengthMax = 0.5D;
+ public double traderLlamaMovementSpeedMin = 0.175D;
+ public double traderLlamaMovementSpeedMax = 0.175D;
private void traderLlamaSettings() {
traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable);
traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater);
traderLlamaControllable = getBoolean("mobs.trader_llama.controllable", traderLlamaControllable);
+ if (PurpurConfig.version < 10) {
+ double oldMin = getDouble("mobs.trader_llama.attributes.max-health.min", traderLlamaMaxHealthMin);
+ double oldMax = getDouble("mobs.trader_llama.attributes.max-health.max", traderLlamaMaxHealthMax);
+ set("mobs.trader_llama.attributes.max-health", null);
+ set("mobs.trader_llama.attributes.max_health.min", oldMin);
+ set("mobs.trader_llama.attributes.max_health.max", oldMax);
+ }
+ traderLlamaMaxHealthMin = getDouble("mobs.trader_llama.attributes.max_health.min", traderLlamaMaxHealthMin);
+ traderLlamaMaxHealthMax = getDouble("mobs.trader_llama.attributes.max_health.max", traderLlamaMaxHealthMax);
+ traderLlamaJumpStrengthMin = getDouble("mobs.trader_llama.attributes.jump_strength.min", traderLlamaJumpStrengthMin);
+ traderLlamaJumpStrengthMax = getDouble("mobs.trader_llama.attributes.jump_strength.max", traderLlamaJumpStrengthMax);
+ traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin);
+ traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax);
}
public boolean tropicalFishRidable = false;
public boolean tropicalFishControllable = true;
+ public double tropicalFishMaxHealth = 3.0D;
private void tropicalFishSettings() {
tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable);
tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.tropical_fish.attributes.max-health", tropicalFishMaxHealth);
+ set("mobs.tropical_fish.attributes.max-health", null);
+ set("mobs.tropical_fish.attributes.max_health", oldValue);
+ }
+ tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth);
}
public boolean turtleRidable = false;
public boolean turtleRidableInWater = true;
public boolean turtleControllable = true;
+ public double turtleMaxHealth = 30.0D;
private void turtleSettings() {
turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
turtleControllable = getBoolean("mobs.turtle.controllable", turtleControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.turtle.attributes.max-health", turtleMaxHealth);
+ set("mobs.turtle.attributes.max-health", null);
+ set("mobs.turtle.attributes.max_health", oldValue);
+ }
+ turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth);
}
public boolean vexRidable = false;
public boolean vexRidableInWater = true;
public boolean vexControllable = true;
public double vexMaxY = 320D;
+ public double vexMaxHealth = 14.0D;
private void vexSettings() {
vexRidable = getBoolean("mobs.vex.ridable", vexRidable);
vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater);
vexControllable = getBoolean("mobs.vex.controllable", vexControllable);
vexMaxY = getDouble("mobs.vex.ridable-max-y", vexMaxY);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.vex.attributes.max-health", vexMaxHealth);
+ set("mobs.vex.attributes.max-health", null);
+ set("mobs.vex.attributes.max_health", oldValue);
+ }
+ vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth);
}
public boolean villagerRidable = false;
public boolean villagerRidableInWater = true;
public boolean villagerControllable = true;
+ public double villagerMaxHealth = 20.0D;
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
villagerControllable = getBoolean("mobs.villager.controllable", villagerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth);
+ set("mobs.villager.attributes.max-health", null);
+ set("mobs.villager.attributes.max_health", oldValue);
+ }
+ villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth);
}
public boolean vindicatorRidable = false;
public boolean vindicatorRidableInWater = true;
public boolean vindicatorControllable = true;
+ public double vindicatorMaxHealth = 24.0D;
private void vindicatorSettings() {
vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable);
vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater);
vindicatorControllable = getBoolean("mobs.vindicator.controllable", vindicatorControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.vindicator.attributes.max-health", vindicatorMaxHealth);
+ set("mobs.vindicator.attributes.max-health", null);
+ set("mobs.vindicator.attributes.max_health", oldValue);
+ }
+ vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth);
}
public boolean wanderingTraderRidable = false;
public boolean wanderingTraderRidableInWater = true;
public boolean wanderingTraderControllable = true;
+ public double wanderingTraderMaxHealth = 20.0D;
private void wanderingTraderSettings() {
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
wanderingTraderControllable = getBoolean("mobs.wandering_trader.controllable", wanderingTraderControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.wandering_trader.attributes.max-health", wanderingTraderMaxHealth);
+ set("mobs.wandering_trader.attributes.max-health", null);
+ set("mobs.wandering_trader.attributes.max_health", oldValue);
+ }
+ wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth);
}
public boolean wardenRidable = false;
@@ -750,83 +1332,167 @@ public class PurpurWorldConfig {
public boolean witchRidable = false;
public boolean witchRidableInWater = true;
public boolean witchControllable = true;
+ public double witchMaxHealth = 26.0D;
private void witchSettings() {
witchRidable = getBoolean("mobs.witch.ridable", witchRidable);
witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater);
witchControllable = getBoolean("mobs.witch.controllable", witchControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.witch.attributes.max-health", witchMaxHealth);
+ set("mobs.witch.attributes.max-health", null);
+ set("mobs.witch.attributes.max_health", oldValue);
+ }
+ witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth);
}
public boolean witherRidable = false;
public boolean witherRidableInWater = true;
public boolean witherControllable = true;
public double witherMaxY = 320D;
+ public double witherMaxHealth = 300.0D;
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
witherControllable = getBoolean("mobs.wither.controllable", witherControllable);
witherMaxY = getDouble("mobs.wither.ridable-max-y", witherMaxY);
+ if (PurpurConfig.version < 8) {
+ double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth);
+ set("mobs.wither.max_health", null);
+ set("mobs.wither.attributes.max-health", oldValue);
+ } else if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.wither.attributes.max-health", witherMaxHealth);
+ set("mobs.wither.attributes.max-health", null);
+ set("mobs.wither.attributes.max_health", oldValue);
+ }
+ witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth);
}
public boolean witherSkeletonRidable = false;
public boolean witherSkeletonRidableInWater = true;
public boolean witherSkeletonControllable = true;
+ public double witherSkeletonMaxHealth = 20.0D;
private void witherSkeletonSettings() {
witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable);
witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater);
witherSkeletonControllable = getBoolean("mobs.wither_skeleton.controllable", witherSkeletonControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.wither_skeleton.attributes.max-health", witherSkeletonMaxHealth);
+ set("mobs.wither_skeleton.attributes.max-health", null);
+ set("mobs.wither_skeleton.attributes.max_health", oldValue);
+ }
+ witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth);
}
public boolean wolfRidable = false;
public boolean wolfRidableInWater = true;
public boolean wolfControllable = true;
+ public double wolfMaxHealth = 8.0D;
private void wolfSettings() {
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
wolfControllable = getBoolean("mobs.wolf.controllable", wolfControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.wolf.attributes.max-health", wolfMaxHealth);
+ set("mobs.wolf.attributes.max-health", null);
+ set("mobs.wolf.attributes.max_health", oldValue);
+ }
+ wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth);
}
public boolean zoglinRidable = false;
public boolean zoglinRidableInWater = true;
public boolean zoglinControllable = true;
+ public double zoglinMaxHealth = 40.0D;
private void zoglinSettings() {
zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable);
zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater);
zoglinControllable = getBoolean("mobs.zoglin.controllable", zoglinControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.zoglin.attributes.max-health", zoglinMaxHealth);
+ set("mobs.zoglin.attributes.max-health", null);
+ set("mobs.zoglin.attributes.max_health", oldValue);
+ }
+ zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth);
}
public boolean zombieRidable = false;
public boolean zombieRidableInWater = true;
public boolean zombieControllable = true;
+ public double zombieMaxHealth = 20.0D;
+ public double zombieSpawnReinforcements = 0.1D;
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
zombieControllable = getBoolean("mobs.zombie.controllable", zombieControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.zombie.attributes.max-health", zombieMaxHealth);
+ set("mobs.zombie.attributes.max-health", null);
+ set("mobs.zombie.attributes.max_health", oldValue);
+ }
+ zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth);
+ zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements);
}
public boolean zombieHorseRidable = false;
public boolean zombieHorseRidableInWater = false;
public boolean zombieHorseCanSwim = false;
+ public double zombieHorseMaxHealthMin = 15.0D;
+ public double zombieHorseMaxHealthMax = 15.0D;
+ public double zombieHorseJumpStrengthMin = 0.4D;
+ public double zombieHorseJumpStrengthMax = 1.0D;
+ public double zombieHorseMovementSpeedMin = 0.2D;
+ public double zombieHorseMovementSpeedMax = 0.2D;
private void zombieHorseSettings() {
zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable);
zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater);
zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.zombie_horse.attributes.max-health", zombieHorseMaxHealthMin);
+ set("mobs.zombie_horse.attributes.max-health", null);
+ set("mobs.zombie_horse.attributes.max_health.min", oldValue);
+ set("mobs.zombie_horse.attributes.max_health.max", oldValue);
+ }
+ zombieHorseMaxHealthMin = getDouble("mobs.zombie_horse.attributes.max_health.min", zombieHorseMaxHealthMin);
+ zombieHorseMaxHealthMax = getDouble("mobs.zombie_horse.attributes.max_health.max", zombieHorseMaxHealthMax);
+ zombieHorseJumpStrengthMin = getDouble("mobs.zombie_horse.attributes.jump_strength.min", zombieHorseJumpStrengthMin);
+ zombieHorseJumpStrengthMax = getDouble("mobs.zombie_horse.attributes.jump_strength.max", zombieHorseJumpStrengthMax);
+ zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin);
+ zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax);
}
public boolean zombieVillagerRidable = false;
public boolean zombieVillagerRidableInWater = true;
public boolean zombieVillagerControllable = true;
+ public double zombieVillagerMaxHealth = 20.0D;
+ public double zombieVillagerSpawnReinforcements = 0.1D;
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
zombieVillagerControllable = getBoolean("mobs.zombie_villager.controllable", zombieVillagerControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.zombie_villager.attributes.max-health", zombieVillagerMaxHealth);
+ set("mobs.zombie_villager.attributes.max-health", null);
+ set("mobs.zombie_villager.attributes.max_health", oldValue);
+ }
+ zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth);
+ zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements);
}
public boolean zombifiedPiglinRidable = false;
public boolean zombifiedPiglinRidableInWater = true;
public boolean zombifiedPiglinControllable = true;
+ public double zombifiedPiglinMaxHealth = 20.0D;
+ public double zombifiedPiglinSpawnReinforcements = 0.0D;
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
zombifiedPiglinControllable = getBoolean("mobs.zombified_piglin.controllable", zombifiedPiglinControllable);
+ if (PurpurConfig.version < 10) {
+ double oldValue = getDouble("mobs.zombified_piglin.attributes.max-health", zombifiedPiglinMaxHealth);
+ set("mobs.zombified_piglin.attributes.max-health", null);
+ set("mobs.zombified_piglin.attributes.max_health", oldValue);
+ }
+ zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth);
+ zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements);
}
}