From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Sun, 13 Aug 2023 17:22:08 +0800 Subject: [PATCH] Leaves tick command diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index fccb76a8dfa6a0c5d704a0a8f7392beedea320c9..781a0fc1988f950ca85c05614fec0a8ecabaeaf7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -184,6 +184,8 @@ import org.bukkit.craftbukkit.Main; import org.bukkit.event.server.ServerLoadEvent; // CraftBukkit end +import top.leavesmc.leaves.util.TickStatus; // Leaves - tick command + public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, CommandSource, AutoCloseable { private static MinecraftServer SERVER; // Paper @@ -1075,6 +1077,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, LeavesSubcommand> commands = new HashMap<>(); commands.put(Set.of("update"), new UpdateCommand()); commands.put(Set.of("peaceful"), new PeacefulModeSwitchCommand()); + commands.put(Set.of("tick"), new TickCommand()); return commands.entrySet().stream() .flatMap(entry -> entry.getKey().stream().map(s -> Map.entry(s, entry.getValue()))) diff --git a/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java b/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..162c3c005130bfa07c7b924015356430b1e1ac2a --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java @@ -0,0 +1,82 @@ +package top.leavesmc.leaves.command.subcommands; + +import io.papermc.paper.command.CommandUtil; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.JoinConfiguration; +import net.kyori.adventure.text.format.NamedTextColor; +import net.minecraft.server.MinecraftServer; +import org.bukkit.command.CommandSender; +import top.leavesmc.leaves.LeavesConfig; +import top.leavesmc.leaves.command.LeavesSubcommand; +import top.leavesmc.leaves.util.TickStatus; + +import java.util.Collections; +import java.util.List; + +public class TickCommand implements LeavesSubcommand { + + @Override + public boolean execute(CommandSender sender, String subCommand, String[] args) { + if (!LeavesConfig.tickCommand) { + return true; + } + + if (args.length < 1) { + sender.sendMessage(Component.join(JoinConfiguration.noSeparators(), + Component.text("Tick Status: ", NamedTextColor.GRAY), + this.getStatus().getMessage() + )); + return true; + } + + TickStatus oldStatus = this.getStatus(); + + switch (args[0]) { + case "warp" -> { + MinecraftServer.tickStatus = TickStatus.WARP; + sender.sendMessage(this.getStatusChangeMessage(oldStatus)); + } + + case "freeze" -> { + MinecraftServer.tickStatus = TickStatus.FREEZE; + sender.sendMessage(this.getStatusChangeMessage(oldStatus)); + } + + case "normal" -> { + MinecraftServer.tickStatus = TickStatus.NORMAL; + sender.sendMessage(this.getStatusChangeMessage(oldStatus)); + } + } + return true; + } + + public Component getStatusChangeMessage(TickStatus old) { + return Component.join(JoinConfiguration.noSeparators(), + Component.text("Tick Status: ", NamedTextColor.GRAY), + old.getMessage(), + Component.text(" -> ", NamedTextColor.GRAY), + this.getStatus().getMessage() + ); + } + + public TickStatus getStatus() { + return MinecraftServer.tickStatus; + } + + @Override + public List tabComplete(final CommandSender sender, final String subCommand, final String[] args) { + if (!LeavesConfig.tickCommand) { + return Collections.emptyList(); + } + + if (args.length == 1) { + return CommandUtil.getListMatchingLast(sender, args, "normal", "warp", "freeze"); + } + return Collections.emptyList(); + } + + @Override + public boolean tabCompletes() { + return LeavesConfig.tickCommand; + } +} diff --git a/src/main/java/top/leavesmc/leaves/util/TickStatus.java b/src/main/java/top/leavesmc/leaves/util/TickStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..460307c6d477704417dbfe38364afbc5efe8c767 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/util/TickStatus.java @@ -0,0 +1,20 @@ +package top.leavesmc.leaves.util; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + +public enum TickStatus { + NORMAL(Component.text("normal", NamedTextColor.GRAY)), + WARP(Component.text("warp", NamedTextColor.GREEN)), + FREEZE(Component.text("freeze", NamedTextColor.AQUA)); + + private final Component message; + + private TickStatus(Component message) { + this.message = message; + } + + public Component getMessage() { + return message; + } +}