From faee4efbefb05575a8e77a4b334b21ca5cb12c7b Mon Sep 17 00:00:00 2001 From: ryanhamshire Date: Fri, 15 Apr 2016 21:08:36 -0700 Subject: [PATCH] Fix-up for "broken" abandoned pets. --- .../GriefPrevention/PlayerEventHandler.java | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index 79ffd72..0f4674f 100644 --- a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -1210,37 +1210,50 @@ class PlayerEventHandler implements Listener if(entity instanceof Tameable) { Tameable tameable = (Tameable)entity; - if(tameable.isTamed() && tameable.getOwner() != null) + if(tameable.isTamed()) { - UUID ownerID = tameable.getOwner().getUniqueId(); - - //if the player interacting is the owner or an admin in ignore claims mode, always allow - if(player.getUniqueId().equals(ownerID) || playerData.ignoreClaims) - { - //if giving away pet, do that instead - if(playerData.petGiveawayRecipient != null) - { - tameable.setOwner(playerData.petGiveawayRecipient); - playerData.petGiveawayRecipient = null; - GriefPrevention.sendMessage(player, TextMode.Success, Messages.PetGiveawayConfirmation); - event.setCancelled(true); - } + if(tameable.getOwner() != null) + { + UUID ownerID = tameable.getOwner().getUniqueId(); - return; - } - if(!GriefPrevention.instance.pvpRulesApply(entity.getLocation().getWorld()) || GriefPrevention.instance.config_pvp_protectPets) - { - //otherwise disallow - OfflinePlayer owner = GriefPrevention.instance.getServer().getOfflinePlayer(ownerID); - String ownerName = owner.getName(); - if(ownerName == null) ownerName = "someone"; - String message = GriefPrevention.instance.dataStore.getMessage(Messages.NotYourPet, ownerName); - if(player.hasPermission("griefprevention.ignoreclaims")) - message += " " + GriefPrevention.instance.dataStore.getMessage(Messages.IgnoreClaimsAdvertisement); - GriefPrevention.sendMessage(player, TextMode.Err, message); - event.setCancelled(true); - return; - } + //if the player interacting is the owner or an admin in ignore claims mode, always allow + if(player.getUniqueId().equals(ownerID) || playerData.ignoreClaims) + { + //if giving away pet, do that instead + if(playerData.petGiveawayRecipient != null) + { + tameable.setOwner(playerData.petGiveawayRecipient); + playerData.petGiveawayRecipient = null; + GriefPrevention.sendMessage(player, TextMode.Success, Messages.PetGiveawayConfirmation); + event.setCancelled(true); + } + + return; + } + if(!GriefPrevention.instance.pvpRulesApply(entity.getLocation().getWorld()) || GriefPrevention.instance.config_pvp_protectPets) + { + //otherwise disallow + OfflinePlayer owner = GriefPrevention.instance.getServer().getOfflinePlayer(ownerID); + String ownerName = owner.getName(); + if(ownerName == null) ownerName = "someone"; + String message = GriefPrevention.instance.dataStore.getMessage(Messages.NotYourPet, ownerName); + if(player.hasPermission("griefprevention.ignoreclaims")) + message += " " + GriefPrevention.instance.dataStore.getMessage(Messages.IgnoreClaimsAdvertisement); + GriefPrevention.sendMessage(player, TextMode.Err, message); + event.setCancelled(true); + return; + } + } + } + else //world repair code for a now-fixed GP bug + { + //ensure this entity can be tamed by players + tameable.setOwner(null); + if(tameable instanceof InventoryHolder) + { + InventoryHolder holder = (InventoryHolder)tameable; + holder.getInventory().clear(); + } } }