Add /gm command for playground

This commit is contained in:
iceBear67 committed 2025-01-07 16:43:29 +08:00
1 parent 4b2d57a0ee
commit 124241182c
2 files changed
+26 -1

No files matched your search

@@ -1,6 +1,7 @@
package io.ib67.sfcraft.module.room;
import com.google.inject.Inject;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
@@ -22,6 +23,7 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.util.TriState;
import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.command.CommandSource;
import net.minecraft.command.argument.GameModeArgumentType;
import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
import net.minecraft.scoreboard.Team;
import net.minecraft.server.MinecraftServer;
@@ -103,10 +105,32 @@ public class CreativeRoomModule extends ServerModule {
private void registerCommand(CommandDispatcher<ServerCommandSource> dispatcher,
CommandRegistryAccess registry, CommandManager.RegistrationEnvironment env) {
dispatcher.register(
LiteralArgumentBuilder.<ServerCommandSource>literal("playground")
LiteralArgumentBuilder.<ServerCommandSource>literal("playgrd")
.requires(it -> it.isExecutedByPlayer() && SFConsts.COMMAND_PLAYGROUND.hasPermission(it.getPlayer()))
.executes(this::gotoPlayground)
);
dispatcher.register(
CommandManager.literal("gm")
.then(CommandManager.argument("mode", GameModeArgumentType.gameMode())
.requires(it -> it.isExecutedByPlayer() && SFConsts.COMMAND_PLAYGROUND_GAMEMODE.hasPermission(it.getPlayer()))
.executes(this::onGameMode)
)
);
}
private int onGameMode(CommandContext<ServerCommandSource> ctx) {
var src = ctx.getSource();
if (src instanceof ServerCommandSource source && source.getPlayer() != null) {
var p = source.getPlayer();
var mode = ctx.getArgument("mode", GameMode.class);
if (p.getServerWorld().getRegistryKey().equals(CreativeSpaceRoom.WORLD)) {
p.changeGameMode(mode);
p.sendMessage(Text.of("Your gamemode has been changed to "+mode.asString()));
}else{
p.sendMessage(Text.of("You can only use this in playground!"));
}
}
return Command.SINGLE_SUCCESS;
}
private int gotoPlayground(CommandContext<ServerCommandSource> serverCommandSourceCommandContext) {
@@ -23,6 +23,7 @@ public class SFConsts {
public static final Permission<PlayerEntity> COMMAND_LISTPERM = ofSFCPermission("command.listperm", false);
public static final Permission<PlayerEntity> COMMAND_LISTGEO = ofSFCPermission("command.listgeo", false);
public static final Permission<PlayerEntity> COMMAND_PLAYGROUND = ofSFCPermission("command.playground", true);
public static final Permission<PlayerEntity> COMMAND_PLAYGROUND_GAMEMODE = ofSFCPermission("command.playground.gamemode", true);
public static final Permission<PlayerEntity> COMMAND_RECO = ofSFCPermission("command.reco", true);
public static Permission<PlayerEntity> ofSFCPermission(String key, boolean byDefault) {