Skip to content

Commit

Permalink
Add flags to disable riding & leashing (#36)
Browse files Browse the repository at this point in the history
* update maven group for Vault

* add disableLeash & disableRiding flags
  • Loading branch information
phemmer authored Jul 5, 2020
1 parent 1e5d90c commit fc795c2
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 12 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.milkbowl.vault</groupId>
<groupId>com.github.MilkBowl</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.7</version>
<scope>provided</scope>
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/hm/petmaster/PetMaster.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.logging.Level;

import com.hm.petmaster.listener.PlayerAttackListener;
import com.hm.petmaster.listener.PlayerLeashListener;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
Expand Down Expand Up @@ -53,6 +54,7 @@ public class PetMaster extends JavaPlugin {

// Plugin listeners.
private PlayerInteractListener playerInteractListener;
private PlayerLeashListener playerLeashListener;
private PlayerQuitListener playerQuitListener;
private PlayerAttackListener playerAttackListener;

Expand All @@ -78,11 +80,13 @@ public void onEnable() {
getLogger().info("Registering listeners...");

playerInteractListener = new PlayerInteractListener(this);
playerLeashListener = new PlayerLeashListener(this);
playerQuitListener = new PlayerQuitListener(this);

PluginManager pm = getServer().getPluginManager();
// Register listeners.
pm.registerEvents(playerInteractListener, this);
pm.registerEvents(playerLeashListener, this);
pm.registerEvents(playerQuitListener, this);

extractParametersFromConfig(true);
Expand Down Expand Up @@ -123,6 +127,7 @@ public void extractParametersFromConfig(boolean attemptUpdate) {
}

playerInteractListener.extractParameters();
playerLeashListener.extractParameters();

if (config.getBoolean("checkForUpdate", true)) {
if (updateChecker == null) {
Expand Down
22 changes: 11 additions & 11 deletions src/main/java/com/hm/petmaster/listener/PlayerInteractListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,7 @@
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Cat;
import org.bukkit.entity.Llama;
import org.bukkit.entity.Ocelot;
import org.bukkit.entity.Parrot;
import org.bukkit.entity.Player;
import org.bukkit.entity.Sittable;
import org.bukkit.entity.Tameable;
import org.bukkit.entity.Wolf;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
Expand Down Expand Up @@ -66,6 +57,7 @@ public class PlayerInteractListener implements Listener {
private int changeOwnerPrice;
private int freePetPrice;
private boolean showHealth;
private boolean disableRiding;

public PlayerInteractListener(PetMaster petMaster) {
this.plugin = petMaster;
Expand Down Expand Up @@ -94,6 +86,7 @@ public void extractParameters() {
hologramMessage = plugin.getPluginConfig().getBoolean("hologramMessage", false);
actionBarMessage = plugin.getPluginConfig().getBoolean("actionBarMessage", true);
showHealth = plugin.getPluginConfig().getBoolean("showHealth", true);
disableRiding = plugin.getPluginConfig().getBoolean("disableRiding", false);

boolean holographicDisplaysAvailable = Bukkit.getPluginManager().isPluginEnabled("HolographicDisplays");
// Checking whether user configured plugin to display hologram but HolographicsDisplays not available.
Expand All @@ -105,7 +98,7 @@ public void extractParameters() {
}
}

@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerInteractEntityEvent(PlayerInteractEntityEvent event) {
if (shouldHandleEvent(event)) {
Tameable tameable = (Tameable) event.getRightClicked();
Expand All @@ -121,6 +114,13 @@ public void onPlayerInteractEntityEvent(PlayerInteractEntityEvent event) {
// Has the player requested to free one of his pets?
boolean freePet = plugin.getFreeCommand().collectPendingFreeRequest(player);

if (disableRiding && !isOwner && !player.hasPermission("petmaster.admin") && tameable instanceof AbstractHorse) {
player.sendMessage(plugin.getChatHeader() + plugin.getPluginLang()
.getString("not-owner", "You do not own this pet!").replace("PLAYER", player.getName()));
event.setCancelled(true);
return;
}

// Cannot change ownership or free pet if not owner and no bypass permission.
if ((newOwner != null || freePet) && !isOwner && !player.hasPermission("petmaster.admin")) {
player.sendMessage(plugin.getChatHeader() + plugin.getPluginLang()
Expand Down
48 changes: 48 additions & 0 deletions src/main/java/com/hm/petmaster/listener/PlayerLeashListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.hm.petmaster.listener;

import com.hm.mcshared.particle.ReflectionUtils;
import com.hm.petmaster.PetMaster;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerLeashEntityEvent;

public class PlayerLeashListener implements Listener {
private final PetMaster plugin;
private final int version;

// Configuration parameters.
private boolean disableLeash;

public PlayerLeashListener(PetMaster petMaster) {
this.plugin = petMaster;
version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]);
}

public void extractParameters() {
disableLeash = plugin.getPluginConfig().getBoolean("disableLeash", false);
}

@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerLeashEntityEvent(PlayerLeashEntityEvent event) {
if (plugin.getEnableDisableCommand().isDisabled() || !disableLeash)
return;
Entity entity = event.getEntity();
if (!(entity instanceof Tameable))
return;

Player player = event.getPlayer();
Tameable tameable = (Tameable) entity;
AnimalTamer currentOwner = tameable.getOwner();
if (currentOwner == null || currentOwner.getUniqueId().equals(player.getUniqueId()) || player.hasPermission("petmaster.admin"))
return;

player.sendMessage(plugin.getChatHeader() + plugin.getPluginLang()
.getString("not-owner", "You do not own this pet!").replace("PLAYER", player.getName()));
event.setCancelled(true);
}
}
6 changes: 6 additions & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ displayLlama: true
# Take parrots into account.
displayParrot: true

# Prevent others from using lead on pet.
disableLeash: false

# Prevent others from mounting pet (horse/donkey).
disableRiding: false

# Protect pets to avoid being hurt by other player.
disablePlayerDamage: false

Expand Down

0 comments on commit fc795c2

Please sign in to comment.