diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminWhyCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminWhyCommand.java index 7bf510d8f..c98b8f23b 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminWhyCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminWhyCommand.java @@ -56,6 +56,9 @@ public class AdminWhyCommand extends ConfirmableCommand { } // Set the debug meta target.getPlayer().setMetadata(getWorld().getName() + "_why_debug", new FixedMetadataValue(getPlugin(), newValue)); + if (user.isPlayer()) { + target.getPlayer().setMetadata(getWorld().getName() + "_why_debug_issuer", new FixedMetadataValue(getPlugin(), user.getUniqueId().toString())); + } return true; } diff --git a/src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java b/src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java index a3d4be4ae..f7d5d17ca 100644 --- a/src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java +++ b/src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java @@ -1,6 +1,7 @@ package world.bentobox.bentobox.api.flags; import java.util.Optional; +import java.util.UUID; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -204,10 +205,24 @@ public abstract class FlagListener implements Listener { private void report(@Nullable User user, @NonNull Event e, @NonNull Location loc, @NonNull Flag flag, @NonNull Why why) { // A quick way to debug flag listener unit tests is to add this line here: System.out.println(why.name()); NOSONAR - if (user != null && user.getPlayer().getMetadata(loc.getWorld().getName() + "_why_debug").stream() + if (user != null && user.isPlayer() && user.getPlayer().getMetadata(loc.getWorld().getName() + "_why_debug").stream() .filter(p -> p.getOwningPlugin().equals(getPlugin())).findFirst().map(MetadataValue::asBoolean).orElse(false)) { - plugin.log("Why: " + e.getEventName() + " in world " + loc.getWorld().getName() + " at " + Util.xyz(loc.toVector())); - plugin.log("Why: " + user.getName() + " " + flag.getID() + " - " + why.name()); + String whyEvent = "Why: " + e.getEventName() + " in world " + loc.getWorld().getName() + " at " + Util.xyz(loc.toVector()); + String whyBypass = "Why: " + user.getName() + " " + flag.getID() + " - " + why.name(); + + plugin.log(whyEvent); + plugin.log(whyBypass); + + // See if there is a player that issued the debug + String issuerUUID = user.getPlayer().getMetadata(loc.getWorld().getName() + "_why_debug_issuer").stream() + .filter(p -> getPlugin().equals(p.getOwningPlugin())).findFirst().map(MetadataValue::asString).orElse(""); + if (!issuerUUID.isEmpty()) { + User issuer = User.getInstance(UUID.fromString(issuerUUID)); + if (issuer != null && issuer.isPlayer()) { + user.sendRawMessage(whyEvent); + user.sendRawMessage(whyBypass); + } + } } }