summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nms-patches/Entity.patch26
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java6
3 files changed, 36 insertions, 6 deletions
diff --git a/nms-patches/Entity.patch b/nms-patches/Entity.patch
index b7bc2f61..567ef8b0 100644
--- a/nms-patches/Entity.patch
+++ b/nms-patches/Entity.patch
@@ -497,7 +497,21 @@
this.passengers.remove(entity);
entity.k = 60;
}
-@@ -1859,14 +2178,49 @@
+@@ -1799,6 +2118,13 @@
+ }
+
+ public void g(boolean flag) {
++ // CraftBukkit start
++ if (this.bb() != flag && this instanceof EntityLiving) {
++ if (CraftEventFactory.callToggleSwimEvent((EntityLiving) this, flag).isCancelled()) {
++ return;
++ }
++ }
++ // CraftBukkit end
+ this.setFlag(4, flag);
+ }
+
+@@ -1859,14 +2185,49 @@
}
public void setAirTicks(int i) {
@@ -550,7 +564,7 @@
}
}
-@@ -2035,19 +2389,76 @@
+@@ -2035,19 +2396,76 @@
if (!this.world.isClientSide && !this.dead) {
this.world.methodProfiler.a("changeDimension");
MinecraftServer minecraftserver = this.bK();
@@ -630,7 +644,7 @@
BlockPosition blockposition;
if (i == 1) {
-@@ -2076,12 +2487,18 @@
+@@ -2076,12 +2494,18 @@
blockposition = new BlockPosition(this);
}
@@ -650,7 +664,7 @@
if (j == 1 && i == 1) {
BlockPosition blockposition1 = worldserver1.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING_NO_LEAVES, worldserver1.getSpawn());
-@@ -2089,6 +2506,7 @@
+@@ -2089,6 +2513,7 @@
} else {
entity.setPositionRotation(blockposition, entity.yaw, entity.pitch);
}
@@ -658,7 +672,7 @@
boolean flag = entity.attachedToPlayer;
-@@ -2096,13 +2514,21 @@
+@@ -2096,13 +2521,21 @@
worldserver1.addEntity(entity);
entity.attachedToPlayer = flag;
worldserver1.entityJoinedWorld(entity, false);
@@ -681,7 +695,7 @@
return entity;
} else {
return null;
-@@ -2242,7 +2668,26 @@
+@@ -2242,7 +2675,26 @@
}
public void a(AxisAlignedBB axisalignedbb) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 0b12ed81..382b8028 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -470,6 +470,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
@Override
+ public boolean isSwimming() {
+ return getHandle().bb();
+ }
+
+ @Override
+ public void setSwimming(boolean swimming) {
+ getHandle().g(swimming);
+ }
+
+ @Override
public AttributeInstance getAttribute(Attribute attribute) {
return getHandle().craftAttributes.getAttribute(attribute);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 527af08c..951a0683 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1015,6 +1015,12 @@ public class CraftEventFactory {
return event;
}
+ public static EntityToggleSwimEvent callToggleSwimEvent(EntityLiving entity, boolean swimming) {
+ EntityToggleSwimEvent event = new EntityToggleSwimEvent((LivingEntity) entity.getBukkitEntity(), swimming);
+ entity.world.getServer().getPluginManager().callEvent(event);
+ return event;
+ }
+
public static AreaEffectCloudApplyEvent callAreaEffectCloudApplyEvent(EntityAreaEffectCloud cloud, List<LivingEntity> entities) {
AreaEffectCloudApplyEvent event = new AreaEffectCloudApplyEvent((AreaEffectCloud) cloud.getBukkitEntity(), entities);
cloud.world.getServer().getPluginManager().callEvent(event);