diff --git a/pom.xml b/pom.xml index 9836a61..e9dc9bd 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ com.github.arboriginal PlayerRider - 1.14.3-beta + 1.14.3-beta2 diff --git a/src/main/java/com/github/arboriginal/PlayerRider/PRListener.java b/src/main/java/com/github/arboriginal/PlayerRider/PRListener.java index 032cf47..77a441e 100644 --- a/src/main/java/com/github/arboriginal/PlayerRider/PRListener.java +++ b/src/main/java/com/github/arboriginal/PlayerRider/PRListener.java @@ -158,7 +158,8 @@ private void onPlayerInteractEntity(PlayerInteractEntityEvent event) { return; } - if (!PRUtils.playerAllowed(player, "ride") || !PRUtils.rideIsActivated(duck) || player.isInsideVehicle()) + if (player.isInsideVehicle() || !PRUtils.playerAllowed(player, "ride") + || !PRUtils.isRidable(duck) || !PRUtils.rideIsActivated(duck)) return; ItemStack item = player.getInventory().getItemInMainHand(); diff --git a/src/main/java/com/github/arboriginal/PlayerRider/PROptions.java b/src/main/java/com/github/arboriginal/PlayerRider/PROptions.java index 2802f3b..06427c0 100644 --- a/src/main/java/com/github/arboriginal/PlayerRider/PROptions.java +++ b/src/main/java/com/github/arboriginal/PlayerRider/PROptions.java @@ -17,7 +17,7 @@ class PROptions { eject_when_hurt, getoff_when_hurt, prevent_hit_rider, prevent_suffocation; double boost_maxPitch, bossbar_pct, eject_maxPitch, hide_rider_maxPitch; float boost_whip_pitch, boost_whip_volume; - int boost_amplifier, boost_duration; + int boost_amplifier, boost_duration, min_above_blocks; Sound boost_whip_sound; String bossbar_title, file_not_writable_err, potion_effect_err; @@ -55,8 +55,9 @@ class PROptions { boost_whip_pitch = (float) PR.config.getDouble("boost_whip_pitch"); boost_whip_volume = (float) PR.config.getDouble("boost_whip_volume"); // Integer values - boost_amplifier = PR.config.getInt("boost_amplifier"); - boost_duration = PR.config.getInt("boost_duration"); + boost_amplifier = PR.config.getInt("boost_amplifier"); + boost_duration = PR.config.getInt("boost_duration"); + min_above_blocks = PR.config.getInt("min_above_blocks") + 2; // Sound values boost_whip_sound = (boost_whip_volume > 0) ? (Sound) getEnumValue(Sound.class, "boost_whip_sound") : null; // String values diff --git a/src/main/java/com/github/arboriginal/PlayerRider/PRUtils.java b/src/main/java/com/github/arboriginal/PlayerRider/PRUtils.java index 1e430bb..1e22ef5 100644 --- a/src/main/java/com/github/arboriginal/PlayerRider/PRUtils.java +++ b/src/main/java/com/github/arboriginal/PlayerRider/PRUtils.java @@ -5,8 +5,11 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -98,6 +101,18 @@ static boolean isPlayer(Entity entity) { return (entity instanceof Player) && !entity.hasMetadata("NPC"); } + static boolean isRidable(Player player) { + if (player.isGliding() || player.isSleeping() || player.isSwimming() + || (player.isInsideVehicle() && player.getVehicle().getType() != EntityType.PLAYER)) + return false; + + Block b = player.getLocation().getBlock(); + for (int i = 1; i < PR.options.min_above_blocks; i++) + if (!b.getRelative(BlockFace.UP, i).isPassable()) return false; + + return true; + } + static boolean playerAllowed(Player player, String key) { return player.hasPermission("playerrider." + key) || player.hasPermission("playerrider." + key + ".keepitem"); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 145bbbd..c7114ef 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -235,3 +235,7 @@ affect_whipped_player: inc: 1 max: 1 duration: 60 + +##### New in version 1.14.3 ##### +min_above_blocks: 1 # (integer) Number of minimum "passable" blocks above a player to let other ride him +# (passable blocks are blocks the player can pass through, like AIR or grass for example).