From 097d63922a3b464cd221cdfeb608e4ae6c7796f7 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 23 Oct 2024 08:04:17 +1100 Subject: [PATCH] SPIGOT-7919: Add API to access current player input --- .../org/bukkit/craftbukkit/CraftInput.java | 75 +++++++++++++++++++ .../craftbukkit/entity/CraftPlayer.java | 7 ++ 2 files changed, 82 insertions(+) create mode 100644 src/main/java/org/bukkit/craftbukkit/CraftInput.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftInput.java b/src/main/java/org/bukkit/craftbukkit/CraftInput.java new file mode 100644 index 000000000..ee71b85e7 --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/CraftInput.java @@ -0,0 +1,75 @@ +package org.bukkit.craftbukkit; + +import java.util.Objects; +import org.bukkit.Input; + +public class CraftInput implements Input { + + private final net.minecraft.world.entity.player.Input handle; + + public CraftInput(net.minecraft.world.entity.player.Input handle) { + this.handle = handle; + } + + @Override + public boolean isForward() { + return handle.forward(); + } + + @Override + public boolean isBackward() { + return handle.backward(); + } + + @Override + public boolean isLeft() { + return handle.left(); + } + + @Override + public boolean isRight() { + return handle.right(); + } + + @Override + public boolean isJump() { + return handle.jump(); + } + + @Override + public boolean isSneak() { + return handle.shift(); + } + + @Override + public boolean isSprint() { + return handle.sprint(); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 89 * hash + Objects.hashCode(this.handle); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final CraftInput other = (CraftInput) obj; + return Objects.equals(this.handle, other.handle); + } + + @Override + public String toString() { + return "CraftInput{" + handle + '}'; + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index a4cfc6a9d..fa364aa32 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -118,6 +118,7 @@ import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Effect; import org.bukkit.GameMode; +import org.bukkit.Input; import org.bukkit.Instrument; import org.bukkit.Location; import org.bukkit.Material; @@ -144,6 +145,7 @@ import org.bukkit.conversations.ConversationAbandonedEvent; import org.bukkit.conversations.ManuallyAbandonedConversationCanceller; import org.bukkit.craftbukkit.CraftEffect; import org.bukkit.craftbukkit.CraftEquipmentSlot; +import org.bukkit.craftbukkit.CraftInput; import org.bukkit.craftbukkit.CraftOfflinePlayer; import org.bukkit.craftbukkit.CraftParticle; import org.bukkit.craftbukkit.CraftServer; @@ -1193,6 +1195,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return getHandle().getEnderPearls().stream().map((e) -> (EnderPearl) e.getBukkitEntity()).collect(Collectors.toList()); } + @Override + public Input getCurrentInput() { + return new CraftInput(getHandle().getLastClientInput()); + } + @Override public Location getBedLocation() { Preconditions.checkState(isSleeping(), "Not sleeping");