mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-06-26 06:14:42 +02:00
Make PassengerUtil non static.
Some more handling of multiple passengers, incomplete.
This commit is contained in:
parent
30c3a40622
commit
5e751e492b
|
@ -53,7 +53,7 @@ import fr.neatmonster.nocheatplus.checks.moving.velocity.SimpleEntry;
|
|||
import fr.neatmonster.nocheatplus.components.entity.IEntityAccessLastPositionAndLook;
|
||||
import fr.neatmonster.nocheatplus.components.location.IGetLocationWithLook;
|
||||
import fr.neatmonster.nocheatplus.components.location.SimplePositionWithLook;
|
||||
import fr.neatmonster.nocheatplus.components.registry.event.IGenericInstanceHandle;
|
||||
import fr.neatmonster.nocheatplus.components.registry.event.IHandle;
|
||||
import fr.neatmonster.nocheatplus.logging.StaticLog;
|
||||
import fr.neatmonster.nocheatplus.logging.Streams;
|
||||
import fr.neatmonster.nocheatplus.utilities.CheckUtils;
|
||||
|
@ -100,10 +100,11 @@ public class VehicleChecks extends CheckListener {
|
|||
|
||||
/** Auxiliary functionality. */
|
||||
private final AuxMoving aux = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstance(AuxMoving.class);
|
||||
private final PassengerUtil passengerUtil = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstance(PassengerUtil.class);
|
||||
|
||||
/** Access last position fields for an entity. Updated on setMCAccess. */
|
||||
// TODO: Useless.
|
||||
private final IGenericInstanceHandle<IEntityAccessLastPositionAndLook> lastPosLook = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstanceHandle(IEntityAccessLastPositionAndLook.class);
|
||||
private final IHandle<IEntityAccessLastPositionAndLook> lastPosLook = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstanceHandle(IEntityAccessLastPositionAndLook.class);
|
||||
|
||||
/** The vehicle more packets check. */
|
||||
private final VehicleMorePackets vehicleMorePackets = addCheck(new VehicleMorePackets());
|
||||
|
@ -134,7 +135,7 @@ public class VehicleChecks extends CheckListener {
|
|||
// Do ignore events for vehicles inside of other vehicles.
|
||||
return;
|
||||
}
|
||||
final Player player = PassengerUtil.getFirstPlayerPassenger(vehicle);
|
||||
final Player player = passengerUtil.getFirstPlayerPassenger(vehicle);
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -203,7 +204,7 @@ public class VehicleChecks extends CheckListener {
|
|||
// Workaround for pigs and other (1.5.x and before)!
|
||||
// Note that with 1.6 not even PlayerMove fires for horses and pigs.
|
||||
// (isInsideVehicle is the faster check without object creation, do re-check though, if it changes to only check for Vehicle instances.)
|
||||
final Entity vehicle = PassengerUtil.getLastNonPlayerVehicle(player);
|
||||
final Entity vehicle = passengerUtil.getLastNonPlayerVehicle(player);
|
||||
if (data.debug) {
|
||||
debug(player, "onPlayerMoveVehicle: vehicle: " + vehicle);
|
||||
}
|
||||
|
@ -271,7 +272,7 @@ public class VehicleChecks extends CheckListener {
|
|||
// Do ignore events for vehicles inside of other vehicles.
|
||||
return;
|
||||
}
|
||||
final Player player = PassengerUtil.getFirstPlayerPassenger(vehicle);
|
||||
final Player player = passengerUtil.getFirstPlayerPassenger(vehicle);
|
||||
if (player == null || player.isDead()) {
|
||||
return;
|
||||
}
|
||||
|
@ -658,7 +659,7 @@ public class VehicleChecks extends CheckListener {
|
|||
debug(player, "Vehicle enter: first vehicle: " + vehicle.getClass().getName());
|
||||
}
|
||||
// Check for nested vehicles.
|
||||
final Entity lastVehicle = PassengerUtil.getLastNonPlayerVehicle(vehicle, true);
|
||||
final Entity lastVehicle = passengerUtil.getLastNonPlayerVehicle(vehicle, true);
|
||||
if (lastVehicle == null) {
|
||||
data.clearVehicleData();
|
||||
if (data.debug) {
|
||||
|
@ -761,7 +762,7 @@ public class VehicleChecks extends CheckListener {
|
|||
public void onVehicleDestroyLowest(final VehicleDestroyEvent event) {
|
||||
// Prevent destroying ones own vehicle.
|
||||
final Entity attacker = event.getAttacker();
|
||||
if (attacker instanceof Player && attacker.equals(event.getVehicle().getPassenger())) {
|
||||
if (attacker instanceof Player && passengerUtil.isPassenger(attacker, event.getVehicle())) {
|
||||
final Player player = (Player) attacker;
|
||||
final MovingData data = MovingData.getData(player);
|
||||
final MovingConfig cc = MovingConfig.getConfig(player);
|
||||
|
@ -778,9 +779,10 @@ public class VehicleChecks extends CheckListener {
|
|||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onVehicleDestroy(final VehicleDestroyEvent event) {
|
||||
final Entity entity = event.getVehicle().getPassenger();
|
||||
if (entity instanceof Player) {
|
||||
onPlayerVehicleLeave((Player) entity, event.getVehicle());
|
||||
for (final Entity entity : passengerUtil.handleVehicle.getHandle().getEntityPassengers(event.getVehicle())) {
|
||||
if (entity instanceof Player) {
|
||||
onPlayerVehicleLeave((Player) entity, event.getVehicle());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,32 +14,55 @@
|
|||
*/
|
||||
package fr.neatmonster.nocheatplus.utilities.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import fr.neatmonster.nocheatplus.NCPAPIProvider;
|
||||
import fr.neatmonster.nocheatplus.components.entity.IEntityAccessVehicle;
|
||||
import fr.neatmonster.nocheatplus.components.registry.event.IHandle;
|
||||
|
||||
/**
|
||||
* Vehicle/passenger related static utility.
|
||||
* Vehicle/passenger related static utility. Registered as generic instance for
|
||||
* now.
|
||||
*
|
||||
* @author asofold
|
||||
*
|
||||
*/
|
||||
public class PassengerUtil {
|
||||
|
||||
public final IHandle<IEntityAccessVehicle> handleVehicle = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstanceHandle(IEntityAccessVehicle.class);
|
||||
|
||||
/**
|
||||
* Test if the given entity is a passenger of the given vehicle.
|
||||
*
|
||||
* @param entity
|
||||
* @param vehicle
|
||||
* @return
|
||||
*/
|
||||
public boolean isPassenger(final Entity entity, final Entity vehicle) {
|
||||
return handleVehicle.getHandle().getEntityPassengers(vehicle).contains(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check getPassenger recursively until a player is found, return that one
|
||||
* or null.
|
||||
* or null. This is intended to be the player in charge of steering the
|
||||
* vehicle.
|
||||
*
|
||||
* @param entity
|
||||
* the entity
|
||||
* @return the first player passenger
|
||||
* The vehicle.
|
||||
* @return The first player found amongst passengers recursively, excludes
|
||||
* the given entity.
|
||||
*/
|
||||
public static Player getFirstPlayerPassenger(final Entity entity) {
|
||||
Entity passenger = entity.getPassenger();
|
||||
while (passenger != null){
|
||||
if (passenger instanceof Player){
|
||||
return (Player) passenger;
|
||||
public Player getFirstPlayerPassenger(Entity entity) {
|
||||
List<Entity> passengers = handleVehicle.getHandle().getEntityPassengers(entity);
|
||||
while (!passengers.isEmpty()){
|
||||
entity = passengers.get(0); // The one in charge.
|
||||
if (entity instanceof Player){
|
||||
return (Player) entity;
|
||||
}
|
||||
passenger = passenger.getPassenger();
|
||||
passengers = handleVehicle.getHandle().getEntityPassengers(entity);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -50,9 +73,9 @@ public class PassengerUtil {
|
|||
*
|
||||
* @param passenger
|
||||
* The passenger of vehicles. Typically the player.
|
||||
* @return the last non player vehicle
|
||||
* @return Supposedly the vehicle that is steered.
|
||||
*/
|
||||
public static Entity getLastNonPlayerVehicle(final Entity passenger) {
|
||||
public Entity getLastNonPlayerVehicle(final Entity passenger) {
|
||||
return getLastNonPlayerVehicle(passenger, false);
|
||||
}
|
||||
|
||||
|
@ -64,11 +87,11 @@ public class PassengerUtil {
|
|||
* The passenger of vehicles. Typically the player.
|
||||
* @param includePassenger
|
||||
* If set to true, the passenger is counted as a vehicle as well
|
||||
* (meaning: vehicle enter, ther player is not in a vehicle, test
|
||||
* (meaning: vehicle enter, the player is not in a vehicle, test
|
||||
* with this set to true and the vehicle returned by the event).
|
||||
* @return the last non player vehicle
|
||||
* @return Supposedly the vehicle that is steered.
|
||||
*/
|
||||
public static Entity getLastNonPlayerVehicle(final Entity passenger, final boolean includePassenger) {
|
||||
public Entity getLastNonPlayerVehicle(final Entity passenger, final boolean includePassenger) {
|
||||
Entity vehicle = includePassenger ? passenger : passenger.getVehicle();
|
||||
while (vehicle != null){
|
||||
if (vehicle instanceof Player){
|
||||
|
@ -92,7 +115,7 @@ public class PassengerUtil {
|
|||
// * the entity
|
||||
// * @return the player passenger recursively
|
||||
// */
|
||||
// public static Player getFirstPlayerIncludingPassengersRecursively(Entity entity) {
|
||||
// public Player getFirstPlayerIncludingPassengersRecursively(Entity entity) {
|
||||
// while (entity != null) {
|
||||
// if (entity instanceof Player) {
|
||||
// // Scrap the case of players riding players for the moment.
|
||||
|
|
Loading…
Reference in New Issue
Block a user