more ridables stuff

This commit is contained in:
William Blake Galbreath
2020-07-08 07:41:07 -05:00
parent ec0c1b0542
commit 53f78c8ec1

View File

@@ -287,7 +287,7 @@ index 920f4c7671..7fec83387a 100644
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
index d6baddb9d3..a4b1255add 100644
index d6baddb9d3..db15c65ce6 100644
--- a/src/main/java/net/minecraft/server/EntityCow.java
+++ b/src/main/java/net/minecraft/server/EntityCow.java
@@ -11,9 +11,22 @@ public class EntityCow extends EntityAnimal {
@@ -326,7 +326,7 @@ index d6baddb9d3..a4b1255add 100644
if (event.isCancelled()) {
- return EnumInteractionResult.PASS;
+ return super.b(entityhuman, enumhand);
+ return tryRide(entityhuman, enumhand); // Purpur
}
// CraftBukkit end
@@ -353,7 +353,7 @@ index d6baddb9d3..a4b1255add 100644
EntityMushroomCow mooshroom = EntityTypes.MOOSHROOM.create(world);
if (mooshroom == null) {
- return EnumInteractionResult.PASS;
+ return super.b(entityhuman, enumhand);
+ return tryRide(entityhuman, enumhand); // Purpur
}
if (itemstack.getItem() == Blocks.BROWN_MUSHROOM.getItem()) {
mooshroom.setVariant(EntityMushroomCow.Type.BROWN);
@@ -362,11 +362,11 @@ index d6baddb9d3..a4b1255add 100644
}
if (CraftEventFactory.callEntityTransformEvent(this, mooshroom, org.bukkit.event.entity.EntityTransformEvent.TransformReason.INFECTION).isCancelled()) {
- return EnumInteractionResult.PASS;
+ return super.b(entityhuman, enumhand);
+ return tryRide(entityhuman, enumhand); // Purpur
}
if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.INFECTED).callEvent()) {
- return EnumInteractionResult.PASS;
+ return super.b(entityhuman, enumhand);
+ return tryRide(entityhuman, enumhand); // Purpur
}
this.world.addEntity(mooshroom);
this.die();
@@ -652,7 +652,7 @@ index 0cbdccf4c5..19a21ff98d 100644
+ protected void eW() { if (world.purpurConfig.zombieHorseCanSwim) goalSelector.a(0, new PathfinderGoalFloat(this)); } // Purpur
}
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index 8def5fbfb4..a64de2248b 100644
index 8def5fbfb4..fe6ff77935 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -67,8 +67,8 @@ public abstract class EntityInsentient extends EntityLiving {
@@ -666,7 +666,22 @@ index 8def5fbfb4..a64de2248b 100644
this.bp = new ControllerJump(this);
this.c = this.r();
this.navigation = this.b(world);
@@ -532,6 +532,7 @@ public abstract class EntityInsentient extends EntityLiving {
@@ -520,18 +520,22 @@ public abstract class EntityInsentient extends EntityLiving {
return super.do_();
}
+ public void setForwardSpeed(float speed) { this.q(speed); } // Purpur - OBFHELPER
public void q(float f) {
this.ba = f;
}
+ public void setVerticalSpeed(float speed) { this.r(speed); } // Purpur - OBFHELPER
public void r(float f) {
this.aZ = f;
}
+ public void setStrafeSpeed(float speed) { this.s(speed); } // Purpur - OBFHELPER
public void s(float f) {
this.aY = f;
}
@@ -674,7 +689,7 @@ index 8def5fbfb4..a64de2248b 100644
@Override
public void n(float f) {
super.n(f);
@@ -1200,7 +1201,7 @@ public abstract class EntityInsentient extends EntityLiving {
@@ -1200,7 +1204,7 @@ public abstract class EntityInsentient extends EntityLiving {
protected void a(EntityHuman entityhuman, EntityInsentient entityinsentient) {}
protected EnumInteractionResult b(EntityHuman entityhuman, EnumHand enumhand) {
@@ -683,7 +698,7 @@ index 8def5fbfb4..a64de2248b 100644
}
public boolean ew() {
@@ -1559,4 +1560,42 @@ public abstract class EntityInsentient extends EntityLiving {
@@ -1559,4 +1563,42 @@ public abstract class EntityInsentient extends EntityLiving {
this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
this.unleash(true, false);
}
@@ -726,6 +741,57 @@ index 8def5fbfb4..a64de2248b 100644
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java
index ab0731c2a0..2da50ef495 100644
--- a/src/main/java/net/minecraft/server/EntityIronGolem.java
+++ b/src/main/java/net/minecraft/server/EntityIronGolem.java
@@ -22,9 +22,22 @@ public class EntityIronGolem extends EntityGolem implements IEntityAngerable {
this.G = 1.0F;
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.ironGolemRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.ironGolemRidableInWater;
+ }
+ // Purpur end
+
@Override
protected void initPathfinder() {
if (world.purpurConfig.ironGolemCanSwim) this.goalSelector.a(0, new PathfinderGoalFloat(this)); // Purpur
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.goalSelector.a(1, new PathfinderGoalMeleeAttack(this, 1.0D, true));
this.goalSelector.a(2, new PathfinderGoalMoveTowardsTarget(this, 0.9D, 32.0F));
this.goalSelector.a(2, new PathfinderGoalStrollVillage(this, 0.6D, false));
@@ -32,6 +45,7 @@ public class EntityIronGolem extends EntityGolem implements IEntityAngerable {
this.goalSelector.a(5, new PathfinderGoalOfferFlower(this));
this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F));
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.targetSelector.a(1, new PathfinderGoalDefendVillage(this));
this.targetSelector.a(2, new PathfinderGoalHurtByTarget(this, new Class[0]));
this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 10, true, false, this::b));
@@ -201,13 +215,13 @@ public class EntityIronGolem extends EntityGolem implements IEntityAngerable {
Item item = itemstack.getItem();
if (item != Items.IRON_INGOT) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
} else {
float f = this.getHealth();
this.heal(25.0F);
if (this.getHealth() == f) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
} else {
float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F;
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index cb9fdfd114..22b13896d0 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
@@ -749,10 +815,10 @@ index cb9fdfd114..22b13896d0 100644
if (this.hasEffect(MobEffects.JUMP)) {
diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java
index cf31920850..e8a87e6bed 100644
index cf31920850..15efaffe24 100644
--- a/src/main/java/net/minecraft/server/EntityLlama.java
+++ b/src/main/java/net/minecraft/server/EntityLlama.java
@@ -18,6 +18,28 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
@@ -18,7 +18,46 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
public EntityLlama(EntityTypes<? extends EntityLlama> entitytypes, World world) {
super(entitytypes, world);
@@ -778,9 +844,322 @@ index cf31920850..e8a87e6bed 100644
+ }
+ };
+ // Purpur end
+ }
+
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.llamaRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.llamaRidableInWater;
+ }
+
+ @Override
+ public boolean hasSaddle() {
+ return super.hasSaddle() || (isTamed() && getColor() != null);
}
+ // Purpur end
public void setStrength(int i) {
this.datawatcher.set(EntityLlama.bE, Math.max(1, Math.min(5, i)));
@@ -64,6 +103,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
@Override
protected void initPathfinder() {
this.goalSelector.a(0, new PathfinderGoalFloat(this));
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHorseHasRider(this)); // Purpur
this.goalSelector.a(1, new PathfinderGoalTame(this, 1.2D));
this.goalSelector.a(2, new PathfinderGoalLlamaFollow(this, 2.0999999046325684D));
this.goalSelector.a(3, new PathfinderGoalArrowAttack(this, 1.25D, 40, 20.0F));
@@ -73,6 +113,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
this.goalSelector.a(6, new PathfinderGoalRandomStrollLand(this, 0.7D));
this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F));
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHorseHasRider(this)); // Purpur
this.targetSelector.a(1, new EntityLlama.c(this));
this.targetSelector.a(2, new EntityLlama.a(this));
}
@@ -310,7 +351,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
}
@Nullable
- public EnumColor fz() {
+ public EnumColor fz() { return getColor(); } public EnumColor getColor() { // Purpur - OBFHELPER
int i = (Integer) this.datawatcher.get(EntityLlama.bF);
return i == -1 ? null : EnumColor.fromColorIndex(i);
diff --git a/src/main/java/net/minecraft/server/EntityLlamaTrader.java b/src/main/java/net/minecraft/server/EntityLlamaTrader.java
index 11008c4323..de8ce2fd39 100644
--- a/src/main/java/net/minecraft/server/EntityLlamaTrader.java
+++ b/src/main/java/net/minecraft/server/EntityLlamaTrader.java
@@ -11,6 +11,23 @@ public class EntityLlamaTrader extends EntityLlama {
super(entitytypes, world);
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.llamaTraderRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.llamaTraderRidableInWater;
+ }
+
+ @Override
+ public boolean hasSaddle() {
+ return super.hasSaddle() || isTamed();
+ }
+ // Purpur end
+
@Override
protected EntityLlama fA() {
return (EntityLlama) EntityTypes.TRADER_LLAMA.a(this.world);
diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java
index ecbdc65ec5..a36e7d182f 100644
--- a/src/main/java/net/minecraft/server/EntityMushroomCow.java
+++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java
@@ -20,6 +20,18 @@ public class EntityMushroomCow extends EntityCow implements IShearable {
super(entitytypes, world);
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.mooshroomRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.mooshroomRidableInWater;
+ }
+ // Purpur end
+
@Override
public float a(BlockPosition blockposition, IWorldReader iworldreader) {
return iworldreader.getType(blockposition.down()).a(Blocks.MYCELIUM) ? 10.0F : iworldreader.y(blockposition) - 0.5F;
@@ -81,7 +93,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable {
} else if (itemstack.getItem() == Items.SHEARS && this.canShear()) {
// CraftBukkit start
if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
// CraftBukkit end
this.shear(SoundCategory.PLAYERS);
@@ -101,7 +113,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable {
Optional<Pair<MobEffectList, Integer>> optional = this.l(itemstack);
if (!optional.isPresent()) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
Pair<MobEffectList, Integer> pair = (Pair) optional.get();
diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java
index 9c1f019f91..366acbfd91 100644
--- a/src/main/java/net/minecraft/server/EntityOcelot.java
+++ b/src/main/java/net/minecraft/server/EntityOcelot.java
@@ -16,6 +16,18 @@ public class EntityOcelot extends EntityAnimal {
this.eM();
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.ocelotRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.ocelotRidableInWater;
+ }
+ // Purpur end
+
private boolean isTrusting() {
return (Boolean) this.datawatcher.get(EntityOcelot.bw);
}
@@ -47,12 +59,14 @@ public class EntityOcelot extends EntityAnimal {
protected void initPathfinder() {
this.by = new EntityOcelot.b(this, 0.6D, EntityOcelot.bv, true);
this.goalSelector.a(1, new PathfinderGoalFloat(this));
+ this.goalSelector.a(1, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.goalSelector.a(3, this.by);
this.goalSelector.a(7, new PathfinderGoalLeapAtTarget(this, 0.3F));
this.goalSelector.a(8, new PathfinderGoalOcelotAttack(this));
this.goalSelector.a(9, new PathfinderGoalBreed(this, 0.8D));
this.goalSelector.a(10, new PathfinderGoalRandomStrollLand(this, 0.8D, 1.0000001E-5F));
this.goalSelector.a(11, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 10.0F));
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityChicken.class, false));
this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, 10, false, false, EntityTurtle.bv));
}
diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java
index 42df0d74ee..271e82ce17 100644
--- a/src/main/java/net/minecraft/server/EntityPanda.java
+++ b/src/main/java/net/minecraft/server/EntityPanda.java
@@ -46,6 +46,27 @@ public class EntityPanda extends EntityAnimal {
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.pandaRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.pandaRidableInWater;
+ }
+
+ @Override
+ public void onMount(EntityHuman entityhuman) {
+ super.onMount(entityhuman);
+ this.setForwardSpeed(0.0F);
+ this.setScared(false);
+ this.setEating(false);
+ this.setLayingOnBack(false);
+ }
+ // Purpur end
+
@Override
public boolean e(ItemStack itemstack) {
EnumItemSlot enumitemslot = EntityInsentient.j(itemstack);
@@ -69,6 +90,7 @@ public class EntityPanda extends EntityAnimal {
return this.w(8);
}
+ public void setScared(boolean scared) { this.t(scared); } // Purpur - OBFHELPER
public void t(boolean flag) {
this.d(8, flag);
}
@@ -77,6 +99,7 @@ public class EntityPanda extends EntityAnimal {
return this.w(16);
}
+ public void setLayingOnBack(boolean layingOnBack) { this.u(layingOnBack); } // Purpur - OBFHELPER
public void u(boolean flag) {
this.d(16, flag);
}
@@ -85,6 +108,7 @@ public class EntityPanda extends EntityAnimal {
return (Integer) this.datawatcher.get(EntityPanda.by) > 0;
}
+ public void setEating(boolean eating) { this.v(eating); } // Purpur - OBFHELPER
public void v(boolean flag) {
this.datawatcher.set(EntityPanda.by, flag ? 1 : 0);
}
@@ -201,6 +225,7 @@ public class EntityPanda extends EntityAnimal {
@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(2, new EntityPanda.i(this, 2.0D));
this.goalSelector.a(2, new EntityPanda.d(this, 1.0D));
this.goalSelector.a(3, new EntityPanda.b(this, 1.2000000476837158D, true));
@@ -216,6 +241,7 @@ public class EntityPanda extends EntityAnimal {
this.goalSelector.a(12, new EntityPanda.j(this));
this.goalSelector.a(13, new PathfinderGoalFollowParent(this, 1.25D));
this.goalSelector.a(14, new PathfinderGoalRandomStrollLand(this, 1.0D));
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.targetSelector.a(1, (new EntityPanda.e(this, new Class[0])).a(new Class[0]));
}
@@ -537,7 +563,7 @@ public class EntityPanda extends EntityAnimal {
ItemStack itemstack = entityhuman.b(enumhand);
if (this.fg()) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
} else if (this.eO()) {
this.u(false);
return EnumInteractionResult.a(this.world.isClientSide);
@@ -554,7 +580,7 @@ public class EntityPanda extends EntityAnimal {
this.g(entityhuman);
} else {
if (this.world.isClientSide || this.eN() || this.isInWater()) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
this.fu();
@@ -571,7 +597,7 @@ public class EntityPanda extends EntityAnimal {
return EnumInteractionResult.SUCCESS;
} else {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
}
@@ -684,6 +710,7 @@ public class EntityPanda extends EntityAnimal {
public f(EntityPanda entitypanda) {
this.a = entitypanda;
+ this.a(EnumSet.of(PathfinderGoal.Type.MOVE)); // Purpur - lay on back
}
@Override
@@ -847,6 +874,7 @@ public class EntityPanda extends EntityAnimal {
public l(EntityPanda entitypanda) {
this.a = entitypanda;
+ this.a(EnumSet.of(PathfinderGoal.Type.MOVE)); // Purpur - sneeze
}
@Override
@@ -976,7 +1004,7 @@ public class EntityPanda extends EntityAnimal {
}
}
- static class h extends ControllerMove {
+ static class h extends net.pl3x.purpur.controller.ControllerMoveWASD { // Purpur
private final EntityPanda i;
@@ -986,9 +1014,9 @@ public class EntityPanda extends EntityAnimal {
}
@Override
- public void a() {
+ public void tick() { // Purpur
if (this.i.fi()) {
- super.a();
+ super.tick(); // Purpur
}
}
}
diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java
index cf2df391a9..9bd4cdf138 100644
--- a/src/main/java/net/minecraft/server/EntityPig.java
+++ b/src/main/java/net/minecraft/server/EntityPig.java
@@ -19,9 +19,22 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable {
this.saddleStorage = new SaddleStorage(this.datawatcher, EntityPig.bw, EntityPig.bv);
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.pigRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.pigRidableInWater;
+ }
+ // 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 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/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
index 1be0f943b0..8a8e745846 100644
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
@@ -794,6 +1173,43 @@ index 1be0f943b0..8a8e745846 100644
super.jump();
double d0 = this.moveController.c();
diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java
index a5532e49e7..adfed0997f 100644
--- a/src/main/java/net/minecraft/server/EntitySheep.java
+++ b/src/main/java/net/minecraft/server/EntitySheep.java
@@ -17,7 +17,7 @@ import org.bukkit.inventory.InventoryView;
public class EntitySheep extends EntityAnimal implements IShearable {
private static final DataWatcherObject<Byte> bv = DataWatcher.a(EntitySheep.class, DataWatcherRegistry.a);
- private static final Map<EnumColor, IMaterial> bw = (Map) SystemUtils.a(Maps.newEnumMap(EnumColor.class), (enummap) -> { // CraftBukkit - decompile error
+ private static final Map<EnumColor, IMaterial> bw = SystemUtils.a(Maps.newEnumMap(EnumColor.class), (enummap) -> { // CraftBukkit - decompile error // Purpur - decompile error
enummap.put(EnumColor.WHITE, Blocks.WHITE_WOOL);
enummap.put(EnumColor.ORANGE, Blocks.ORANGE_WOOL);
enummap.put(EnumColor.MAGENTA, Blocks.MAGENTA_WOOL);
@@ -56,10 +56,23 @@ public class EntitySheep extends EntityAnimal implements IShearable {
super(entitytypes, world);
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.sheepRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.sheepRidableInWater;
+ }
+ // Purpur end
+
@Override
protected void initPathfinder() {
this.bz = new PathfinderGoalEatTile(this);
this.goalSelector.a(0, new PathfinderGoalFloat(this));
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.goalSelector.a(1, new PathfinderGoalPanic(this, 1.25D));
this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D));
this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.1D, RecipeItemStack.a(Items.WHEAT), false));
diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java
index a4642cc739..ecf2059b00 100644
--- a/src/main/java/net/minecraft/server/EntitySlime.java
@@ -807,6 +1223,105 @@ index a4642cc739..ecf2059b00 100644
Vec3D vec3d = this.getMot();
this.setMot(vec3d.x, (double) this.dI(), vec3d.z);
diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java
index dfe615814d..a9c44967b2 100644
--- a/src/main/java/net/minecraft/server/EntitySnowman.java
+++ b/src/main/java/net/minecraft/server/EntitySnowman.java
@@ -13,13 +13,27 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt
public EntitySnowman(EntityTypes<? extends EntitySnowman> entitytypes, World world) {
super(entitytypes, world);
}
+
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.snowGolemRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.snowGolemRidableInWater;
+ }
+ // Purpur end
@Override
protected void initPathfinder() {
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.goalSelector.a(1, new PathfinderGoalArrowAttack(this, 1.25D, 20, 10.0F));
this.goalSelector.a(2, new PathfinderGoalRandomStrollLand(this, 1.0D, 1.0000001E-5F));
this.goalSelector.a(3, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F));
this.goalSelector.a(4, new PathfinderGoalRandomLookaround(this));
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityInsentient.class, 10, true, false, (entityliving) -> {
return entityliving instanceof IMonster;
}));
@@ -71,6 +85,8 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt
return;
}
+ if (hasRider() && !world.purpurConfig.snowGolemLeaveTrailWhenRidden) return; // Purpur - don't leave snow trail when being ridden
+
IBlockData iblockdata = Blocks.SNOW.getBlockData();
for (int l = 0; l < 4; ++l) {
@@ -113,7 +129,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt
if (itemstack.getItem() == Items.SHEARS && this.canShear()) {
// CraftBukkit start
if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
// CraftBukkit end
this.shear(SoundCategory.PLAYERS);
@@ -141,7 +157,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt
return EnumInteractionResult.SUCCESS;
// Purpur end
} else {
- return EnumInteractionResult.PASS;
+ return tryRide(entityhuman, enumhand); // Purpur
}
}
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
+++ b/src/main/java/net/minecraft/server/EntityStrider.java
@@ -28,6 +28,18 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab
this.a(PathType.DAMAGE_FIRE, 0.0F);
}
+ // Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.striderRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.striderRidableInWater;
+ }
+ // Purpur end
+
public static boolean c(EntityTypes<EntityStrider> entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) {
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = blockposition.i();
@@ -89,6 +101,7 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab
@Override
protected void initPathfinder() {
this.bC = new PathfinderGoalPanic(this, 1.65D);
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
this.goalSelector.a(1, this.bC);
this.goalSelector.a(3, new PathfinderGoalBreed(this, 1.0D));
this.bB = new PathfinderGoalTempt(this, 1.4D, false, EntityStrider.bw);
@@ -380,7 +393,7 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab
if (!enuminteractionresult.a()) {
ItemStack itemstack = entityhuman.b(enumhand);
- return itemstack.getItem() == Items.SADDLE ? itemstack.a(entityhuman, (EntityLiving) this, enumhand) : EnumInteractionResult.PASS;
+ return itemstack.getItem() == Items.SADDLE ? itemstack.a(entityhuman, (EntityLiving) this, enumhand) : tryRide(entityhuman, enumhand); // Purpur
} else {
if (flag && !this.isSilent()) {
this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_STRIDER_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
diff --git a/src/main/java/net/minecraft/server/EntityTameableAnimal.java b/src/main/java/net/minecraft/server/EntityTameableAnimal.java
index 9b0d937f06..0b0cca4e35 100644
--- a/src/main/java/net/minecraft/server/EntityTameableAnimal.java
@@ -819,6 +1334,59 @@ index 9b0d937f06..0b0cca4e35 100644
public boolean j(EntityLiving entityliving) {
return entityliving == this.getOwner();
}
diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java
index 86de40d15b..903940feb6 100644
--- a/src/main/java/net/minecraft/server/EntityVillager.java
+++ b/src/main/java/net/minecraft/server/EntityVillager.java
@@ -75,8 +75,19 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
}
// Purpur start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.villagerRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.villagerRidableInWater;
+ }
+
@Override
protected void initPathfinder() {
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
if (world.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, TEMPT_ITEMS));
}
diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java
index 9985afb124..2f59c1c91a 100644
--- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java
+++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java
@@ -23,6 +23,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract {
@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(0, new PathfinderGoalUseItem<>(this, PotionUtil.a(new ItemStack(Items.POTION), Potions.INVISIBILITY), SoundEffects.ENTITY_WANDERING_TRADER_DISAPPEARED, (entityvillagertrader) -> {
return !this.world.isDay() && !entityvillagertrader.isInvisible();
}));
@@ -48,6 +49,16 @@ public class EntityVillagerTrader extends EntityVillagerAbstract {
}
// Purpur - start
+ @Override
+ public boolean isRidable() {
+ return world.purpurConfig.villagerTraderRidable;
+ }
+
+ @Override
+ public boolean isRidableInWater() {
+ return world.purpurConfig.villagerTraderRidableInWater;
+ }
+
@Override
public boolean a(EntityHuman entityhuman) {
return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed();
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
@@ -837,7 +1405,7 @@ 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..9d6894a24c 100644
index 2f5bc77e03..94fa8ea180 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 {
@@ -912,22 +1480,86 @@ index 2f5bc77e03..9d6894a24c 100644
public boolean huskJockeyOnlyBaby = true;
public double huskJockeyChance = 0.05D;
public boolean huskJockeyTryExistingChickens = true;
@@ -360,6 +386,11 @@ public class PurpurWorldConfig {
@@ -355,11 +381,55 @@ public class PurpurWorldConfig {
illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange);
}
+ public boolean ironGolemRidable = false;
+ public boolean ironGolemRidableInWater = false;
public boolean ironGolemCanSwim = false;
private void ironGolemSettings() {
+ ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
+ ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
ironGolemCanSwim = getBoolean("mobs.iron_golem.can-swim", ironGolemCanSwim);
}
+ public boolean llamaRidable = false;
+ public boolean llamaRidableInWater = false;
+ private void llamaSettings() {
+ llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
+ llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
+ }
+
+ public boolean llamaTraderRidable = false;
+ public boolean llamaTraderRidableInWater = false;
+ private void llamaTraderSettings() {
+ llamaTraderRidable = getBoolean("mobs.trader_llama.ridable", llamaTraderRidable);
+ llamaTraderRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", llamaTraderRidableInWater);
+ }
+
+ public boolean mooshroomRidable = false;
+ public boolean mooshroomRidableInWater = false;
+ private void mooshroomSettings() {
+ mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
+ mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
+ }
+
+ public boolean muleRidableInWater = false;
+ private void muleSettings() {
+ muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
+ }
+
+ public boolean ocelotRidable = false;
+ public boolean ocelotRidableInWater = false;
+ private void ocelotSettings() {
+ ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
+ ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
+ }
+
+ public boolean pandaRidable = false;
+ public boolean pandaRidableInWater = false;
+ private void pandaSettings() {
+ pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
+ pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
+ }
+
public double phantomAttackedByCrystalRadius = 0.0D;
public float phantomAttackedByCrystalDamage = 1.0F;
public double phantomOrbitCrystalRadius = 0.0D;
@@ -413,6 +444,13 @@ public class PurpurWorldConfig {
@@ -393,8 +463,12 @@ public class PurpurWorldConfig {
phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt);
}
+ public boolean pigRidable = false;
+ public boolean pigRidableInWater = false;
public boolean pigGiveSaddleBack = false;
private void pigSettings() {
+ pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
+ pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack);
}
@@ -413,13 +487,42 @@ public class PurpurWorldConfig {
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
}
+ public boolean sheepRidable = false;
+ public boolean sheepRidableInWater = false;
+ private void sheepSettings() {
+ sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
+ sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
+ }
+
+ public boolean skeletonHorseCanSwim = false;
+ public boolean skeletonHorseRidableInWater = true;
+ private void skeletonHorseSettings() {
@@ -935,10 +1567,55 @@ index 2f5bc77e03..9d6894a24c 100644
+ skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater);
+ }
+
+ public boolean snowGolemRidable = false;
+ public boolean snowGolemRidableInWater = false;
+ public boolean snowGolemLeaveTrailWhenRidden = false;
public boolean snowGolemDropsPumpkin = false;
public boolean snowGolemPutPumpkinBack = false;
private void snowGolemSettings() {
@@ -460,8 +498,12 @@ public class PurpurWorldConfig {
+ snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
+ snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
+ snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden);
snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin);
snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack);
}
+ public boolean striderRidable = false;
+ public boolean striderRidableInWater = false;
+ private void striderSettings() {
+ striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
+ striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
+ }
+
+ public boolean villagerRidable = false;
+ public boolean villagerRidableInWater = false;
public int villagerBrainTicks = 1;
public boolean villagerUseBrainTicksOnlyWhenLagging = true;
public boolean villagerCanBeLeashed = false;
@@ -428,6 +531,8 @@ public class PurpurWorldConfig {
public int villagerSpawnIronGolemRadius = 0;
public int villagerSpawnIronGolemLimit = 0;
private void villagerSettings() {
+ villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
+ villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
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 {
villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);
}
+ public boolean villagerTraderRidable = false;
+ public boolean villagerTraderRidableInWater = false;
public boolean villagerTraderCanBeLeashed = false;
public boolean villagerTraderFollowEmeraldBlock = false;
private void villagerTraderSettings() {
+ villagerTraderRidable = getBoolean("mobs.wandering_trader.ridable", villagerTraderRidable);
+ villagerTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", villagerTraderRidableInWater);
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 {
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
}