mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
more ridables
This commit is contained in:
@@ -235,6 +235,29 @@ index 20497c3962..3ac0d7afbf 100644
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityCaveSpider.java b/src/main/java/net/minecraft/server/EntityCaveSpider.java
|
||||
index 346b77083c..eca1cbd7f7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityCaveSpider.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityCaveSpider.java
|
||||
@@ -8,6 +8,18 @@ public class EntityCaveSpider extends EntitySpider {
|
||||
super(entitytypes, world);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.caveSpiderRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.caveSpiderRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
public static AttributeProvider.Builder m() {
|
||||
return EntitySpider.eL().a(GenericAttributes.MAX_HEALTH, 12.0D);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java
|
||||
index fa97552bb4..3a1d0a2f23 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityChicken.java
|
||||
@@ -370,6 +393,132 @@ index d6baddb9d3..db15c65ce6 100644
|
||||
}
|
||||
this.world.addEntity(mooshroom);
|
||||
this.die();
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityDrowned.java b/src/main/java/net/minecraft/server/EntityDrowned.java
|
||||
index 455b1d9225..46b08e9813 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityDrowned.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityDrowned.java
|
||||
@@ -19,6 +19,18 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity {
|
||||
this.navigationLand = new Navigation(this, world);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.drownedRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.drownedRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void m() {
|
||||
this.goalSelector.a(1, new EntityDrowned.c(this, 1.0D));
|
||||
@@ -217,7 +229,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity {
|
||||
this.d = flag;
|
||||
}
|
||||
|
||||
- static class d extends ControllerMove {
|
||||
+ static class d extends net.pl3x.purpur.controller.ControllerMoveWASD { // Purpur
|
||||
|
||||
private final EntityDrowned i;
|
||||
|
||||
@@ -227,7 +239,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity {
|
||||
}
|
||||
|
||||
@Override
|
||||
- public void a() {
|
||||
+ public void tick() { // Purpur
|
||||
EntityLiving entityliving = this.i.getGoalTarget();
|
||||
|
||||
if (this.i.eX() && this.i.isInWater()) {
|
||||
@@ -260,7 +272,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity {
|
||||
this.i.setMot(this.i.getMot().add(0.0D, -0.008D, 0.0D));
|
||||
}
|
||||
|
||||
- super.a();
|
||||
+ super.tick(); // Purpur
|
||||
}
|
||||
|
||||
}
|
||||
@@ -399,6 +411,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity {
|
||||
this.a = entitydrowned;
|
||||
this.b = d0;
|
||||
this.c = i;
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.MOVE)); // Purpur - swim up
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
index 245fc38def..a629a6caec 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
@@ -30,9 +30,22 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
this.a(PathType.WATER, -1.0F);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.endermanRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.endermanRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
this.goalSelector.a(0, new PathfinderGoalFloat(this));
|
||||
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(1, new EntityEnderman.a(this));
|
||||
this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false));
|
||||
this.goalSelector.a(7, new PathfinderGoalRandomStrollLand(this, 1.0D, 0.0F));
|
||||
@@ -40,6 +53,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
|
||||
this.goalSelector.a(10, new EntityEnderman.PathfinderGoalEndermanPlaceBlock(this));
|
||||
this.goalSelector.a(11, new EntityEnderman.PathfinderGoalEndermanPickupBlock(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 10, true, false, this::b));
|
||||
this.targetSelector.a(2, new EntityEnderman.PathfinderGoalPlayerWhoLookedAtTarget(this));
|
||||
this.targetSelector.a(3, new PathfinderGoalHurtByTarget(this, new Class[0]));
|
||||
@@ -221,7 +235,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
|
||||
@Override
|
||||
protected void mobTick() {
|
||||
- if (this.world.isDay() && this.ticksLived >= this.bz + 600) {
|
||||
+ if (!hasRider() && this.world.isDay() && this.ticksLived >= this.bz + 600) { // Purpur - no random teleporting
|
||||
float f = this.aO();
|
||||
|
||||
if (f > 0.5F && this.world.f(this.getChunkCoordinates()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
|
||||
@@ -322,6 +336,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (this.isInvulnerable(damagesource)) {
|
||||
return false;
|
||||
+ } else if (hasRider()) { return super.damageEntity(damagesource, f); // Purpur - no teleporting on damage
|
||||
} else if (damagesource instanceof EntityDamageSourceIndirect) {
|
||||
if (this.tryEscape(EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start
|
||||
for (int i = 0; i < 64; ++i) {
|
||||
@@ -366,6 +381,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
|
||||
public PathfinderGoalEndermanPickupBlock(EntityEnderman entityenderman) {
|
||||
this.enderman = entityenderman;
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.TARGET)); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -410,6 +426,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
|
||||
|
||||
public PathfinderGoalEndermanPlaceBlock(EntityEnderman entityenderman) {
|
||||
this.a = entityenderman;
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.TARGET)); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java
|
||||
index 90b01adbec..26de8c3ad6 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFox.java
|
||||
@@ -1160,6 +1309,134 @@ index cf2df391a9..9bd4cdf138 100644
|
||||
this.goalSelector.a(1, new PathfinderGoalPanic(this, 1.25D));
|
||||
this.goalSelector.a(3, new PathfinderGoalBreed(this, 1.0D));
|
||||
this.goalSelector.a(4, new PathfinderGoalTempt(this, 1.2D, RecipeItemStack.a(Items.CARROT_ON_A_STICK), false));
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
index 39bfb227e9..ea0e6028db 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
@@ -21,6 +21,18 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable {
|
||||
this.a(PathType.LAVA, 8.0F);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.zombifiedPiglinRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.zombifiedPiglinRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public void setAngerTarget(@Nullable UUID uuid) {
|
||||
this.by = uuid;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPiglin.java b/src/main/java/net/minecraft/server/EntityPiglin.java
|
||||
index 63fa1581eb..6b3218e209 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPiglin.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPiglin.java
|
||||
@@ -31,6 +31,24 @@ public class EntityPiglin extends EntityMonster implements ICrossbow {
|
||||
this.a(PathType.DAMAGE_FIRE, -1.0F);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.piglinRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.piglinRidableInWater;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected void initPathfinder() {
|
||||
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this));
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public void saveData(NBTTagCompound nbttagcompound) {
|
||||
super.saveData(nbttagcompound);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java
|
||||
index 6506e00557..05e5fb07a7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPolarBear.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPolarBear.java
|
||||
@@ -16,11 +16,35 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
|
||||
private static final IntRange bz = TimeRange.a(20, 39);
|
||||
private int bA;
|
||||
private UUID bB;
|
||||
+ private int standTimer = 0; // Purpur
|
||||
|
||||
public EntityPolarBear(EntityTypes<? extends EntityPolarBear> entitytypes, World world) {
|
||||
super(entitytypes, world);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.polarBearRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.polarBearRidableInWater;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onSpacebar() {
|
||||
+ if (!isStanding()) {
|
||||
+ if (hasRider() && getRider().getForward() == 0 && getRider().getStrafe() == 0) {
|
||||
+ setStanding(true);
|
||||
+ playSound(SoundEffects.ENTITY_POLAR_BEAR_WARNING, 1.0F, 1.0F);
|
||||
+ }
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public EntityAgeable createChild(EntityAgeable entityageable) {
|
||||
return (EntityAgeable) EntityTypes.POLAR_BEAR.a(this.world);
|
||||
@@ -59,6 +83,7 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
|
||||
protected void initPathfinder() {
|
||||
super.initPathfinder();
|
||||
this.goalSelector.a(0, new PathfinderGoalFloat(this));
|
||||
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(1, new EntityPolarBear.c());
|
||||
this.goalSelector.a(1, new EntityPolarBear.d());
|
||||
// Purpur start
|
||||
@@ -71,6 +96,7 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
|
||||
this.goalSelector.a(5, new PathfinderGoalRandomStroll(this, 1.0D));
|
||||
this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F));
|
||||
this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.targetSelector.a(1, new EntityPolarBear.b());
|
||||
this.targetSelector.a(2, new EntityPolarBear.a());
|
||||
this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 10, true, false, this::b));
|
||||
@@ -183,6 +209,11 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
|
||||
this.a((WorldServer) this.world, true);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ if (isStanding() && --standTimer <= 0) {
|
||||
+ setStanding(false);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -215,6 +246,7 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
|
||||
|
||||
public void setStanding(boolean standing) { t(standing); } // Purpur - OBFHELPER
|
||||
public void t(boolean flag) {
|
||||
+ standTimer = flag ? 20 : -1; // Purpur
|
||||
this.datawatcher.set(EntityPolarBear.bv, flag);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
index 1be0f943b0..8a8e745846 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
@@ -1282,6 +1559,39 @@ index dfe615814d..a9c44967b2 100644
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java
|
||||
index f6a6772002..be1189d57c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntitySpider.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntitySpider.java
|
||||
@@ -11,14 +11,28 @@ public class EntitySpider extends EntityMonster {
|
||||
super(entitytypes, world);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.spiderRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.spiderRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
this.goalSelector.a(1, new PathfinderGoalFloat(this));
|
||||
+ this.goalSelector.a(1, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(3, new PathfinderGoalLeapAtTarget(this, 0.4F));
|
||||
this.goalSelector.a(4, new EntitySpider.PathfinderGoalSpiderMeleeAttack(this));
|
||||
this.goalSelector.a(5, new PathfinderGoalRandomStrollLand(this, 0.8D));
|
||||
this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
|
||||
this.goalSelector.a(6, new PathfinderGoalRandomLookaround(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, new Class[0]));
|
||||
this.targetSelector.a(2, new EntitySpider.PathfinderGoalSpiderNearestAttackableTarget<>(this, EntityHuman.class));
|
||||
this.targetSelector.a(3, new EntitySpider.PathfinderGoalSpiderNearestAttackableTarget<>(this, EntityIronGolem.class));
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityStrider.java b/src/main/java/net/minecraft/server/EntityStrider.java
|
||||
index c123e9fe97..4cb4f60fd4 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityStrider.java
|
||||
@@ -1387,6 +1697,120 @@ index 9985afb124..2f59c1c91a 100644
|
||||
@Override
|
||||
public boolean a(EntityHuman entityhuman) {
|
||||
return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed();
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java
|
||||
index 5b519fa394..927d308254 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityWolf.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityWolf.java
|
||||
@@ -33,9 +33,27 @@ public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable
|
||||
this.setTamed(false);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.wolfRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.wolfRidableInWater;
|
||||
+ }
|
||||
+
|
||||
+ public void onMount(EntityHuman entityhuman) {
|
||||
+ super.onMount(entityhuman);
|
||||
+ setSitting(false);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
this.goalSelector.a(1, new PathfinderGoalFloat(this));
|
||||
+ this.goalSelector.a(1, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(2, new PathfinderGoalSit(this));
|
||||
this.goalSelector.a(3, new EntityWolf.a<>(this, EntityLlama.class, 24.0F, 1.5D, 1.5D));
|
||||
this.goalSelector.a(4, new PathfinderGoalLeapAtTarget(this, 0.4F));
|
||||
@@ -46,6 +64,7 @@ public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable
|
||||
this.goalSelector.a(9, new PathfinderGoalBeg(this, 8.0F));
|
||||
this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
|
||||
this.goalSelector.a(10, new PathfinderGoalRandomLookaround(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.targetSelector.a(1, new PathfinderGoalOwnerHurtByTarget(this));
|
||||
this.targetSelector.a(2, new PathfinderGoalOwnerHurtTarget(this));
|
||||
this.targetSelector.a(3, (new PathfinderGoalHurtByTarget(this, new Class[0])).a(new Class[0])); // CraftBukkit - decompile error
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
index 307a208602..f32814a0bd 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
@@ -45,11 +45,25 @@ public class EntityZombie extends EntityMonster {
|
||||
this(EntityTypes.ZOMBIE, world);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.zombieRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.zombieRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
if (world.purpurConfig.zombieTargetTurtleEggs) this.goalSelector.a(4, new EntityZombie.a(this, 1.0D, 3)); // Purpur
|
||||
this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
|
||||
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.m();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombieHusk.java b/src/main/java/net/minecraft/server/EntityZombieHusk.java
|
||||
index 2daff85620..1130a7712d 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombieHusk.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityZombieHusk.java
|
||||
@@ -9,6 +9,16 @@ public class EntityZombieHusk extends EntityZombie {
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.huskRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.huskRidableInWater;
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
public boolean jockeyOnlyBaby() {
|
||||
return world.purpurConfig.huskJockeyOnlyBaby;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java
|
||||
index 68fca8a8d7..abb40c89de 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombieVillager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java
|
||||
@@ -27,6 +27,18 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo
|
||||
this.setVillagerData(this.getVillagerData().withProfession((VillagerProfession) IRegistry.VILLAGER_PROFESSION.a(this.random)));
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isRidable() {
|
||||
+ return world.purpurConfig.zombieVillagerRidable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isRidableInWater() {
|
||||
+ return world.purpurConfig.zombieVillagerRidableInWater;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
protected void initDatawatcher() {
|
||||
super.initDatawatcher();
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 494d36085e..9cde3693c5 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -1405,10 +1829,10 @@ index 494d36085e..9cde3693c5 100644
|
||||
|
||||
public static String serverModName = "Purpur";
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 2f5bc77e03..94fa8ea180 100644
|
||||
index 2f5bc77e03..69f895ca9e 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -266,22 +266,34 @@ public class PurpurWorldConfig {
|
||||
@@ -266,22 +266,41 @@ public class PurpurWorldConfig {
|
||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||
}
|
||||
|
||||
@@ -1425,6 +1849,13 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange);
|
||||
}
|
||||
|
||||
+ public boolean caveSpiderRidable = false;
|
||||
+ public boolean caveSpiderRidableInWater = false;
|
||||
+ private void caveSpiderSettings() {
|
||||
+ caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
|
||||
+ caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean chickenRidable = false;
|
||||
+ public boolean chickenRidableInWater = false;
|
||||
public boolean chickenRetaliate = false;
|
||||
@@ -1443,7 +1874,7 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms);
|
||||
}
|
||||
|
||||
@@ -292,6 +304,11 @@ public class PurpurWorldConfig {
|
||||
@@ -292,10 +311,19 @@ public class PurpurWorldConfig {
|
||||
creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
|
||||
}
|
||||
|
||||
@@ -1452,10 +1883,27 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
+ donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean drownedRidable = false;
|
||||
+ public boolean drownedRidableInWater = false;
|
||||
public boolean drownedJockeyOnlyBaby = true;
|
||||
public double drownedJockeyChance = 0.05D;
|
||||
public boolean drownedJockeyTryExistingChickens = true;
|
||||
@@ -315,8 +332,12 @@ public class PurpurWorldConfig {
|
||||
private void drownedSettings() {
|
||||
+ drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
|
||||
+ drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
|
||||
drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby);
|
||||
drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance);
|
||||
drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens);
|
||||
@@ -310,13 +338,21 @@ public class PurpurWorldConfig {
|
||||
enderDragonMaxHealth = getDouble("mobs.ender_dragon.max-health", enderDragonMaxHealth);
|
||||
}
|
||||
|
||||
+ public boolean endermanRidable = false;
|
||||
+ public boolean endermanRidableInWater = false;
|
||||
public boolean endermanAllowGriefing = true;
|
||||
private void endermanSettings() {
|
||||
+ endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
|
||||
+ endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
|
||||
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
|
||||
}
|
||||
|
||||
@@ -1468,7 +1916,7 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
||||
}
|
||||
|
||||
@@ -337,6 +358,11 @@ public class PurpurWorldConfig {
|
||||
@@ -337,10 +373,19 @@ public class PurpurWorldConfig {
|
||||
giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI);
|
||||
}
|
||||
|
||||
@@ -1477,10 +1925,18 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
+ horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean huskRidable = false;
|
||||
+ public boolean huskRidableInWater = false;
|
||||
public boolean huskJockeyOnlyBaby = true;
|
||||
public double huskJockeyChance = 0.05D;
|
||||
public boolean huskJockeyTryExistingChickens = true;
|
||||
@@ -355,11 +381,55 @@ public class PurpurWorldConfig {
|
||||
private void huskSettings() {
|
||||
+ huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
|
||||
+ huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
|
||||
huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby);
|
||||
huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance);
|
||||
huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens);
|
||||
@@ -355,11 +400,55 @@ public class PurpurWorldConfig {
|
||||
illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange);
|
||||
}
|
||||
|
||||
@@ -1536,7 +1992,7 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
public double phantomAttackedByCrystalRadius = 0.0D;
|
||||
public float phantomAttackedByCrystalDamage = 1.0F;
|
||||
public double phantomOrbitCrystalRadius = 0.0D;
|
||||
@@ -393,8 +463,12 @@ public class PurpurWorldConfig {
|
||||
@@ -393,14 +482,29 @@ public class PurpurWorldConfig {
|
||||
phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt);
|
||||
}
|
||||
|
||||
@@ -1549,7 +2005,24 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack);
|
||||
}
|
||||
|
||||
@@ -413,13 +487,42 @@ public class PurpurWorldConfig {
|
||||
+ public boolean piglinRidable = false;
|
||||
+ public boolean piglinRidableInWater = false;
|
||||
+ private void piglinSettings() {
|
||||
+ piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
|
||||
+ piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean polarBearRidable = false;
|
||||
+ public boolean polarBearRidableInWater = false;
|
||||
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);
|
||||
polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
|
||||
Item item = IRegistry.ITEM.get(new MinecraftKey(polarBearBreedableItemString));
|
||||
if (item != Items.AIR) polarBearBreedableItem = item;
|
||||
@@ -413,13 +517,49 @@ public class PurpurWorldConfig {
|
||||
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
|
||||
}
|
||||
|
||||
@@ -1580,6 +2053,13 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack);
|
||||
}
|
||||
|
||||
+ public boolean spiderRidable = false;
|
||||
+ public boolean spiderRidableInWater = false;
|
||||
+ private void spiderSettings() {
|
||||
+ spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable);
|
||||
+ spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean striderRidable = false;
|
||||
+ public boolean striderRidableInWater = false;
|
||||
+ private void striderSettings() {
|
||||
@@ -1592,7 +2072,7 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
public int villagerBrainTicks = 1;
|
||||
public boolean villagerUseBrainTicksOnlyWhenLagging = true;
|
||||
public boolean villagerCanBeLeashed = false;
|
||||
@@ -428,6 +531,8 @@ public class PurpurWorldConfig {
|
||||
@@ -428,6 +568,8 @@ public class PurpurWorldConfig {
|
||||
public int villagerSpawnIronGolemRadius = 0;
|
||||
public int villagerSpawnIronGolemLimit = 0;
|
||||
private void villagerSettings() {
|
||||
@@ -1601,7 +2081,7 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
villagerBrainTicks = getInt("mobs.villager.brain-ticks", villagerBrainTicks);
|
||||
villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging);
|
||||
villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed);
|
||||
@@ -437,9 +542,13 @@ public class PurpurWorldConfig {
|
||||
@@ -437,9 +579,13 @@ public class PurpurWorldConfig {
|
||||
villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);
|
||||
}
|
||||
|
||||
@@ -1615,7 +2095,29 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
villagerTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", villagerTraderCanBeLeashed);
|
||||
villagerTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", villagerTraderFollowEmeraldBlock);
|
||||
}
|
||||
@@ -460,8 +569,12 @@ public class PurpurWorldConfig {
|
||||
@@ -449,35 +595,58 @@ public class PurpurWorldConfig {
|
||||
witherSkeletonTakesWitherDamage = getBoolean("mobs.wither_skeleton.takes-wither-damage", witherSkeletonTakesWitherDamage);
|
||||
}
|
||||
|
||||
+ public boolean wolfRidable = false;
|
||||
+ public boolean wolfRidableInWater = false;
|
||||
+ private void wolfSettings() {
|
||||
+ wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
|
||||
+ wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
|
||||
+ }
|
||||
+
|
||||
+ public boolean zombieRidable = false;
|
||||
+ public boolean zombieRidableInWater = false;
|
||||
public boolean zombieTargetTurtleEggs = true;
|
||||
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);
|
||||
zombieTargetTurtleEggs = getBoolean("mobs.zombie.target-turtle-eggs", zombieTargetTurtleEggs);
|
||||
zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby);
|
||||
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
||||
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
||||
}
|
||||
|
||||
@@ -1628,6 +2130,30 @@ index 2f5bc77e03..94fa8ea180 100644
|
||||
zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
}
|
||||
|
||||
+ public boolean zombifiedPiglinRidable = false;
|
||||
+ public boolean zombifiedPiglinRidableInWater = false;
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
+ public boolean zombieVillagerRidable = false;
|
||||
+ public boolean zombieVillagerRidableInWater = false;
|
||||
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);
|
||||
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);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java
|
||||
new file mode 100644
|
||||
index 0000000000..828e1b8730
|
||||
|
||||
Reference in New Issue
Block a user