From b1ee8d1c548fd8bbff99f94a2502b32bdb5f6e7c Mon Sep 17 00:00:00 2001 From: broccoli Date: Sat, 3 Aug 2024 20:15:44 +0100 Subject: [PATCH] feat(paper): add EntitySource and rename *Sender types to *Source --- ...{ConsoleSender.java => ConsoleSource.java} | 8 ++-- .../cloud/paper/sender/EntitySource.java | 41 +++++++++++++++++++ ...{GenericSender.java => GenericSource.java} | 18 +++++--- ...pper.java => PaperSimpleSenderMapper.java} | 29 +++++++------ .../{PlayerSender.java => PlayerSource.java} | 8 ++-- .../paper/sender/{Sender.java => Source.java} | 14 +++++-- .../cloud/examples/paper/PaperPlugin.java | 6 +-- .../cloud/examples/paper/PluginBootstrap.java | 24 +++++------ 8 files changed, 105 insertions(+), 43 deletions(-) rename cloud-paper/src/main/java/org/incendo/cloud/paper/sender/{ConsoleSender.java => ConsoleSource.java} (86%) create mode 100644 cloud-paper/src/main/java/org/incendo/cloud/paper/sender/EntitySource.java rename cloud-paper/src/main/java/org/incendo/cloud/paper/sender/{GenericSender.java => GenericSource.java} (75%) rename cloud-paper/src/main/java/org/incendo/cloud/paper/sender/{ModernProvidedSenderMapper.java => PaperSimpleSenderMapper.java} (68%) rename cloud-paper/src/main/java/org/incendo/cloud/paper/sender/{PlayerSender.java => PlayerSource.java} (87%) rename cloud-paper/src/main/java/org/incendo/cloud/paper/sender/{Sender.java => Source.java} (85%) diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSender.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSource.java similarity index 86% rename from cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSender.java rename to cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSource.java index 1e0cc645..e64a95ae 100644 --- a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSender.java +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ConsoleSource.java @@ -28,15 +28,15 @@ import org.checkerframework.checker.nullness.qual.NonNull; @SuppressWarnings("UnstableApiUsage") -public final class ConsoleSender extends GenericSender { +public final class ConsoleSource extends GenericSource { - ConsoleSender(final CommandSourceStack commandSourceStack) { + ConsoleSource(final CommandSourceStack commandSourceStack) { super(commandSourceStack); } @Override - public @NonNull ConsoleCommandSender sender() { - return (ConsoleCommandSender) super.sender(); + public @NonNull ConsoleCommandSender source() { + return (ConsoleCommandSender) super.source(); } } diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/EntitySource.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/EntitySource.java new file mode 100644 index 00000000..5db5d641 --- /dev/null +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/EntitySource.java @@ -0,0 +1,41 @@ +// +// MIT License +// +// Copyright (c) 2024 Incendo +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +package org.incendo.cloud.paper.sender; + +import io.papermc.paper.command.brigadier.CommandSourceStack; +import org.bukkit.entity.Entity; +import org.checkerframework.checker.nullness.qual.NonNull; + +@SuppressWarnings("UnstableApiUsage") +public final class EntitySource extends GenericSource { + + EntitySource(final CommandSourceStack commandSourceStack) { + super(commandSourceStack); + } + + @Override + public @NonNull Entity source() { + return (Entity) super.source(); + } +} diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSender.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSource.java similarity index 75% rename from cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSender.java rename to cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSource.java index 49f2ec5c..bb5d39c1 100644 --- a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSender.java +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/GenericSource.java @@ -24,28 +24,36 @@ package org.incendo.cloud.paper.sender; import io.papermc.paper.command.brigadier.CommandSourceStack; +import net.kyori.adventure.audience.Audience; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; import org.checkerframework.checker.nullness.qual.NonNull; @SuppressWarnings("UnstableApiUsage") -public class GenericSender implements Sender { +public class GenericSource implements Source { private final CommandSourceStack commandSourceStack; - GenericSender(final @NonNull CommandSourceStack commandSourceStack) { + GenericSource(final @NonNull CommandSourceStack commandSourceStack) { this.commandSourceStack = commandSourceStack; } @Override - public final @NonNull CommandSourceStack commandSourceStack() { + public final @NonNull CommandSourceStack stack() { return this.commandSourceStack; } /** - * @see Sender#sender() + * @see Source#source() */ @Override - public @NonNull CommandSender sender() { + public @NonNull CommandSender source() { return this.commandSourceStack.getSender(); } + + @Override + public final @NonNull Audience audience() { + Entity executor = this.commandSourceStack.getExecutor(); + return executor == null ? this.commandSourceStack.getSender() : executor; + } } diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ModernProvidedSenderMapper.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PaperSimpleSenderMapper.java similarity index 68% rename from cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ModernProvidedSenderMapper.java rename to cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PaperSimpleSenderMapper.java index 230266cd..89241d84 100644 --- a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/ModernProvidedSenderMapper.java +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PaperSimpleSenderMapper.java @@ -26,42 +26,47 @@ import io.papermc.paper.command.brigadier.CommandSourceStack; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.checkerframework.checker.nullness.qual.NonNull; import org.incendo.cloud.SenderMapper; @SuppressWarnings("UnstableApiUsage") -public final class ModernProvidedSenderMapper implements SenderMapper { +public final class PaperSimpleSenderMapper implements SenderMapper { /** - * Create a new instance of {@link ModernProvidedSenderMapper}. + * Create a new instance of {@link PaperSimpleSenderMapper}. * - * @return a new instance of {@link ModernProvidedSenderMapper} + * @return a new instance of {@link PaperSimpleSenderMapper} */ - public static @NonNull ModernProvidedSenderMapper providedSenderMapper() { - return new ModernProvidedSenderMapper(); + public static @NonNull PaperSimpleSenderMapper simpleSenderMapper() { + return new PaperSimpleSenderMapper(); } - ModernProvidedSenderMapper() { + PaperSimpleSenderMapper() { } @Override - public @NonNull Sender map(final @NonNull CommandSourceStack base) { + public @NonNull Source map(final @NonNull CommandSourceStack base) { CommandSender commandSender = base.getSender(); if (commandSender instanceof ConsoleCommandSender) { - return new ConsoleSender(base); + return new ConsoleSource(base); } if (commandSender instanceof Player) { - return new PlayerSender(base); + return new PlayerSource(base); } - return new GenericSender(base); + if (commandSender instanceof Entity) { + return new EntitySource(base); + } + + return new GenericSource(base); } @Override - public @NonNull CommandSourceStack reverse(final @NonNull Sender mapped) { - return mapped.commandSourceStack(); + public @NonNull CommandSourceStack reverse(final @NonNull Source mapped) { + return mapped.stack(); } } diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSender.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSource.java similarity index 87% rename from cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSender.java rename to cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSource.java index e7e55ef8..c2ba6e72 100644 --- a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSender.java +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/PlayerSource.java @@ -28,14 +28,14 @@ import org.checkerframework.checker.nullness.qual.NonNull; @SuppressWarnings("UnstableApiUsage") -public final class PlayerSender extends GenericSender { +public final class PlayerSource extends GenericSource { - PlayerSender(final CommandSourceStack commandSourceStack) { + PlayerSource(final CommandSourceStack commandSourceStack) { super(commandSourceStack); } @Override - public @NonNull Player sender() { - return (Player) super.sender(); + public @NonNull Player source() { + return (Player) super.source(); } } diff --git a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Sender.java b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Source.java similarity index 85% rename from cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Sender.java rename to cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Source.java index 74ee64a7..408e8f96 100644 --- a/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Sender.java +++ b/cloud-paper/src/main/java/org/incendo/cloud/paper/sender/Source.java @@ -24,23 +24,31 @@ package org.incendo.cloud.paper.sender; import io.papermc.paper.command.brigadier.CommandSourceStack; +import net.kyori.adventure.audience.Audience; import org.bukkit.command.CommandSender; import org.checkerframework.checker.nullness.qual.NonNull; @SuppressWarnings("UnstableApiUsage") -public interface Sender { +public interface Source { /** * Gets the command source stack. * * @return the command source stack */ - @NonNull CommandSourceStack commandSourceStack(); + @NonNull CommandSourceStack stack(); /** * Gets the underlying command sender from the command source stack. * * @return the sender. */ - @NonNull CommandSender sender(); + @NonNull CommandSender source(); + + /** + * Gets the audience of the source. + * + * @return the audience + */ + @NonNull Audience audience(); } diff --git a/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PaperPlugin.java b/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PaperPlugin.java index b78010fb..69bb9792 100644 --- a/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PaperPlugin.java +++ b/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PaperPlugin.java @@ -27,13 +27,13 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.framework.qual.DefaultQualifier; import org.incendo.cloud.paper.PaperCommandManager; -import org.incendo.cloud.paper.sender.Sender; +import org.incendo.cloud.paper.sender.Source; @DefaultQualifier(NonNull.class) public final class PaperPlugin extends JavaPlugin { - private final PaperCommandManager.Bootstrapped commandManager; + private final PaperCommandManager.Bootstrapped commandManager; - public PaperPlugin(final PaperCommandManager.Bootstrapped commandManager) { + public PaperPlugin(final PaperCommandManager.Bootstrapped commandManager) { this.commandManager = commandManager; } diff --git a/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PluginBootstrap.java b/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PluginBootstrap.java index def123a6..e09a05c6 100644 --- a/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PluginBootstrap.java +++ b/examples/example-paper/src/main/java/org/incendo/cloud/examples/paper/PluginBootstrap.java @@ -33,10 +33,10 @@ import org.checkerframework.framework.qual.DefaultQualifier; import org.incendo.cloud.execution.ExecutionCoordinator; import org.incendo.cloud.paper.PaperCommandManager; -import org.incendo.cloud.paper.sender.ConsoleSender; -import org.incendo.cloud.paper.sender.ModernProvidedSenderMapper; -import org.incendo.cloud.paper.sender.PlayerSender; -import org.incendo.cloud.paper.sender.Sender; +import org.incendo.cloud.paper.sender.ConsoleSource; +import org.incendo.cloud.paper.sender.PaperSimpleSenderMapper; +import org.incendo.cloud.paper.sender.PlayerSource; +import org.incendo.cloud.paper.sender.Source; import org.incendo.cloud.setting.ManagerSetting; import static org.incendo.cloud.parser.standard.StringParser.stringParser; @@ -44,12 +44,12 @@ @SuppressWarnings("UnstableApiUsage") @DefaultQualifier(NonNull.class) public final class PluginBootstrap implements io.papermc.paper.plugin.bootstrap.PluginBootstrap { - private PaperCommandManager.@MonotonicNonNull Bootstrapped commandManager; + private PaperCommandManager.@MonotonicNonNull Bootstrapped commandManager; @Override public void bootstrap(final BootstrapContext context) { - final PaperCommandManager.Bootstrapped mgr = - PaperCommandManager.builder(ModernProvidedSenderMapper.providedSenderMapper()) + final PaperCommandManager.Bootstrapped mgr = + PaperCommandManager.builder(PaperSimpleSenderMapper.simpleSenderMapper()) .executionCoordinator(ExecutionCoordinator.simpleCoordinator()) .buildBootstrapped(context); @@ -63,7 +63,7 @@ public void bootstrap(final BootstrapContext context) { final String name = ctx.get("name"); mgr.command( mgr.commandBuilder(name).handler(ctx1 -> { - ctx1.sender().sender().sendMessage("HI"); + ctx1.sender().source().sendMessage("HI"); }) ); }) @@ -78,17 +78,17 @@ public void bootstrap(final BootstrapContext context) { ); mgr.command( mgr.commandBuilder("player_command") - .senderType(PlayerSender.class) + .senderType(PlayerSource.class) .handler(ctx -> { - final Player player = ctx.sender().sender(); + final Player player = ctx.sender().source(); player.sendMessage("hello player!"); }) ); mgr.command( mgr.commandBuilder("console_command") - .senderType(ConsoleSender.class) + .senderType(ConsoleSource.class) .handler(ctx -> { - final ConsoleCommandSender console = ctx.sender().sender(); + final ConsoleCommandSender console = ctx.sender().source(); console.sendMessage("hello console!"); }) );