mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Breedable Polar Bears
This commit is contained in:
committed by
granny
parent
fe5fcdab1b
commit
ad2831aaba
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user