diff --git a/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java b/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java index 9d35ad2..22dfbe2 100644 --- a/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java @@ -4,6 +4,7 @@ import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.Stargate; import org.bukkit.block.Block; +import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -27,8 +28,10 @@ public class EntityEventListener implements Listener { return; } - Portal portal = PortalHandler.getByAdjacentEntrance(event.getFrom()); - if (portal != null) { + Entity entity = event.getEntity(); + int entitySize = (int) Math.ceil((float) Math.max(entity.getBoundingBox().getWidthX(), + entity.getBoundingBox().getWidthZ())); + if (PortalHandler.getByAdjacentEntrance(event.getFrom(), entitySize) != null) { event.setCancelled(true); } } diff --git a/src/main/java/net/knarcraft/stargate/listener/PlayerEventsListener.java b/src/main/java/net/knarcraft/stargate/listener/PlayerEventsListener.java index 7b36964..705ef5c 100644 --- a/src/main/java/net/knarcraft/stargate/listener/PlayerEventsListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/PlayerEventsListener.java @@ -11,7 +11,9 @@ import org.bukkit.GameMode; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.data.type.WallSign; +import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; +import org.bukkit.entity.Minecart; import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; import org.bukkit.event.Event; @@ -84,11 +86,13 @@ public class PlayerEventsListener implements Listener { Entity playerVehicle = event.getPlayer().getVehicle(); Portal portal = PortalHandler.getByEntrance(event.getFrom()); - if (playerVehicle != null && PortalHandler.getByEntrance(event.getFrom()) != null) { + if (playerVehicle != null && PortalHandler.getByEntrance(event.getFrom()) != null && + !(playerVehicle instanceof Minecart) && + !(playerVehicle instanceof Boat)) { Portal destinationPortal = portal.getDestination(); if (destinationPortal != null) { VehicleEventListener.teleportVehicleAfterPlayer((Vehicle) playerVehicle, destinationPortal, event.getPlayer()); - Stargate.log.info("Player was driving " + playerVehicle.getName()); + Stargate.debug("playerTeleport", "Player was driving " + playerVehicle.getName()); } } } diff --git a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java index 1888370..0ab7da2 100644 --- a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java @@ -32,14 +32,26 @@ public class VehicleEventListener implements Listener { } /** - * Teleports a vehicle through a stargate + * Check for a vehicle moving through a portal * - * @param passengers
The passengers inside the vehicle
- * @param entrancePortalThe portal the vehicle is entering
- * @param vehicleThe vehicle passing through
+ * @param eventThe triggered move event
*/ - public static void teleportVehicle(ListThe passengers inside the vehicle
* @param entrancePortalThe portal the vehicle is entering
* @param vehicleThe vehicle passing through
- * @param skipOpenCheckSkips the check for whether the portal is open for the player
*/ - public static void teleportVehicle(ListThe vehicle to teleport
* @param passengersAny entities sitting in the minecart
*/ - private static void teleportPlayerAndVehicle(Portal entrancePortal, Vehicle vehicle, ListThe triggered move event
- */ - @EventHandler - public void onVehicleMove(VehicleMoveEvent event) { - if (!Stargate.handleVehicles) { - return; - } - ListA location adjacent to the portal's entrance
+ * @param locationA location adjacent to the portal's entrance
* @returnThe portal adjacent to the given location
*/ - public static Portal getByAdjacentEntrance(Location loc) { - int centerX = loc.getBlockX(); - int centerY = loc.getBlockY(); - int centerZ = loc.getBlockZ(); - World world = loc.getWorld(); - Portal portal = lookupEntrances.get(new BlockLocation(world, centerX, centerY, centerZ)); - if (portal != null) { - return portal; + public static Portal getByAdjacentEntrance(Location location) { + return getByAdjacentEntrance(location, 1); + } + + /** + * Gets a portal given a location adjacent to its entrance + * + * @param locationA location adjacent to the portal's entrance
+ * @param rangeThe range to scan for portals
+ * @returnThe portal adjacent to the given location
+ */ + public static Portal getByAdjacentEntrance(Location location, int range) { + List