Paper/Spigot-Server-Patches/0137-Vehicle-Event-Cancellation-Changes.patch
Aikar 3faaaab75d Optimize isInvalidYLocation, getType and getBlockData
Some pretty micro optimizations, but this is the hottest method in the server....

This will drastically reduce number of operations to perform getType

the 2 previous patches was squashed into 1
2016-06-22 22:43:02 -04:00

95 lines
4.0 KiB
Diff

From d3f148dd37236f33449d8ec4dbb8237b4eb2dc19 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Fri, 22 Apr 2016 18:20:05 -0500
Subject: [PATCH] Vehicle Event Cancellation Changes
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index eff088d..c3efc7f 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1699,6 +1699,10 @@ public abstract class Entity implements ICommandListener {
}
public boolean a(Entity entity, boolean flag) {
+ return this.mountEntity(entity, flag, false); // Paper - OBFHELPER
+ }
+
+ public boolean mountEntity(Entity entity, boolean flag, boolean suppressEvents) { // Paper
if (!flag && (!this.n(entity) || !entity.q(this))) {
return false;
} else {
@@ -1707,7 +1711,7 @@ public abstract class Entity implements ICommandListener {
}
this.au = entity;
- this.au.o(this);
+ this.au.addRider(this, suppressEvents); // Paper
return true;
}
}
@@ -1734,12 +1738,20 @@ public abstract class Entity implements ICommandListener {
}
protected void o(Entity entity) {
+ // Paper start - OBFHELPER
+ this.addRider(entity, false);
+ }
+
+ private void addRider(Entity entity, boolean suppressEvents) {
+ // Paper end
if (entity.bB() != this) {
throw new IllegalStateException("Use x.startRiding(y), not y.addPassenger(x)");
} else {
// CraftBukkit start
com.google.common.base.Preconditions.checkState(!entity.passengers.contains(this), "Circular entity riding! %s %s", this, entity);
+ if (!suppressEvents) { // Paper - Make event calls suppressible
+ // =============================================================
CraftEntity craft = (CraftEntity) entity.getBukkitEntity().getVehicle();
Entity orig = craft == null ? null : craft.getHandle();
if (getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity && entity.world.isChunkLoaded((int) entity.locX >> 4, (int) entity.locZ >> 4, false)) { // Boolean not used
@@ -1762,6 +1774,8 @@ public abstract class Entity implements ICommandListener {
return;
}
// Spigot end
+ // =============================================================
+ } // Paper - end suppressible block
if (!this.world.isClientSide && entity instanceof EntityHuman && !(this.bw() instanceof EntityHuman)) {
this.passengers.add(0, entity);
} else {
@@ -1787,16 +1801,29 @@ public abstract class Entity implements ICommandListener {
CraftEntity craftn = (CraftEntity) entity.getBukkitEntity().getVehicle();
Entity n = craftn == null ? null : craftn.getHandle();
if (event.isCancelled() || n != orig) {
+ this.cancelDismount(entity); // Paper
return;
}
}
// CraftBukkit end
- Bukkit.getPluginManager().callEvent( new org.spigotmc.event.entity.EntityDismountEvent(entity.getBukkitEntity(), this.getBukkitEntity())); // Spigot
+ // Paper start - make EntityDismountEvent cancellable
+ if (!new org.spigotmc.event.entity.EntityDismountEvent(entity.getBukkitEntity(), this.getBukkitEntity()).callEvent()) {
+ this.cancelDismount(entity);
+ return;
+ }
+ // Paper end
this.passengers.remove(entity);
entity.j = 60;
}
}
+ // Paper start
+ private void cancelDismount(Entity dismounter) {
+ this.passengers.remove(dismounter);
+ dismounter.mountEntity(this, false, true);
+ }
+ // Paper end
+
protected boolean q(Entity entity) {
return this.bx().size() < 1;
}
--
2.9.0