SPIGOT-2640: API for multiple passengers per entity

This commit is contained in:
md_5 2017-01-04 10:53:07 +11:00
parent ce89845fda
commit 7e19325845

View File

@ -1,6 +1,8 @@
package org.bukkit.craftbukkit.entity; package org.bukkit.craftbukkit.entity;
import com.google.common.base.Function;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -331,13 +333,37 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
Preconditions.checkArgument(!this.equals(passenger), "Entity cannot ride itself."); Preconditions.checkArgument(!this.equals(passenger), "Entity cannot ride itself.");
if (passenger instanceof CraftEntity) { if (passenger instanceof CraftEntity) {
eject(); eject();
((CraftEntity) passenger).getHandle().startRiding(getHandle()); return ((CraftEntity) passenger).getHandle().startRiding(getHandle());
return true;
} else { } else {
return false; return false;
} }
} }
@Override
public List<org.bukkit.entity.Entity> getPassengers() {
return Lists.newArrayList(Lists.transform(getHandle().passengers, new Function<Entity, org.bukkit.entity.Entity>() {
@Override
public org.bukkit.entity.Entity apply(Entity input) {
return input.getBukkitEntity();
}
}));
}
@Override
public boolean addPassenger(org.bukkit.entity.Entity passenger) {
Preconditions.checkArgument(passenger != null, "passenger == null");
return ((CraftEntity) passenger).getHandle().a(getHandle(), true);
}
@Override
public boolean removePassenger(org.bukkit.entity.Entity passenger) {
Preconditions.checkArgument(passenger != null, "passenger == null");
((CraftEntity) passenger).getHandle().stopRiding();
return true;
}
public boolean isEmpty() { public boolean isEmpty() {
return !getHandle().isVehicle(); return !getHandle().isVehicle();
} }
@ -347,7 +373,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return false; return false;
} }
getPassenger().leaveVehicle(); getHandle().az(); // PAIL: rename
return true; return true;
} }