Can't properly cancel entity movement with passengers or for vehicles
Expected behavior
Entity move event should be called even with passengers
Observed/Actual behavior
Vehicles can't enter unless steered into the region
Player movement is cancelled, but the mount can freely move
Mobs without passengers can't enter (intended)
Steps/models to reproduce
- Cancel player, vehicle and entity movement into a certain region
- Try to walk into the region (should and does not work)
- Try to push a mob or vehicle into the region (should and does not work)
- Steer a vehicle (horse, boat, pig, strider) into the region (glitches out like crazy because player movement is still called for some reason, but the player stays mounted, and the vehicle keeps moving)
- Steer a minecart into the region (should not, but does work. When dismounting, the player is teleported back to their supposed position)
Plugin and Datapack List
pl [18:16:53 INFO]: Server Plugins (7): [18:16:53 INFO]: Paper Plugins: [18:16:53 INFO]: - Protect, ServiceIO, Tweaks, Worlds [18:16:53 INFO]: Bukkit Plugins: [18:16:53 INFO]: - FastAsyncWorldEdit, LuckPerms, WorldEditSUI
datapack list [18:17:05 INFO]: There are 3 data pack(s) enabled: [vanilla (built-in)], [file/bukkit (world)], [paper (built-in)] [18:17:05 INFO]: There are no more data packs available
Paper version
ver [18:17:16 INFO]: Checking version, please wait... [18:17:16 INFO]: This server is running Paper version 1.21.3-35-master@4e01ede (2024-11-18T12:51:42Z) (Implementing API version 1.21.3-R0.1-SNAPSHOT) You are 1 version(s) behind Download the new version at: https://papermc.io/downloads/paper Previous version: 1.21.3-29-be886cf (MC: 1.21.3)
Other
My code for cancelling the movements
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerMove(PlayerMoveEvent event) {
if (!event.hasChangedBlock()) return;
if (canMove(event.getPlayer(), event.getFrom(), event.getTo())) return;
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityMove(EntityMoveEvent event) {
if (!event.hasChangedBlock()) return;
if (canMove(event.getEntity(), event.getFrom(), event.getTo())) return;
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onVehicleMove(VehicleMoveEvent event) {
if (canMove(event.getVehicle(), event.getFrom(), event.getTo())) return;
// event.getVehicle().setVelocity(new Vector());
event.getVehicle().teleport(event.getFrom());
}
tested on 1.21.4 issue still persists but the player doesnt visually glitch around anymore