From 9dcbb7b4381d459bbe87294b8339eac0d9790d15 Mon Sep 17 00:00:00 2001 From: arboriginal Date: Sun, 24 Feb 2019 01:22:10 +0100 Subject: [PATCH] Fix for Citizen NPC --- .../arboriginal/PlayerRider/PlayerRider.java | 266 +++++++++--------- src/plugin.yml | 2 +- 2 files changed, 136 insertions(+), 132 deletions(-) diff --git a/src/me/arboriginal/PlayerRider/PlayerRider.java b/src/me/arboriginal/PlayerRider/PlayerRider.java index 6e5fd53..14ec9e5 100644 --- a/src/me/arboriginal/PlayerRider/PlayerRider.java +++ b/src/me/arboriginal/PlayerRider/PlayerRider.java @@ -38,6 +38,25 @@ public class PlayerRider extends JavaPlugin implements Listener { // JavaPlugin methods // ----------------------------------------------------------------------------------------------- + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("prider-reload")) { + reloadConfig(); + userMessage(sender, "reload"); + + return true; + } + + return super.onCommand(sender, command, label, args); + } + + @Override + public void onDisable() { + super.onDisable(); + + HandlerList.unregisterAll((JavaPlugin) this); + } + @Override public void onEnable() { cooldown = new PRcooldown(); @@ -68,96 +87,62 @@ public void reloadConfig() { } } - @Override - public void onDisable() { - super.onDisable(); - - HandlerList.unregisterAll((JavaPlugin) this); - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (command.getName().equalsIgnoreCase("prider-reload")) { - reloadConfig(); - userMessage(sender, "reload"); - - return true; - } - - return super.onCommand(sender, command, label, args); - } - // ----------------------------------------------------------------------------------------------- // Listener methods // ----------------------------------------------------------------------------------------------- - @EventHandler - public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { - // https://www.spigotmc.org/threads/how-would-i-stop-an-event-from-being-called-twice.135234/#post-1434104 - if (event.getHand() == EquipmentSlot.OFF_HAND || !(event.getRightClicked() instanceof Player)) return; - - Player player = event.getPlayer(), duck = (Player) event.getRightClicked(); - - if (player.getPassengers().contains(duck)) { - if (player.getLocation().getPitch() < config.getDouble("eject_maxPitch") - && player.hasPermission("playerrider.eject") - && !cooldown.isActive("eject.perform", player, true)) { - player.eject(); - alert("eject", duck, player); - cooldown.clear("eject.perform", player); - } + private boolean duckAllowed(Player duck, int passengersCount) { + ConfigurationSection section = config.getConfigurationSection("max_riders"); - return; + for (String group : section.getKeys(false)) { + if ((group.equals("default") || duck.hasPermission("playerrider.duck." + group)) + && config.getInt("max_riders." + group) >= passengersCount) + return true; } - if (!playerAllowed(player, "ride") || !duck.hasPermission("playerrider.duck") || player.isInsideVehicle()) return; - - ItemStack item = player.getInventory().getItemInMainHand(); - - if (!config.getStringList("allowed_items.ride").contains(item.getType().toString())) return; + return false; + } - List riders = duck.getPassengers(); - int count = 0; + @EventHandler + public void onEntityDamage(EntityDamageEvent event) { + if (event.isCancelled()) return; - while (riders.size() == 1 && riders.get(0) instanceof Player) { - duck = (Player) riders.get(0); - count++; + Entity injured = event.getEntity(); - if (duck.equals(player)) { - return; - } + if (!isPlayer(injured)) return; - riders = duck.getPassengers(); + if (config.getBoolean("prevent_suffocation") + && event.getCause() == DamageCause.SUFFOCATION + && isPlayer(injured.getVehicle())) { + event.setCancelled(true); + return; } - if (riders.size() > 0) return; - - if (!duckAllowed(duck, count + 1)) { - userMessage(player, "tooMany", player, duck); + if (config.getBoolean("getoff_when_hurt") && isPlayer(injured.getVehicle())) { + injured.leaveVehicle(); return; } - if (duck.addPassenger(player)) { - consume(player, item, "ride"); - alert("ride", player, duck); - cooldown.set("ride.perform", player, duck); - cooldown.set("eject.perform", duck); - } - else { - userMessage(player, "failed", player, duck); + if (config.getBoolean("eject_when_hurt") && injured.getPassengers().size() > 0) { + injured.eject(); + return; } } - private boolean duckAllowed(Player duck, int passengersCount) { - ConfigurationSection section = config.getConfigurationSection("max_riders"); + @EventHandler + public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + Entity injured = event.getEntity(); - for (String group : section.getKeys(false)) { - if ((group.equals("default") || duck.hasPermission("playerrider.duck." + group)) - && config.getInt("max_riders." + group) >= passengersCount) - return true; - } + if (!isPlayer(injured)) return; - return false; + if (config.getBoolean("prevent_hit_rider") && isPlayer(event.getDamager())) { + Entity vehicle = injured.getVehicle(); + + if (vehicle != null && event.getDamager().equals(vehicle)) { + event.setCancelled(true); + return; + } + } } @EventHandler @@ -171,7 +156,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (!playerAllowed(player, "whip") || player.getLocation().getPitch() < config.getDouble("boost_maxPitch") - || !(player.getVehicle() instanceof Player)) + || !isPlayer(player.getVehicle())) return; ItemStack item = player.getInventory().getItemInMainHand(); @@ -199,74 +184,65 @@ public void onPlayerInteract(PlayerInteractEvent event) { } @EventHandler - public void onEntityDamage(EntityDamageEvent event) { - if (event.isCancelled()) return; + public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { + // https://www.spigotmc.org/threads/how-would-i-stop-an-event-from-being-called-twice.135234/#post-1434104 + if (event.getHand() == EquipmentSlot.OFF_HAND || !isPlayer(event.getRightClicked())) return; - Entity injured = event.getEntity(); + Player player = event.getPlayer(), duck = (Player) event.getRightClicked(); - if (!(injured instanceof Player)) return; + if (player.getPassengers().contains(duck)) { + if (player.getLocation().getPitch() < config.getDouble("eject_maxPitch") + && player.hasPermission("playerrider.eject") + && !cooldown.isActive("eject.perform", player, true)) { + player.eject(); + alert("eject", duck, player); + cooldown.clear("eject.perform", player); + } - if (config.getBoolean("prevent_suffocation") - && event.getCause() == DamageCause.SUFFOCATION - && injured.getVehicle() instanceof Player) { - event.setCancelled(true); return; } - if (config.getBoolean("getoff_when_hurt") && injured.getVehicle() instanceof Player) { - injured.leaveVehicle(); - return; - } + if (!playerAllowed(player, "ride") || !duck.hasPermission("playerrider.duck") || player.isInsideVehicle()) return; - if (config.getBoolean("eject_when_hurt") && injured.getPassengers().size() > 0) { - injured.eject(); - return; - } - } + ItemStack item = player.getInventory().getItemInMainHand(); - @EventHandler - public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - Entity injured = event.getEntity(); + if (!config.getStringList("allowed_items.ride").contains(item.getType().toString())) return; - if (!(injured instanceof Player)) return; + List riders = duck.getPassengers(); + int count = 0; - if (config.getBoolean("prevent_hit_rider") && event.getDamager() instanceof Player) { - Entity vehicle = injured.getVehicle(); + while (riders.size() == 1 && isPlayer(riders.get(0))) { + duck = (Player) riders.get(0); + count++; - if (vehicle != null && event.getDamager().equals(vehicle)) { - event.setCancelled(true); + if (duck.equals(player)) { return; } + + riders = duck.getPassengers(); } - } - // ----------------------------------------------------------------------------------------------- - // Custom methods - // ----------------------------------------------------------------------------------------------- + if (riders.size() > 0) return; - private boolean playerAllowed(Player player, String key) { - return player.hasPermission("playerrider." + key) || player.hasPermission("playerrider." + key + ".keepitem"); - } + if (!duckAllowed(duck, count + 1)) { + userMessage(player, "tooMany", player, duck); + return; + } - private void consume(Player player, ItemStack item, String key) { - if (config.getBoolean("consume_items." + key) - && !player.hasPermission("playerrider." + key + ".keepitem") - && item.getType() != Material.AIR) - item.setAmount(item.getAmount() - 1); + if (duck.addPassenger(player)) { + consume(player, item, "ride"); + alert("ride", player, duck); + cooldown.set("ride.perform", player, duck); + cooldown.set("eject.perform", duck); + } + else { + userMessage(player, "failed", player, duck); + } } - protected static void warn(String key, Player player, Player duck, int delay) { - String[] parts = key.split("\\."); - - if (parts.length != 2 || !parts[1].equals("perform")) return; - - String message = PlayerRider.config.getString("warn_player_when_cooldown." + parts[0]); - - if (message.isEmpty()) return; - - ((Player) player).spigot().sendMessage(ChatMessageType.ACTION_BAR, - new TextComponent(prepareMessage(message.replace("{delay}", "" + delay), player, duck))); - } + // ----------------------------------------------------------------------------------------------- + // Custom methods + // ----------------------------------------------------------------------------------------------- private void alert(String key, Player player, Player duck) { if (!cooldown.isActive(key + ".alertPlayer", player, duck)) { @@ -285,18 +261,6 @@ private void alert(String key, Player player, Player duck) { } } - private void userMessage(CommandSender sender, String key) { - userMessage(sender, key, null, null); - } - - private void userMessage(CommandSender sender, String key, CommandSender player, CommandSender duck) { - String message = config.getString(key); - - if (!message.isEmpty()) { - sender.sendMessage(prepareMessage(message, player, duck)); - } - } - private void broadcast(String key, CommandSender player, CommandSender duck) { String message = config.getString("broadcast." + key); @@ -305,6 +269,21 @@ private void broadcast(String key, CommandSender player, CommandSender duck) { } } + private void consume(Player player, ItemStack item, String key) { + if (config.getBoolean("consume_items." + key) + && !player.hasPermission("playerrider." + key + ".keepitem") + && item.getType() != Material.AIR) + item.setAmount(item.getAmount() - 1); + } + + private boolean isPlayer(Entity entity) { + return (entity instanceof Player) && !entity.hasMetadata("NPC"); + } + + private boolean playerAllowed(Player player, String key) { + return player.hasPermission("playerrider." + key) || player.hasPermission("playerrider." + key + ".keepitem"); + } + private static String prepareMessage(String message) { return prepareMessage(message, null, null); } @@ -317,4 +296,29 @@ private static String prepareMessage(String message, CommandSender player, Comma return ChatColor.translateAlternateColorCodes('&', message); } + + private void userMessage(CommandSender sender, String key) { + userMessage(sender, key, null, null); + } + + private void userMessage(CommandSender sender, String key, CommandSender player, CommandSender duck) { + String message = config.getString(key); + + if (!message.isEmpty()) { + sender.sendMessage(prepareMessage(message, player, duck)); + } + } + + protected static void warn(String key, Player player, Player duck, int delay) { + String[] parts = key.split("\\."); + + if (parts.length != 2 || !parts[1].equals("perform")) return; + + String message = PlayerRider.config.getString("warn_player_when_cooldown." + parts[0]); + + if (message.isEmpty()) return; + + ((Player) player).spigot().sendMessage(ChatMessageType.ACTION_BAR, + new TextComponent(prepareMessage(message.replace("{delay}", "" + delay), player, duck))); + } } diff --git a/src/plugin.yml b/src/plugin.yml index 1e2d649..dc59b33 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: PlayerRider description: Allow you to ride players. -version: 1.13.1 +version: 1.13.2 author: arboriginal website: https://www.spigotmc.org/resources/playerrider.62799/