From ebf60c1e70c6cd8fb92f9d0f83a3c812ee074cf5 Mon Sep 17 00:00:00 2001 From: JRoy Date: Thu, 12 Mar 2020 22:08:11 -0400 Subject: [PATCH] Implement better AfkStatusChangeEvent --- .../essentials/EssentialsPlayerListener.java | 5 ++-- .../src/com/earth2me/essentials/IUser.java | 4 +++ .../src/com/earth2me/essentials/User.java | 29 ++++++++++++++----- .../essentials/commands/Commandafk.java | 5 ++-- .../ess3/api/events/AfkStatusChangeEvent.java | 22 ++++++++++++++ 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 58380e2fe..9097674ec 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -10,6 +10,7 @@ import com.earth2me.essentials.utils.MaterialUtil; import com.earth2me.essentials.utils.VersionUtil; import io.papermc.lib.PaperLib; import net.ess3.api.IEssentials; +import net.ess3.api.events.AfkStatusChangeEvent; import org.bukkit.*; import org.bukkit.command.PluginCommand; import org.bukkit.entity.HumanEntity; @@ -199,7 +200,7 @@ public class EssentialsPlayerListener implements Listener { } } - user.updateActivity(false); + user.updateActivity(false, AfkStatusChangeEvent.Cause.QUIT); if (!user.isHidden()) { user.setLastLogout(System.currentTimeMillis()); } @@ -233,7 +234,7 @@ public class EssentialsPlayerListener implements Listener { final long currentTime = System.currentTimeMillis(); dUser.checkMuteTimeout(currentTime); - dUser.updateActivity(false); + dUser.updateActivity(false, AfkStatusChangeEvent.Cause.JOIN); dUser.stopTransaction(); class DelayJoinTask implements Runnable { diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index d1a5c94e9..0650cf3eb 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -3,6 +3,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.commands.IEssentialsCommand; import net.ess3.api.ITeleport; import net.ess3.api.MaxMoneyException; +import net.ess3.api.events.AfkStatusChangeEvent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -59,8 +60,11 @@ public interface IUser { void setMoney(final BigDecimal value) throws MaxMoneyException; + @Deprecated void setAfk(final boolean set); + void setAfk(final boolean set, final AfkStatusChangeEvent.Cause cause); + /** * 'Hidden' Represents when a player is hidden from others. This status includes when the player is hidden via other * supported plugins. Use isVanished() if you want to check if a user is vanished by Essentials. diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 95394d3b9..3867e25a5 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -498,7 +498,12 @@ public class User extends UserData implements Comparable, IMessageRecipien @Override public void setAfk(final boolean set) { - final AfkStatusChangeEvent afkEvent = new AfkStatusChangeEvent(this, set); + setAfk(set, AfkStatusChangeEvent.Cause.UNKNOWN); + } + + @Override + public void setAfk(boolean set, AfkStatusChangeEvent.Cause cause) { + final AfkStatusChangeEvent afkEvent = new AfkStatusChangeEvent(this, set, cause); ess.getServer().getPluginManager().callEvent(afkEvent); if (afkEvent.isCancelled()) { return; @@ -516,7 +521,7 @@ public class User extends UserData implements Comparable, IMessageRecipien _setAfk(set); updateAfkListName(); } - + private void updateAfkListName() { if (ess.getSettings().isAfkListName()) { if(isAfk()) { @@ -528,8 +533,13 @@ public class User extends UserData implements Comparable, IMessageRecipien } } + @Deprecated public boolean toggleAfk() { - setAfk(!isAfk()); + return toggleAfk(AfkStatusChangeEvent.Cause.UNKNOWN); + } + + public boolean toggleAfk(AfkStatusChangeEvent.Cause cause) { + setAfk(!isAfk(), cause); return isAfk(); } @@ -594,9 +604,14 @@ public class User extends UserData implements Comparable, IMessageRecipien return false; } + @Deprecated public void updateActivity(final boolean broadcast) { + updateActivity(broadcast, AfkStatusChangeEvent.Cause.UNKNOWN); + } + + public void updateActivity(final boolean broadcast, AfkStatusChangeEvent.Cause cause) { if (isAfk()) { - setAfk(false); + setAfk(false, cause); if (broadcast && !isHidden()) { setDisplayNick(); final String msg = tl("userIsNotAway", getDisplayName()); @@ -610,13 +625,13 @@ public class User extends UserData implements Comparable, IMessageRecipien public void updateActivityOnMove(final boolean broadcast) { if(ess.getSettings().cancelAfkOnMove()) { - updateActivity(broadcast); + updateActivity(broadcast, AfkStatusChangeEvent.Cause.MOVE); } } public void updateActivityOnInteract(final boolean broadcast) { if(ess.getSettings().cancelAfkOnInteract()) { - updateActivity(broadcast); + updateActivity(broadcast, AfkStatusChangeEvent.Cause.INTERACT); } } @@ -644,7 +659,7 @@ public class User extends UserData implements Comparable, IMessageRecipien } final long autoafk = ess.getSettings().getAutoAfk(); if (!isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis() && isAuthorized("essentials.afk.auto")) { - setAfk(true); + setAfk(true, AfkStatusChangeEvent.Cause.ACTIVITY); if (!isHidden()) { setDisplayNick(); final String msg = tl("userIsAway", getDisplayName()); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 21227d513..e5944d933 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -2,6 +2,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; +import net.ess3.api.events.AfkStatusChangeEvent; import org.bukkit.Server; import java.util.Collections; @@ -55,12 +56,12 @@ public class Commandafk extends EssentialsCommand { } user.setDisplayNick(); String msg = ""; - if (!user.toggleAfk()) { + if (!user.toggleAfk(AfkStatusChangeEvent.Cause.COMMAND)) { //user.sendMessage(_("markedAsNotAway")); if (!user.isHidden()) { msg = tl("userIsNotAway", user.getDisplayName()); } - user.updateActivity(false); + user.updateActivity(false, AfkStatusChangeEvent.Cause.COMMAND); } else { //user.sendMessage(_("markedAsAway")); if (!user.isHidden()) { diff --git a/Essentials/src/net/ess3/api/events/AfkStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/AfkStatusChangeEvent.java index 1fa99e3f6..c5f4b9db5 100644 --- a/Essentials/src/net/ess3/api/events/AfkStatusChangeEvent.java +++ b/Essentials/src/net/ess3/api/events/AfkStatusChangeEvent.java @@ -4,7 +4,29 @@ import net.ess3.api.IUser; public class AfkStatusChangeEvent extends StatusChangeEvent { + private Cause cause; + + @Deprecated public AfkStatusChangeEvent(IUser affected, boolean value) { + this(affected, value, Cause.UNKNOWN); + } + + public AfkStatusChangeEvent(IUser affected, boolean value, Cause cause) { super(affected, affected, value); + this.cause = cause; + } + + public Cause getCause() { + return cause; + } + + public enum Cause { + ACTIVITY, + MOVE, + INTERACT, + COMMAND, + JOIN, + QUIT, + UNKNOWN } }