mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 09:27:43 +01:00
Flesh out the AFK API more
This commit is contained in:
120
patches/api/0014-Implement-AFK-API.patch
Normal file
120
patches/api/0014-Implement-AFK-API.patch
Normal file
@@ -0,0 +1,120 @@
|
||||
From 4effdeda4f4b6828eaf78212a560842e43d7b323 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 10 Aug 2019 22:19:56 -0500
|
||||
Subject: [PATCH] Implement AFK API
|
||||
|
||||
---
|
||||
.../net/pl3x/purpur/event/PlayerAFKEvent.java | 70 +++++++++++++++++++
|
||||
src/main/java/org/bukkit/entity/Player.java | 21 ++++++
|
||||
2 files changed, 91 insertions(+)
|
||||
create mode 100644 src/main/java/net/pl3x/purpur/event/PlayerAFKEvent.java
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/event/PlayerAFKEvent.java b/src/main/java/net/pl3x/purpur/event/PlayerAFKEvent.java
|
||||
new file mode 100644
|
||||
index 00000000..4db33485
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/event/PlayerAFKEvent.java
|
||||
@@ -0,0 +1,70 @@
|
||||
+package net.pl3x.purpur.event;
|
||||
+
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.event.Cancellable;
|
||||
+import org.bukkit.event.HandlerList;
|
||||
+import org.bukkit.event.player.PlayerEvent;
|
||||
+import org.jetbrains.annotations.NotNull;
|
||||
+import org.jetbrains.annotations.Nullable;
|
||||
+
|
||||
+public class PlayerAFKEvent extends PlayerEvent implements Cancellable {
|
||||
+ private static final HandlerList handlers = new HandlerList();
|
||||
+ private final boolean setAfk;
|
||||
+ private boolean shouldKick;
|
||||
+ private String broadcast;
|
||||
+ private boolean cancel;
|
||||
+
|
||||
+ public PlayerAFKEvent(@NotNull Player player, boolean setAfk, boolean shouldKick, @Nullable String broadcast) {
|
||||
+ super(player);
|
||||
+ this.setAfk = setAfk;
|
||||
+ this.shouldKick = shouldKick;
|
||||
+ this.broadcast = broadcast;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Whether player is going afk or coming back
|
||||
+ *
|
||||
+ * @return True if going afk. False is coming back
|
||||
+ */
|
||||
+ public boolean isGoingAfk() {
|
||||
+ return setAfk;
|
||||
+ }
|
||||
+
|
||||
+ public boolean shouldKick() {
|
||||
+ return shouldKick;
|
||||
+ }
|
||||
+
|
||||
+ public void setShouldKick(boolean shouldKick) {
|
||||
+ this.shouldKick = shouldKick;
|
||||
+ }
|
||||
+
|
||||
+ @Nullable
|
||||
+ public String getBroadcastMsg() {
|
||||
+ return broadcast;
|
||||
+ }
|
||||
+
|
||||
+ public void setBroadcastMsg(@Nullable String broadcast) {
|
||||
+ this.broadcast = broadcast;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isCancelled() {
|
||||
+ return cancel;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setCancelled(boolean cancel) {
|
||||
+ this.cancel = cancel;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @NotNull
|
||||
+ public HandlerList getHandlers() {
|
||||
+ return handlers;
|
||||
+ }
|
||||
+
|
||||
+ @NotNull
|
||||
+ public static HandlerList getHandlerList() {
|
||||
+ return handlers;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
||||
index 8d8d8957..d430ce0b 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -2096,4 +2096,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
@Override
|
||||
Spigot spigot();
|
||||
// Spigot end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ /**
|
||||
+ * Check if player is AFK
|
||||
+ *
|
||||
+ * @return True if AFK
|
||||
+ */
|
||||
+ boolean isAfk();
|
||||
+
|
||||
+ /**
|
||||
+ * Set player as AFK
|
||||
+ *
|
||||
+ * @param setAfk Whether to set AFK or not
|
||||
+ */
|
||||
+ void setAfk(boolean setAfk);
|
||||
+
|
||||
+ /**
|
||||
+ * Reset the idle timer back to 0
|
||||
+ */
|
||||
+ void resetIdleTimer();
|
||||
+ // Purpur end
|
||||
}
|
||||
--
|
||||
2.20.1
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
From cd72403d3729650fddebbb1d9065c0eeb9ba2e1f Mon Sep 17 00:00:00 2001
|
||||
From 886c0f755d9420d7005f59640391e1799f94a68b Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 8 Aug 2019 15:29:15 -0500
|
||||
Subject: [PATCH] Implement AFK options
|
||||
Subject: [PATCH] Implement AFK API
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/Entity.java | 1 +
|
||||
.../net/minecraft/server/EntityHuman.java | 24 +++++++++++++
|
||||
.../net/minecraft/server/EntityPlayer.java | 1 +
|
||||
.../net/minecraft/server/IEntityAccess.java | 34 +++++++------------
|
||||
.../net/minecraft/server/IEntitySelector.java | 2 ++
|
||||
.../minecraft/server/PlayerConnection.java | 10 ++++++
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 12 +++++++
|
||||
.../net/minecraft/server/EntityHuman.java | 9 +++++
|
||||
.../net/minecraft/server/EntityPlayer.java | 37 +++++++++++++++++++
|
||||
.../net/minecraft/server/IEntityAccess.java | 34 ++++++-----------
|
||||
.../net/minecraft/server/IEntitySelector.java | 2 +
|
||||
.../minecraft/server/PlayerConnection.java | 10 +++++
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 12 ++++++
|
||||
.../craftbukkit/entity/CraftPlayer.java | 17 +++++++++
|
||||
.../java/org/spigotmc/ActivationRange.java | 1 +
|
||||
8 files changed, 63 insertions(+), 22 deletions(-)
|
||||
9 files changed, 101 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 770d21468..2ff5a12d8 100644
|
||||
@@ -27,52 +28,75 @@ index 770d21468..2ff5a12d8 100644
|
||||
double d3 = this.locX - d0;
|
||||
double d4 = this.locY - d1;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 2a943f316..c396bf2e2 100644
|
||||
index 2a943f316..8ee2e6c7f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -75,6 +75,30 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
public boolean affectsSpawning = true;
|
||||
// Paper end
|
||||
@@ -86,6 +86,15 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
+ // Purpur start
|
||||
+ private boolean isAfk = false;
|
||||
+
|
||||
+ public void setAfk(boolean isAfk) {
|
||||
+ if (!world.purpurConfig.idleTimeoutKick) { // do not broadcast if going to kick
|
||||
+ if (!world.purpurConfig.idleTimeoutBroadcastAway.isEmpty() && !this.isAfk && isAfk) {
|
||||
+ getMinecraftServer().server.broadcastMessage(world.purpurConfig.idleTimeoutBroadcastAway.replace("{player}", getName()));
|
||||
+ } else if (!world.purpurConfig.idleTimeoutBroadcastBack.isEmpty() && this.isAfk && !isAfk) {
|
||||
+ getMinecraftServer().server.broadcastMessage(world.purpurConfig.idleTimeoutBroadcastBack.replace("{player}", getName()));
|
||||
+ }
|
||||
+ }
|
||||
+ this.isAfk = isAfk;
|
||||
+ public void setAfk(boolean setAfk){
|
||||
+ }
|
||||
+
|
||||
+ public boolean isAfk() {
|
||||
+ return isAfk;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isCollidable(boolean ignoreClimbing) {
|
||||
+ return !isAfk && super.isCollidable(ignoreClimbing);
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
// CraftBukkit start
|
||||
public boolean fauxSleeping;
|
||||
public String spawnWorld = "";
|
||||
public EntityHuman(World world, GameProfile gameprofile) {
|
||||
super(EntityTypes.PLAYER, world);
|
||||
this.bY = ItemStack.a;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 622899d8f..f7694545e 100644
|
||||
index 622899d8f..1ca5da443 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -1593,6 +1593,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
@@ -1593,8 +1593,45 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
|
||||
public void resetIdleTimer() {
|
||||
this.cm = SystemUtils.getMonotonicMillis();
|
||||
+ setAfk(false); // Purpur
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ private boolean isAfk = false;
|
||||
+
|
||||
+ @Override
|
||||
+ public void setAfk(boolean setAfk) {
|
||||
+ if (this.isAfk == setAfk) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ net.pl3x.purpur.event.PlayerAFKEvent event = new net.pl3x.purpur.event.PlayerAFKEvent(getBukkitEntity(), false, world.purpurConfig.idleTimeoutKick, setAfk ? world.purpurConfig.idleTimeoutBroadcastAway : world.purpurConfig.idleTimeoutBroadcastBack);
|
||||
+ if (!event.callEvent() || event.shouldKick()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ this.isAfk = setAfk;
|
||||
+
|
||||
+ if (!setAfk) {
|
||||
+ resetIdleTimer();
|
||||
+ }
|
||||
+
|
||||
+ if (event.getBroadcastMsg() != null && !event.getBroadcastMsg().isEmpty()) {
|
||||
+ ((WorldServer) world).getMinecraftServer().server.broadcastMessage(event.getBroadcastMsg().replace("{player}", getName()));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isAfk() {
|
||||
+ return isAfk;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isCollidable(boolean ignoreClimbing) {
|
||||
+ return !isAfk() && super.isCollidable(ignoreClimbing);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
public ServerStatisticManager getStatisticManager() {
|
||||
return this.serverStatisticManager;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
index 9aaa75e95..70fe85279 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
@@ -203,6 +227,32 @@ index b1dcb5f8d..69fac757d 100644
|
||||
public int elytraDamagePerSecond = 1;
|
||||
public double elytraDamageMultiplyBySpeed = 0;
|
||||
public boolean elytraIgnoreUnbreaking = false;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index e920545df..c098de315 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -2088,4 +2088,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
return spigot;
|
||||
}
|
||||
// Spigot end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public boolean isAfk() {
|
||||
+ return getHandle().isAfk();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setAfk(boolean setAfk) {
|
||||
+ getHandle().setAfk(setAfk);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void resetIdleTimer() {
|
||||
+ getHandle().resetIdleTimer();
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 92601c581..185717c80 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
Reference in New Issue
Block a user