81 lines
3.2 KiB
Java
81 lines
3.2 KiB
Java
package net.minecraft.server.commands;
|
|
|
|
import com.mojang.brigadier.CommandDispatcher;
|
|
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
|
import net.minecraft.commands.CommandSourceStack;
|
|
import net.minecraft.commands.Commands;
|
|
import net.minecraft.commands.arguments.TimeArgument;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
|
|
public class TimeCommand {
|
|
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
|
dispatcher.register(
|
|
Commands.literal("time")
|
|
.requires(commandSourceStack -> commandSourceStack.hasPermission(2))
|
|
.then(
|
|
Commands.literal("set")
|
|
.then(Commands.literal("day").executes(commandContext -> setTime(commandContext.getSource(), 1000)))
|
|
.then(Commands.literal("noon").executes(commandContext -> setTime(commandContext.getSource(), 6000)))
|
|
.then(Commands.literal("night").executes(commandContext -> setTime(commandContext.getSource(), 13000)))
|
|
.then(Commands.literal("midnight").executes(commandContext -> setTime(commandContext.getSource(), 18000)))
|
|
.then(
|
|
Commands.argument("time", TimeArgument.time())
|
|
.executes(commandContext -> setTime(commandContext.getSource(), IntegerArgumentType.getInteger(commandContext, "time")))
|
|
)
|
|
)
|
|
.then(
|
|
Commands.literal("add")
|
|
.then(
|
|
Commands.argument("time", TimeArgument.time())
|
|
.executes(commandContext -> addTime(commandContext.getSource(), IntegerArgumentType.getInteger(commandContext, "time")))
|
|
)
|
|
)
|
|
.then(
|
|
Commands.literal("query")
|
|
.then(Commands.literal("daytime").executes(commandContext -> queryTime(commandContext.getSource(), getDayTime(commandContext.getSource().getLevel()))))
|
|
.then(
|
|
Commands.literal("gametime")
|
|
.executes(commandContext -> queryTime(commandContext.getSource(), (int)(commandContext.getSource().getLevel().getGameTime() % 2147483647L)))
|
|
)
|
|
.then(
|
|
Commands.literal("day")
|
|
.executes(commandContext -> queryTime(commandContext.getSource(), (int)(commandContext.getSource().getLevel().getDayTime() / 24000L % 2147483647L)))
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Returns the day time (time wrapped within a day)
|
|
*/
|
|
private static int getDayTime(ServerLevel level) {
|
|
return (int)(level.getDayTime() % 24000L);
|
|
}
|
|
|
|
private static int queryTime(CommandSourceStack source, int time) {
|
|
source.sendSuccess(() -> Component.translatable("commands.time.query", time), false);
|
|
return time;
|
|
}
|
|
|
|
public static int setTime(CommandSourceStack source, int time) {
|
|
for (ServerLevel serverLevel : source.getServer().getAllLevels()) {
|
|
serverLevel.setDayTime(time);
|
|
}
|
|
|
|
source.getServer().forceTimeSynchronization();
|
|
source.sendSuccess(() -> Component.translatable("commands.time.set", time), true);
|
|
return getDayTime(source.getLevel());
|
|
}
|
|
|
|
public static int addTime(CommandSourceStack source, int amount) {
|
|
for (ServerLevel serverLevel : source.getServer().getAllLevels()) {
|
|
serverLevel.setDayTime(serverLevel.getDayTime() + amount);
|
|
}
|
|
|
|
source.getServer().forceTimeSynchronization();
|
|
int i = getDayTime(source.getLevel());
|
|
source.sendSuccess(() -> Component.translatable("commands.time.set", i), true);
|
|
return i;
|
|
}
|
|
}
|