Fix NPE with legacy vehicle API. Use a stored list for null passenger.

This commit is contained in:
asofold 2017-04-03 12:16:54 +02:00
parent 1ac29ee052
commit ba4001a0b5
2 changed files with 16 additions and 2 deletions

View File

@ -1,6 +1,8 @@
package fr.neatmonster.nocheatplus.compat.bukkit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.bukkit.entity.Entity;
@ -15,10 +17,19 @@ import fr.neatmonster.nocheatplus.components.entity.IEntityAccessVehicle;
*/
public class EntityAccessVehicleLegacy implements IEntityAccessVehicle {
private final List<Entity> nullPassenger;
public EntityAccessVehicleLegacy() {
List<Entity> lst = new ArrayList<Entity>(1);
lst.add(null);
nullPassenger = Collections.unmodifiableList(lst);
}
@SuppressWarnings("deprecation")
@Override
public List<Entity> getEntityPassengers(final Entity entity) {
return Arrays.asList(entity.getPassenger());
final Entity passenger = entity.getPassenger();
return passenger == null ? nullPassenger : Arrays.asList(passenger);
}
@SuppressWarnings("deprecation")

View File

@ -75,7 +75,10 @@ public class PassengerUtil {
List<Entity> passengers = handleVehicle.getHandle().getEntityPassengers(entity);
while (!passengers.isEmpty()){
entity = passengers.get(0); // The one in charge.
if (entity instanceof Player){
if (entity == null) {
break;
}
else if (entity instanceof Player){
return (Player) entity;
}
passengers = handleVehicle.getHandle().getEntityPassengers(entity);