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).