Fix riding bats

This commit is contained in:
William Blake Galbreath
2019-06-14 20:32:48 -05:00
parent d6d8643485
commit 86bffcf604

View File

@@ -1,4 +1,4 @@
From f92fc627696ee6a3d0ab4776af2f286fc9ea3708 Mon Sep 17 00:00:00 2001
From 02c37cb0f3e33c7235007d6d06b84eb08a51d758 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Tue, 30 Apr 2019 19:17:21 -0500
Subject: [PATCH] Integrate ridables
@@ -7,7 +7,7 @@ Subject: [PATCH] Integrate ridables
.../server/ControllerLookDolphin.java | 4 +-
.../java/net/minecraft/server/Entity.java | 25 +++-
.../net/minecraft/server/EntityAgeable.java | 2 +-
.../java/net/minecraft/server/EntityBat.java | 2 +
.../java/net/minecraft/server/EntityBat.java | 25 ++++
.../net/minecraft/server/EntityBlaze.java | 3 +-
.../java/net/minecraft/server/EntityCat.java | 3 +-
.../minecraft/server/EntityCaveSpider.java | 1 +
@@ -82,14 +82,16 @@ Subject: [PATCH] Integrate ridables
.../java/net/pl3x/purpur/PurpurConfig.java | 136 ++++++++++++++++++
.../purpur/controller/ControllerLookWASD.java | 74 ++++++++++
.../purpur/controller/ControllerMoveWASD.java | 77 ++++++++++
.../controller/ControllerMoveWASDFlying.java | 58 ++++++++
.../controller/ControllerMoveWASDFlying.java | 62 ++++++++
.../ControllerMoveWASDFlyingWithSpacebar.java | 65 +++++++++
.../controller/ControllerMoveWASDWater.java | 42 ++++++
.../craftbukkit/entity/CraftLivingEntity.java | 10 ++
.../bukkit/craftbukkit/entity/CraftMob.java | 12 ++
82 files changed, 866 insertions(+), 92 deletions(-)
83 files changed, 958 insertions(+), 92 deletions(-)
create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java
create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java
create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java
create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java
create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java
diff --git a/src/main/java/net/minecraft/server/ControllerLookDolphin.java b/src/main/java/net/minecraft/server/ControllerLookDolphin.java
@@ -196,7 +198,7 @@ index e87754ef3..553245ebe 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java
index 4c283c33b..6a666ae05 100644
index 4c283c33b..5344a6cf2 100644
--- a/src/main/java/net/minecraft/server/EntityBat.java
+++ b/src/main/java/net/minecraft/server/EntityBat.java
@@ -3,6 +3,7 @@ package net.minecraft.server;
@@ -207,14 +209,49 @@ index 4c283c33b..6a666ae05 100644
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
public class EntityBat extends EntityAmbient {
@@ -13,6 +14,7 @@ public class EntityBat extends EntityAmbient {
@@ -13,6 +14,10 @@ public class EntityBat extends EntityAmbient {
public EntityBat(EntityTypes<? extends EntityBat> entitytypes, World world) {
super(entitytypes, world);
+ this.isRidable = net.pl3x.purpur.PurpurConfig.ridableBat; // Purpur
+ // Purpur start
+ this.moveController = new net.pl3x.purpur.controller.ControllerMoveWASDFlyingWithSpacebar(this, 0.075F);
+ this.isRidable = net.pl3x.purpur.PurpurConfig.ridableBat;
+ // Purpur end
this.setAsleep(true);
}
@@ -94,6 +99,13 @@ public class EntityBat extends EntityAmbient {
@Override
protected void mobTick() {
+ // Purpur start
+ if (getRider() != null) {
+ Vec3D mot = getMot();
+ setMot(mot.x, mot.y + (getVertical() > 0 ? 0.07D : 0.0D), mot.z);
+ return;
+ }
+ // Purpur end
super.mobTick();
BlockPosition blockposition = new BlockPosition(this);
BlockPosition blockposition1 = blockposition.up();
@@ -229,4 +241,17 @@ public class EntityBat extends EntityAmbient {
protected float b(EntityPose entitypose, EntitySize entitysize) {
return entitysize.height / 2.0F;
}
+
+ // Purpur start
+ @Override
+ protected boolean a(EntityHuman entityhuman, EnumHand enumhand) {
+ if (isAsleep()) {
+ if (CraftEventFactory.handleBatToggleSleepEvent(this, true)) {
+ setAsleep(false);
+ world.a(null, 1025, new BlockPosition(this).up(), 0);
+ }
+ }
+ return !isAsleep() && super.a(entityhuman, enumhand);
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java
index 15db67de0..2e418ee14 100644
--- a/src/main/java/net/minecraft/server/EntityBlaze.java
@@ -2351,10 +2388,10 @@ index 000000000..d64a66274
+}
diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java
new file mode 100644
index 000000000..1a5a0c04c
index 000000000..b0b504c7d
--- /dev/null
+++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java
@@ -0,0 +1,58 @@
@@ -0,0 +1,62 @@
+package net.pl3x.purpur.controller;
+
+import net.minecraft.server.EntityHuman;
@@ -2363,13 +2400,17 @@ index 000000000..1a5a0c04c
+
+public class ControllerMoveWASDFlying extends ControllerMoveWASD {
+ protected final float groundSpeedModifier;
+ private final double maxY;
+ private int tooHighCooldown = 0;
+ protected final double maxY;
+ protected int tooHighCooldown = 0;
+
+ public ControllerMoveWASDFlying(EntityInsentient entity) {
+ this(entity, 1.0F, 256D);
+ }
+
+ public ControllerMoveWASDFlying(EntityInsentient entity, float groundSpeedModifier) {
+ this(entity, groundSpeedModifier, 256D);
+ }
+
+ public ControllerMoveWASDFlying(EntityInsentient entity, float groundSpeedModifier, double maxY) {
+ super(entity);
+ this.groundSpeedModifier = groundSpeedModifier;
@@ -2413,6 +2454,77 @@ index 000000000..1a5a0c04c
+ g = entity.getStrafe();
+ }
+}
diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java
new file mode 100644
index 000000000..a353069b7
--- /dev/null
+++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java
@@ -0,0 +1,65 @@
+package net.pl3x.purpur.controller;
+
+import net.minecraft.server.EntityHuman;
+import net.minecraft.server.EntityInsentient;
+import net.minecraft.server.GenericAttributes;
+import net.minecraft.server.Vec3D;
+
+public class ControllerMoveWASDFlyingWithSpacebar extends ControllerMoveWASDFlying {
+ public ControllerMoveWASDFlyingWithSpacebar(EntityInsentient entity) {
+ super(entity);
+ }
+
+ public ControllerMoveWASDFlyingWithSpacebar(EntityInsentient entity, float groundSpeedModifier) {
+ super(entity, groundSpeedModifier);
+ }
+
+ public ControllerMoveWASDFlyingWithSpacebar(EntityInsentient entity, float groundSpeedModifier, double maxY) {
+ super(entity, groundSpeedModifier, maxY);
+ }
+
+ @Override
+ public void tick(EntityHuman rider) {
+ float forward = rider.getForward();
+ float strafe = rider.getStrafe() * 0.5F;
+ float vertical = 0;
+
+ if (forward < 0.0F) {
+ forward *= 0.5F;
+ strafe *= 0.5F;
+ }
+
+ float speed = (float) entity.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getValue();
+
+ if (entity.onGround) {
+ speed *= groundSpeedModifier;
+ }
+
+ //RidableSpacebarEvent event = new RidableSpacebarEvent(ridable);
+ if (rider.isJumping() /*&& event.callEvent() && !event.isHandled()*/ && !entity.onSpacebar()) {
+ entity.setNoGravity(true);
+ vertical = 1.0F;
+ } else {
+ entity.setNoGravity(false);
+ }
+
+ if (entity.locY >= maxY || --tooHighCooldown > 0) {
+ tooHighCooldown = 60;
+ entity.setMot(entity.getMot().add(0.0D, -0.2D, 0.0D));
+ vertical = 0.0F;
+ }
+
+ entity.setSpeed((float) (e = speed));
+ entity.setVertical(vertical);
+ entity.setStrafe(strafe);
+ entity.setForward(forward);
+
+ f = entity.getForward();
+ g = entity.getStrafe();
+
+ Vec3D mot = entity.getMot();
+ if (mot.y > 0.2D) {
+ entity.setMot(mot.x, 0.2D, mot.z);
+ }
+ }
+}
diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java
new file mode 100644
index 000000000..74ff48259