From 8c7c278b8374ac82a8f5190d90eb03f122df86f4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 30 Aug 2021 22:50:28 -0500 Subject: [PATCH] Mad cow disease --- ...turally-aggressive-to-players-chance.patch | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 patches/server/0256-Cows-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0256-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0256-Cows-naturally-aggressive-to-players-chance.patch new file mode 100644 index 000000000..0c2ef9fed --- /dev/null +++ b/patches/server/0256-Cows-naturally-aggressive-to-players-chance.patch @@ -0,0 +1,79 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Mon, 30 Aug 2021 22:49:53 -0500 +Subject: [PATCH] Cows naturally aggressive to players chance + + +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 c718697a9511ccf761467644967397b777446db9..6855c409f1c793ec436f447838008853b9b249d2 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java +@@ -37,6 +37,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack; + // CraftBukkit end + + public class Cow extends Animal { ++ private boolean isNaturallyAggressiveToPlayers; // Purpur + + public Cow(EntityType type, Level world) { + super(type, world); +@@ -56,12 +57,19 @@ public class Cow extends Animal { + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth); ++ this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(2.0D); // Purpur + } + + @Override + public int getPurpurBreedTime() { + return this.level.purpurConfig.cowBreedingTicks; + } ++ ++ @Override ++ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData entityData, net.minecraft.nbt.CompoundTag entityNbt) { ++ this.isNaturallyAggressiveToPlayers = level.purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= level.purpurConfig.cowNaturallyAggressiveToPlayersChance; ++ return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); ++ } + // Purpur end + + @Override +@@ -69,6 +77,7 @@ public class Cow extends Animal { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); ++ this.goalSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + if (level.purpurConfig.cowFeedMushrooms > 0) this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT, Blocks.RED_MUSHROOM.asItem(), Blocks.BROWN_MUSHROOM.asItem()), false)); else // Purpur + this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); +@@ -76,10 +85,11 @@ public class Cow extends Animal { + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur + } + + public static AttributeSupplier.Builder createAttributes() { +- return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 10.0D).add(Attributes.MOVEMENT_SPEED, 0.20000000298023224D); ++ return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 10.0D).add(Attributes.MOVEMENT_SPEED, 0.20000000298023224D).add(Attributes.ATTACK_DAMAGE, 0.0D); // Purpur + } + + @Override +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index da9d2abf91b16c3b98ad8b1ab65b39b5e693e8e0..bbfbe72f3b5e06c50d074dbbb2d9f459bb15c04b 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -1143,6 +1143,7 @@ public class PurpurWorldConfig { + public double cowMaxHealth = 10.0D; + public int cowFeedMushrooms = 0; + public int cowBreedingTicks = 6000; ++ public double cowNaturallyAggressiveToPlayersChance = 0.0D; + private void cowSettings() { + cowRidable = getBoolean("mobs.cow.ridable", cowRidable); + cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); +@@ -1154,6 +1155,7 @@ public class PurpurWorldConfig { + cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); + cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); + cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); ++ cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); + } + + public boolean creeperRidable = false;