From 1d95ea3c61228ebb1f547f8f36a2d22b8c1dbc3a Mon Sep 17 00:00:00 2001 From: Norbert Dejlich Date: Tue, 16 Jul 2024 00:10:50 +0200 Subject: [PATCH] GH-407 Add platform receiver. Fix rcon bukkit adventure platform bug. (#407) --- .../AdventurePlatformAudienceProvider.java | 5 ++++ .../bukkit/platform/RawTextAudience.java | 25 +++++++++++++++++++ .../bukkit/BukkitPlatformSender.java | 15 ++++++++++- .../platform/PlatformReceiver.java | 11 ++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/RawTextAudience.java create mode 100644 litecommands-core/src/dev/rollczi/litecommands/platform/PlatformReceiver.java diff --git a/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/AdventurePlatformAudienceProvider.java b/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/AdventurePlatformAudienceProvider.java index a18764f48..d4469d473 100644 --- a/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/AdventurePlatformAudienceProvider.java +++ b/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/AdventurePlatformAudienceProvider.java @@ -3,6 +3,7 @@ import dev.rollczi.litecommands.adventure.AdventureAudienceProvider; import dev.rollczi.litecommands.identifier.Identifier; import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.platform.PlatformReceiver; import dev.rollczi.litecommands.platform.PlatformSender; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.platform.AudienceProvider; @@ -39,6 +40,10 @@ public Audience sender(Invocation invocation) { return audienceProvider.player(uuidOptional.get()); } + if (invocation.platformSender() instanceof PlatformReceiver) { + return new RawTextAudience((PlatformReceiver) invocation.platformSender()); + } + throw new IllegalArgumentException("Unsupported command sender type: " + sender.getClass().getName() + " or missing identifier"); } diff --git a/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/RawTextAudience.java b/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/RawTextAudience.java new file mode 100644 index 000000000..f35313c6d --- /dev/null +++ b/litecommands-adventure-platform/src/dev/rollczi/litecommands/adventure/bukkit/platform/RawTextAudience.java @@ -0,0 +1,25 @@ +package dev.rollczi.litecommands.adventure.bukkit.platform; + +import dev.rollczi.litecommands.platform.PlatformReceiver; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.identity.Identity; +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +@ApiStatus.Experimental +class RawTextAudience implements Audience { + + private final PlatformReceiver platformReceiver; + + public RawTextAudience(PlatformReceiver platformReceiver) { + this.platformReceiver = platformReceiver; + } + + @Override + public void sendMessage(@NotNull Identity source, @NotNull Component message, @NotNull MessageType type) { + platformReceiver.sendMessage(message.toString()); + } + +} diff --git a/litecommands-bukkit/src/dev/rollczi/litecommands/bukkit/BukkitPlatformSender.java b/litecommands-bukkit/src/dev/rollczi/litecommands/bukkit/BukkitPlatformSender.java index 25633c440..475616c6f 100644 --- a/litecommands-bukkit/src/dev/rollczi/litecommands/bukkit/BukkitPlatformSender.java +++ b/litecommands-bukkit/src/dev/rollczi/litecommands/bukkit/BukkitPlatformSender.java @@ -2,10 +2,12 @@ import dev.rollczi.litecommands.identifier.Identifier; import dev.rollczi.litecommands.platform.AbstractPlatformSender; +import dev.rollczi.litecommands.platform.PlatformReceiver; import org.bukkit.command.CommandSender; +import org.bukkit.command.RemoteConsoleCommandSender; import org.bukkit.entity.Player; -class BukkitPlatformSender extends AbstractPlatformSender { +class BukkitPlatformSender extends AbstractPlatformSender implements PlatformReceiver { private final CommandSender handle; @@ -38,7 +40,18 @@ public Identifier getIdentifier() { return Identifier.of(((Player) this.handle).getUniqueId()); } + if (this.handle instanceof RemoteConsoleCommandSender) { + RemoteConsoleCommandSender commandSender = (RemoteConsoleCommandSender) this.handle; + return Identifier.of(RemoteConsoleCommandSender.class, commandSender.getName()); + } + return Identifier.CONSOLE; } + @Override + public Comparable sendMessage(String message) { + this.handle.sendMessage(message); + return null; + } + } diff --git a/litecommands-core/src/dev/rollczi/litecommands/platform/PlatformReceiver.java b/litecommands-core/src/dev/rollczi/litecommands/platform/PlatformReceiver.java new file mode 100644 index 000000000..897b63764 --- /dev/null +++ b/litecommands-core/src/dev/rollczi/litecommands/platform/PlatformReceiver.java @@ -0,0 +1,11 @@ +package dev.rollczi.litecommands.platform; + +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Experimental +public interface PlatformReceiver { + + @ApiStatus.Experimental + Comparable sendMessage(String message); + +}