mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 17:37:42 +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>
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||||
Date: Thu, 8 Aug 2019 15:29:15 -0500
|
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 +
|
.../java/net/minecraft/server/Entity.java | 1 +
|
||||||
.../net/minecraft/server/EntityHuman.java | 24 +++++++++++++
|
.../net/minecraft/server/EntityHuman.java | 9 +++++
|
||||||
.../net/minecraft/server/EntityPlayer.java | 1 +
|
.../net/minecraft/server/EntityPlayer.java | 37 +++++++++++++++++++
|
||||||
.../net/minecraft/server/IEntityAccess.java | 34 +++++++------------
|
.../net/minecraft/server/IEntityAccess.java | 34 ++++++-----------
|
||||||
.../net/minecraft/server/IEntitySelector.java | 2 ++
|
.../net/minecraft/server/IEntitySelector.java | 2 +
|
||||||
.../minecraft/server/PlayerConnection.java | 10 ++++++
|
.../minecraft/server/PlayerConnection.java | 10 +++++
|
||||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 12 +++++++
|
.../net/pl3x/purpur/PurpurWorldConfig.java | 12 ++++++
|
||||||
|
.../craftbukkit/entity/CraftPlayer.java | 17 +++++++++
|
||||||
.../java/org/spigotmc/ActivationRange.java | 1 +
|
.../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
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||||
index 770d21468..2ff5a12d8 100644
|
index 770d21468..2ff5a12d8 100644
|
||||||
@@ -27,52 +28,75 @@ index 770d21468..2ff5a12d8 100644
|
|||||||
double d3 = this.locX - d0;
|
double d3 = this.locX - d0;
|
||||||
double d4 = this.locY - d1;
|
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
|
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
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||||
+++ b/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 {
|
@@ -86,6 +86,15 @@ public abstract class EntityHuman extends EntityLiving {
|
||||||
public boolean affectsSpawning = true;
|
}
|
||||||
// Paper end
|
// CraftBukkit end
|
||||||
|
|
||||||
+ // Purpur start
|
+ // Purpur start
|
||||||
+ private boolean isAfk = false;
|
+ public void setAfk(boolean setAfk){
|
||||||
+
|
|
||||||
+ 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 boolean isAfk() {
|
+ public boolean isAfk() {
|
||||||
+ return isAfk;
|
+ return false;
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ @Override
|
|
||||||
+ public boolean isCollidable(boolean ignoreClimbing) {
|
|
||||||
+ return !isAfk && super.isCollidable(ignoreClimbing);
|
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end
|
+ // Purpur end
|
||||||
+
|
+
|
||||||
// CraftBukkit start
|
public EntityHuman(World world, GameProfile gameprofile) {
|
||||||
public boolean fauxSleeping;
|
super(EntityTypes.PLAYER, world);
|
||||||
public String spawnWorld = "";
|
this.bY = ItemStack.a;
|
||||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
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
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||||
+++ b/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() {
|
public void resetIdleTimer() {
|
||||||
this.cm = SystemUtils.getMonotonicMillis();
|
this.cm = SystemUtils.getMonotonicMillis();
|
||||||
+ setAfk(false); // Purpur
|
+ 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() {
|
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
|
diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||||
index 9aaa75e95..70fe85279 100644
|
index 9aaa75e95..70fe85279 100644
|
||||||
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
|
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||||
@@ -203,6 +227,32 @@ index b1dcb5f8d..69fac757d 100644
|
|||||||
public int elytraDamagePerSecond = 1;
|
public int elytraDamagePerSecond = 1;
|
||||||
public double elytraDamageMultiplyBySpeed = 0;
|
public double elytraDamageMultiplyBySpeed = 0;
|
||||||
public boolean elytraIgnoreUnbreaking = false;
|
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
|
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||||
index 92601c581..185717c80 100644
|
index 92601c581..185717c80 100644
|
||||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||||
Reference in New Issue
Block a user