From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Mar 2020 19:46:44 -0500 Subject: [PATCH] Breedable Polar Bears 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 69e495a93cd1519297dcd8ef4971cca61b80f201..0b5d4416ad4dc0a90cbd1826c45c47412d2e85ed 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java @@ -94,6 +94,27 @@ public class PolarBear extends Animal implements NeutralMob { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.polarBearMaxHealth); } + + public boolean canMate(Animal other) { + if (other == this) { + return false; + } else if (this.isStanding()) { + return false; + } else if (this.getTarget() != null) { + return false; + } else if (!(other instanceof PolarBear)) { + return false; + } else { + PolarBear bear = (PolarBear) other; + if (bear.isStanding()) { + return false; + } + if (bear.getTarget() != null) { + return false; + } + return this.isInLove() && bear.isInLove(); + } + } // Purpur end @Override @@ -103,7 +124,7 @@ public class PolarBear extends Animal implements NeutralMob { @Override public boolean isFood(ItemStack stack) { - return false; + return level.purpurConfig.polarBearBreedableItem != null && stack.getItem() == level.purpurConfig.polarBearBreedableItem; // Purpur } @Override @@ -113,6 +134,12 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); this.goalSelector.addGoal(1, new PolarBear.PolarBearPanicGoal()); + // Purpur start + if (level.purpurConfig.polarBearBreedableItem != null) { + this.goalSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, net.minecraft.world.item.crafting.Ingredient.of(level.purpurConfig.polarBearBreedableItem), false)); + } + // Purpur end this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 809ded91042e66c2c761b813816d9b432cd9dff5..38af39e6b855be606240f3d6d85ed368cced78f8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -823,6 +823,8 @@ public class PurpurWorldConfig { public boolean polarBearRidable = false; public boolean polarBearRidableInWater = false; public double polarBearMaxHealth = 30.0D; + public String polarBearBreedableItemString = ""; + public Item polarBearBreedableItem = null; private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); @@ -832,6 +834,9 @@ public class PurpurWorldConfig { set("mobs.polar_bear.attributes.max_health", oldValue); } polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); + polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); + Item item = Registry.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); + if (item != Items.AIR) polarBearBreedableItem = item; } public boolean pufferfishRidable = false;