From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Mar 2020 21:39:32 -0500 Subject: [PATCH] Configurable jockey options 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 0217fb932379e5789dce932b6af90f1e97fb95de..dac2407cc170ed59d09e3969e432e3b5aaa48a66 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -94,6 +94,21 @@ public class Drowned extends Zombie implements RangedAttackMob { protected void randomizeReinforcementsChance() { this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.drownedSpawnReinforcements); } + + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.drownedJockeyOnlyBaby; + } + + @Override + public double jockeyChance() { + return level.purpurConfig.drownedJockeyChance; + } + + @Override + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.drownedJockeyTryExistingChickens; + } // Purpur end @Override 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 ff84c706d42bc6859faaa9302ba688f43ddcb537..640c75c2cf7ec1f1bc514d29ac1f929c526e0caa 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java @@ -47,6 +47,21 @@ public class Husk extends Zombie { protected void randomizeReinforcementsChance() { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.huskSpawnReinforcements); } + + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.huskJockeyOnlyBaby; + } + + @Override + public double jockeyChance() { + return level.purpurConfig.huskJockeyChance; + } + + @Override + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.huskJockeyTryExistingChickens; + } // Purpur end public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { 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 6943933ef0e97f31fbbcedee4ff469bc6e7e49c0..f1056d9174e19266990e54a04b3f99f2ea46beb1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -124,6 +124,18 @@ public class Zombie extends Monster { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth); } + + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombieJockeyOnlyBaby; + } + + public double jockeyChance() { + return level.purpurConfig.zombieJockeyChance; + } + + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieJockeyTryExistingChickens; + } // Purpur end @Override @@ -535,19 +547,20 @@ public class Zombie extends Monster { if (object instanceof Zombie.ZombieGroupData) { Zombie.ZombieGroupData entityzombie_groupdatazombie = (Zombie.ZombieGroupData) object; - if (entityzombie_groupdatazombie.isBaby) { - this.setBaby(true); + // Purpur start + if (!jockeyOnlyBaby() || entityzombie_groupdatazombie.isBaby) { + this.setBaby(entityzombie_groupdatazombie.isBaby); if (entityzombie_groupdatazombie.canSpawnJockey) { - if ((double) world.getRandom().nextFloat() < 0.05D) { - List list = world.getEntitiesOfClass(Chicken.class, this.getBoundingBox().inflate(5.0D, 3.0D, 5.0D), EntitySelector.ENTITY_NOT_BEING_RIDDEN); + if ((double) world.getRandom().nextFloat() < jockeyChance()) { + List list = jockeyTryExistingChickens() ? world.getEntitiesOfClass(Chicken.class, this.getBoundingBox().inflate(5.0D, 3.0D, 5.0D), EntitySelector.ENTITY_NOT_BEING_RIDDEN) : java.util.Collections.emptyList(); + // Purpur end if (!list.isEmpty()) { Chicken entitychicken = (Chicken) list.get(0); entitychicken.setChickenJockey(true); this.startRiding(entitychicken); - } - } else if ((double) world.getRandom().nextFloat() < 0.05D) { + } else { // Purpur Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level); entitychicken1.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); @@ -555,6 +568,7 @@ public class Zombie extends Monster { entitychicken1.setChickenJockey(true); this.startRiding(entitychicken1); world.addFreshEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit + } // Purpur } } } 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 6309a40ce0d349a6e278d6584b056dc644a358ba..cad1a9be238aa62b4eb0ec02d4155d15c0cc5378 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,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { protected void randomizeReinforcementsChance() { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieVillagerSpawnReinforcements); } + + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombieVillagerJockeyOnlyBaby; + } + + @Override + public double jockeyChance() { + return level.purpurConfig.zombieVillagerJockeyChance; + } + + @Override + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieVillagerJockeyTryExistingChickens; + } // Purpur end @Override 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 e743fb4de0647088d06ec53291496e0d2f44fe44..e2192c45eba111a62dded3731dcdeacc6168710c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -79,6 +79,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombifiedPiglinMaxHealth); } + + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombifiedPiglinJockeyOnlyBaby; + } + + @Override + public double jockeyChance() { + return level.purpurConfig.zombifiedPiglinJockeyChance; + } + + @Override + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombifiedPiglinJockeyTryExistingChickens; + } // Purpur end @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 7dd9e436b50019bb16a61314cf6798b6a5b2580b..9b87f29de86fe2b312622082705709479433f357 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -565,6 +565,9 @@ public class PurpurWorldConfig { public boolean drownedControllable = true; public double drownedMaxHealth = 20.0D; public double drownedSpawnReinforcements = 0.1D; + public boolean drownedJockeyOnlyBaby = true; + public double drownedJockeyChance = 0.05D; + public boolean drownedJockeyTryExistingChickens = true; private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); @@ -576,6 +579,9 @@ public class PurpurWorldConfig { } drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth); drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements); + drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); + drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); + drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); } public boolean elderGuardianRidable = false; @@ -813,6 +819,9 @@ public class PurpurWorldConfig { public boolean huskControllable = true; public double huskMaxHealth = 20.0D; public double huskSpawnReinforcements = 0.1D; + public boolean huskJockeyOnlyBaby = true; + public double huskJockeyChance = 0.05D; + public boolean huskJockeyTryExistingChickens = true; private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); @@ -824,6 +833,9 @@ public class PurpurWorldConfig { } huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth); huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements); + huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); + huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); + huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); } public boolean illusionerRidable = false; @@ -1619,6 +1631,9 @@ public class PurpurWorldConfig { public boolean zombieControllable = true; public double zombieMaxHealth = 20.0D; public double zombieSpawnReinforcements = 0.1D; + public boolean zombieJockeyOnlyBaby = true; + public double zombieJockeyChance = 0.05D; + public boolean zombieJockeyTryExistingChickens = true; private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); @@ -1630,6 +1645,9 @@ public class PurpurWorldConfig { } zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); + zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); + zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); + zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); } public boolean zombieHorseRidableInWater = false; @@ -1664,6 +1682,9 @@ public class PurpurWorldConfig { public boolean zombieVillagerControllable = true; public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerSpawnReinforcements = 0.1D; + public boolean zombieVillagerJockeyOnlyBaby = true; + public double zombieVillagerJockeyChance = 0.05D; + public boolean zombieVillagerJockeyTryExistingChickens = true; private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); @@ -1675,6 +1696,9 @@ public class PurpurWorldConfig { } zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); + zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); + zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); + zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); } public boolean zombifiedPiglinRidable = false; @@ -1682,6 +1706,9 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinControllable = true; public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; + public boolean zombifiedPiglinJockeyOnlyBaby = true; + public double zombifiedPiglinJockeyChance = 0.05D; + public boolean zombifiedPiglinJockeyTryExistingChickens = true; private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); @@ -1693,5 +1720,8 @@ public class PurpurWorldConfig { } zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); + zombifiedPiglinJockeyOnlyBaby = getBoolean("mobs.zombified_piglin.jockey.only-babies", zombifiedPiglinJockeyOnlyBaby); + zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); + zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); } }