Breedable Polar Bears

This commit is contained in:
William Blake Galbreath
2025-01-05 13:40:05 -08:00
committed by granny
parent fe5fcdab1b
commit ad2831aaba
5 changed files with 74 additions and 96 deletions

View File

@@ -1414,10 +1414,10 @@ index d203d9c63c13f40a913235ad78a24a3bf489a083..70c60499a440aa4ac8bbc14d5fa440d9
this.goalSelector.addGoal(3, new BreedGoal(this, 1.0));
this.goalSelector.addGoal(4, new TemptGoal(this, 1.2, itemStack -> itemStack.is(Items.CARROT_ON_A_STICK), false));
diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java
index f568c385e1427e183aefb5819013838aca95407b..c0356a2e1e4a5dbefb5f1546869f449e00b76b99 100644
index fbd35f074a3045d483aabd9bc7e1c9c4f10a3167..711ed0d753494a92a003fc683146f289505ed7f6 100644
--- a/net/minecraft/world/entity/animal/PolarBear.java
+++ b/net/minecraft/world/entity/animal/PolarBear.java
@@ -59,11 +59,40 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -59,6 +59,7 @@ public class PolarBear extends Animal implements NeutralMob {
private int remainingPersistentAngerTime;
@Nullable
private UUID persistentAngerTarget;
@@ -1425,7 +1425,9 @@ index f568c385e1427e183aefb5819013838aca95407b..c0356a2e1e4a5dbefb5f1546869f449e
public PolarBear(EntityType<? extends PolarBear> entityType, Level level) {
super(entityType, level);
@@ -87,6 +88,34 @@ public class PolarBear extends Animal implements NeutralMob {
}
// Purpur end - Breedable Polar Bears
+ // Purpur start - Ridables
+ @Override
@@ -1458,14 +1460,15 @@ index f568c385e1427e183aefb5819013838aca95407b..c0356a2e1e4a5dbefb5f1546869f449e
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) {
@@ -79,12 +108,14 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -102,6 +131,7 @@ public class PolarBear extends Animal implements NeutralMob {
protected void registerGoals() {
super.registerGoals();
this.goalSelector.addGoal(0, new FloatGoal(this));
+ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal());
this.goalSelector.addGoal(1, new PanicGoal(this, 2.0, mob -> mob.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES));
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25));
// Purpur start - Breedable Polar Bears
@@ -114,6 +144,7 @@ public class PolarBear extends Animal implements NeutralMob {
this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(7, new RandomLookAroundGoal(this));
@@ -1473,7 +1476,7 @@ index f568c385e1427e183aefb5819013838aca95407b..c0356a2e1e4a5dbefb5f1546869f449e
this.targetSelector.addGoal(1, new PolarBear.PolarBearHurtByTargetGoal());
this.targetSelector.addGoal(2, new PolarBear.PolarBearAttackPlayersGoal());
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt));
@@ -203,6 +234,12 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -232,6 +263,12 @@ public class PolarBear extends Animal implements NeutralMob {
if (!this.level().isClientSide) {
this.updatePersistentAnger((ServerLevel)this.level(), true);
}
@@ -1486,7 +1489,7 @@ index f568c385e1427e183aefb5819013838aca95407b..c0356a2e1e4a5dbefb5f1546869f449e
}
@Override
@@ -222,6 +259,7 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -251,6 +288,7 @@ public class PolarBear extends Animal implements NeutralMob {
public void setStanding(boolean standing) {
this.entityData.set(DATA_STANDING_ID, standing);

View File

@@ -183,7 +183,7 @@ index 0e4112793dddc0d75f4bed35bb880c03b2d1318f..bb5e9256f9eec523dadeaa80879a44e2
@Override
public SpawnGroupData finalizeSpawn(
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
index ff22b9bd7eb2b60fac58cae0a2be1d93a6eef7b7..f0bea098d69b98bb2baba2290239a5c803160c24 100644
index 8b0a813f9dd001c6dd108ba7aac04d134a20fbc1..8bf893837586ae2a9b4ef7564d242e16e4863b5d 100644
--- a/net/minecraft/world/entity/animal/Fox.java
+++ b/net/minecraft/world/entity/animal/Fox.java
@@ -167,6 +167,14 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -329,10 +329,10 @@ index 70c60499a440aa4ac8bbc14d5fa440d9c51e2d82..650d6a2eaa1c106f8618a36dbd780d15
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java
index c0356a2e1e4a5dbefb5f1546869f449e00b76b99..0e4e981b56d8a923ef1fd19aa53cb519094fb2bf 100644
index 711ed0d753494a92a003fc683146f289505ed7f6..913439a769a36521ba59d59cba4d6878d3186254 100644
--- a/net/minecraft/world/entity/animal/PolarBear.java
+++ b/net/minecraft/world/entity/animal/PolarBear.java
@@ -93,6 +93,14 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -116,6 +116,14 @@ public class PolarBear extends Animal implements NeutralMob {
}
// Purpur end - Ridables
@@ -366,7 +366,7 @@ index f7e9abf778186ad1c78dbe411980a83c5e68792e..e3c20694fc41b8a0a9d5170560be00fb
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java
index 9342662abf74b921573aba2bbacb43e6ad5683f5..41b4f86ca29f04896b46685884dd92ceac75d49f 100644
index 8cac46951938c80fae3499e8b53709c25d86e9bd..e71161ecc9d4ee3fe29fa3a27d11d63e1a28d1a0 100644
--- a/net/minecraft/world/entity/animal/Rabbit.java
+++ b/net/minecraft/world/entity/animal/Rabbit.java
@@ -137,6 +137,14 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> {
@@ -987,7 +987,7 @@ index 4873a3d8dd9c160ecdbda594ee546c35ec03a1e7..64eecd8d1acd318743800c1daa77cd97
public boolean doHurtTarget(ServerLevel level, Entity source) {
if (super.doHurtTarget(level, source)) {
diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java
index 9adf407bde97e607af915123a999fde2728ad7a4..3ae4c1474a268070250d42396ab94f0ea93f390c 100644
index cae4c797cf72920b9fd8e79d95d51367b5f7b87b..38240849c3d3509b0120fbb1736354577dede90c 100644
--- a/net/minecraft/world/entity/monster/Creeper.java
+++ b/net/minecraft/world/entity/monster/Creeper.java
@@ -130,6 +130,14 @@ public class Creeper extends Monster {
@@ -1517,7 +1517,7 @@ index 26528bc9a9cffb68f82917a3e70900cfb65304d7..8356906b2c0707e21021bb05f9ca01a9
public boolean isFlapping() {
return this.tickCount % TICKS_PER_FLAP == 0;
diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java
index 637d7a78dd92851afb8a68bfdbbf84019d21599c..81545d39715bffcadab8c48ae30be3a8023940e2 100644
index c1a1bb0be8bc77a1c0f771924f3bb8b4936d367b..0fc1b458101ba9d98d25c9637337caf0949bb893 100644
--- a/net/minecraft/world/entity/monster/Vindicator.java
+++ b/net/minecraft/world/entity/monster/Vindicator.java
@@ -72,6 +72,14 @@ public class Vindicator extends AbstractIllager {

View File

@@ -0,0 +1,54 @@
--- a/net/minecraft/world/entity/animal/PolarBear.java
+++ b/net/minecraft/world/entity/animal/PolarBear.java
@@ -64,6 +_,29 @@
super(entityType, level);
}
+ // Purpur start - Breedable Polar Bears
+ 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 - Breedable Polar Bears
+
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) {
@@ -72,7 +_,7 @@
@Override
public boolean isFood(ItemStack stack) {
- return false;
+ return level().purpurConfig.polarBearBreedableItem != null && stack.getItem() == level().purpurConfig.polarBearBreedableItem; // Purpur - Breedable Polar Bears
}
@Override
@@ -81,6 +_,12 @@
this.goalSelector.addGoal(0, new FloatGoal(this));
this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal());
this.goalSelector.addGoal(1, new PanicGoal(this, 2.0, mob -> mob.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES));
+ // Purpur start - Breedable Polar Bears
+ 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 - Breedable Polar Bears
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25));
this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));

View File

@@ -1059,6 +1059,8 @@ public class PurpurWorldConfig {
public boolean polarBearControllable = true;
public double polarBearMaxHealth = 30.0D;
public double polarBearScale = 1.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);
@@ -1070,6 +1072,9 @@ public class PurpurWorldConfig {
}
polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth);
polarBearScale = Mth.clamp(getDouble("mobs.polar_bear.attributes.scale", polarBearScale), 0.0625D, 16.0D);
polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString));
if (item != Items.AIR) polarBearBreedableItem = item;
}
public boolean pufferfishRidable = false;