From 85045e1e4a15e0a5657d189e83dd202a2c37f2b0 Mon Sep 17 00:00:00 2001 From: Yuuta Liang Date: Wed, 13 Jul 2022 11:16:27 -0700 Subject: First Commit Signed-off-by: Trumeet --- src/main/java/moe/ymc/acron/cmd/CmdOut.java | 53 ++++++++++++++++++++++ src/main/java/moe/ymc/acron/cmd/CmdQueue.java | 17 +++++++ .../java/moe/ymc/acron/cmd/CmdResConsumer.java | 33 ++++++++++++++ src/main/java/moe/ymc/acron/cmd/CmdSrc.java | 34 ++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 src/main/java/moe/ymc/acron/cmd/CmdOut.java create mode 100644 src/main/java/moe/ymc/acron/cmd/CmdQueue.java create mode 100644 src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java create mode 100644 src/main/java/moe/ymc/acron/cmd/CmdSrc.java (limited to 'src/main/java/moe/ymc/acron/cmd') diff --git a/src/main/java/moe/ymc/acron/cmd/CmdOut.java b/src/main/java/moe/ymc/acron/cmd/CmdOut.java new file mode 100644 index 0000000..717bd0c --- /dev/null +++ b/src/main/java/moe/ymc/acron/cmd/CmdOut.java @@ -0,0 +1,53 @@ +package moe.ymc.acron.cmd; + +import io.netty.channel.Channel; +import moe.ymc.acron.s2c.EventCmdOut; +import moe.ymc.acron.serialization.Serializer; +import net.minecraft.server.command.CommandOutput; +import net.minecraft.text.Text; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class CmdOut implements CommandOutput { + private static final Logger LOGGER = LogManager.getLogger(); + + private final @NotNull Channel channel; + private final int id; + private final boolean display; + + public CmdOut(@NotNull Channel channel, + int id, + boolean display) { + this.channel = channel; + this.id = id; + this.display = display; + } + + @Override + public void sendSystemMessage(Text message, UUID sender) { + LOGGER.debug("sendSystemMessage[{}]: {}", + id, + message.getString()); + channel.writeAndFlush( + Serializer.serialize(new EventCmdOut(id, sender, message.getString())) + ); + } + + @Override + public boolean shouldReceiveFeedback() { + return true; + } + + @Override + public boolean shouldTrackOutput() { + return true; + } + + @Override + public boolean shouldBroadcastConsoleToOps() { + return display; + } +} diff --git a/src/main/java/moe/ymc/acron/cmd/CmdQueue.java b/src/main/java/moe/ymc/acron/cmd/CmdQueue.java new file mode 100644 index 0000000..3c49143 --- /dev/null +++ b/src/main/java/moe/ymc/acron/cmd/CmdQueue.java @@ -0,0 +1,17 @@ +package moe.ymc.acron.cmd; + +import io.netty.channel.Channel; +import moe.ymc.acron.MinecraftServerHolder; +import moe.ymc.acron.net.ClientConfiguration; +import org.jetbrains.annotations.NotNull; + +public class CmdQueue { + public static void enqueue(int id, + boolean display, + @NotNull final Channel channel, + @NotNull final ClientConfiguration configuration, + @NotNull final String command) { + MinecraftServerHolder.getServer().enqueueCommand(command, + new CmdSrc(channel, id, display, configuration, MinecraftServerHolder.getServer())); + } +} diff --git a/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java b/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java new file mode 100644 index 0000000..13a65f8 --- /dev/null +++ b/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java @@ -0,0 +1,33 @@ +package moe.ymc.acron.cmd; + +import com.mojang.brigadier.ResultConsumer; +import com.mojang.brigadier.context.CommandContext; +import io.netty.channel.Channel; +import moe.ymc.acron.s2c.EventCmdRes; +import moe.ymc.acron.serialization.Serializer; +import net.minecraft.server.command.ServerCommandSource; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; + +public class CmdResConsumer implements ResultConsumer { + private static final Logger LOGGER = LogManager.getLogger(); + + private final @NotNull Channel channel; + private final int id; + + public CmdResConsumer(@NotNull Channel channel, + int id) { + this.channel = channel; + this.id = id; + } + + @Override + public void onCommandComplete(CommandContext context, boolean success, int result) { + LOGGER.debug("onCommandComplete[{}]: {} {}", + id, + success, + result); + channel.writeAndFlush(Serializer.serialize(new EventCmdRes(id, success, result))); + } +} diff --git a/src/main/java/moe/ymc/acron/cmd/CmdSrc.java b/src/main/java/moe/ymc/acron/cmd/CmdSrc.java new file mode 100644 index 0000000..983b4ed --- /dev/null +++ b/src/main/java/moe/ymc/acron/cmd/CmdSrc.java @@ -0,0 +1,34 @@ +package moe.ymc.acron.cmd; + +import io.netty.channel.Channel; +import moe.ymc.acron.net.ClientConfiguration; +import net.minecraft.command.argument.EntityAnchorArgumentType; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.LiteralText; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; + +class CmdSrc extends ServerCommandSource { + private static final Logger LOGGER = LogManager.getLogger(); + + public CmdSrc(@NotNull Channel channel, + int id, + boolean display, + @NotNull ClientConfiguration configuration, + @NotNull MinecraftServer server) { + super(new CmdOut(channel, id, display), + configuration.pos(), + configuration.rot(), + configuration.world(), + 4, + configuration.name(), + new LiteralText(configuration.name()), + server, + null, + false, + new CmdResConsumer(channel, id), + EntityAnchorArgumentType.EntityAnchor.FEET); + } +} -- cgit v1.2.3