From 9a687ec09955c7291fcca006dd27399509068bdd Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Sat, 3 Aug 2024 14:32:34 +0200 Subject: [PATCH] Add `abandonpet` command. --- .../GriefPrevention/DataStore.java | 3 +++ .../GriefPrevention/GriefPrevention.java | 22 +++++++++++++++++++ .../GriefPrevention/Messages.java | 3 +++ .../GriefPrevention/PlayerData.java | 1 + .../GriefPrevention/PlayerEventHandler.java | 9 ++++++++ src/main/resources/plugin.yml | 4 ++++ 6 files changed, 42 insertions(+) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java index 8a74f6c..8aeb8d3 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java @@ -1529,8 +1529,11 @@ public abstract class DataStore this.addDefault(defaults, Messages.AdvertiseACB, "You may use /ACB to give yourself more claim blocks.", null); this.addDefault(defaults, Messages.NotYourPet, "That belongs to {0} until it's given to you with /GivePet.", "0: owner name"); this.addDefault(defaults, Messages.PetGiveawayConfirmation, "Pet transferred.", null); + this.addDefault(defaults, Messages.PetAbandonConfirmation, "Pet abandoned.", null); this.addDefault(defaults, Messages.PetTransferCancellation, "Pet giveaway cancelled.", null); + this.addDefault(defaults, Messages.PetAbandonCancellation, "Pet giveaway cancelled.", null); this.addDefault(defaults, Messages.ReadyToTransferPet, "Ready to transfer! Right-click the pet you'd like to give away, or cancel with /GivePet cancel.", null); + this.addDefault(defaults, Messages.ReadyToAbandonPet, "Ready to abandon! Right-click the pet you'd like to abandon.", null); this.addDefault(defaults, Messages.AvoidGriefClaimLand, "Prevent grief! If you claim your land, you will be grief-proof.", null); this.addDefault(defaults, Messages.BecomeMayor, "Subdivide your land claim and become a mayor!", null); this.addDefault(defaults, Messages.ClaimCreationFailedOverClaimCountLimit, "You've reached your limit on land claims. Use /AbandonClaim to remove one before creating another.", null); diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java index 29f919c..692ec22 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -2459,6 +2459,28 @@ public class GriefPrevention extends JavaPlugin return true; } + //abandonpet + else if (cmd.getName().equalsIgnoreCase("abandonpet") && player != null) + { + + PlayerData playerData = this.dataStore.getPlayerData(player.getUniqueId()); + + //special case: cancellation + if (args.length > 0 && args[0].equalsIgnoreCase("cancel")) + { + playerData.petAbandonment = false; + GriefPrevention.sendMessage(player, TextMode.Success, Messages.PetTransferCancellation); + return true; + } + + playerData.petAbandonment = true; + + //send instructions + GriefPrevention.sendMessage(player, TextMode.Instr, Messages.ReadyToAbandonPet); + + return true; + } + //gpblockinfo else if (cmd.getName().equalsIgnoreCase("gpblockinfo") && player != null) { diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java b/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java index b0e7a68..6afc850 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java @@ -196,8 +196,11 @@ public enum Messages AdvertiseACB, NotYourPet, PetGiveawayConfirmation, + PetAbandonConfirmation, PetTransferCancellation, + PetAbandonCancellation, ReadyToTransferPet, + ReadyToAbandonPet, AvoidGriefClaimLand, BecomeMayor, ClaimCreationFailedOverClaimCountLimit, diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerData.java b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerData.java index aa1b1d5..a6dbb6d 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerData.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerData.java @@ -112,6 +112,7 @@ public class PlayerData //player which a pet will be given to when it's right-clicked OfflinePlayer petGiveawayRecipient = null; + boolean petAbandonment = false; //timestamp for last "you're building outside your land claims" message Long buildWarningTimestamp = null; diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index e138875..d40319c 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -578,6 +578,15 @@ class PlayerEventHandler implements Listener //if the player interacting is the owner or an admin in ignore claims mode, always allow if (player.getUniqueId().equals(ownerID) || playerData.ignoreClaims) { + //if abandoning a pet, do that instead + if (playerData.petAbandonment) + { + tameable.setOwner(null); + playerData.petAbandonment = false; + GriefPrevention.sendMessage(player, TextMode.Success, Messages.PetGiveawayConfirmation); + event.setCancelled(true); + } + //if giving away pet, do that instead if (playerData.petGiveawayRecipient != null) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e88eff5..3d8f682 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -193,6 +193,10 @@ commands: description: Allows a player to give away a pet he or she tamed. usage: /GivePet permission: griefprevention.givepet + abandonpet: + description: Allows a player to abandon a pet he or she tamed. + usage: /Abandonpet + permission: griefprevention.abandonpet gpblockinfo: description: Allows an administrator to get technical information about blocks in the world and items in hand. usage: /GPBlockInfo