(update) add: permissions to use worldedit in playground

This commit is contained in:
iceBear67 committed 2024-09-18 09:56:47 +08:00
1 parent 9074d17bba
commit ca7ef6f59b
3 files changed
+38

No files matched your search

@@ -33,6 +33,7 @@ public class ProjectileEntityMixin {
/** /**
* @reason Implement the logic correctly. * @reason Implement the logic correctly.
* @author icybear
*/ */
@Overwrite @Overwrite
public @Nullable Entity getOwner() { public @Nullable Entity getOwner() {
@@ -13,10 +13,13 @@ import io.ib67.sfcraft.room.RoomTeleporter;
import io.ib67.sfcraft.room.create.CreativeSpaceFactory; import io.ib67.sfcraft.room.create.CreativeSpaceFactory;
import io.ib67.sfcraft.room.create.CreativeSpaceRoom; import io.ib67.sfcraft.room.create.CreativeSpaceRoom;
import io.ib67.sfcraft.util.SFConsts; import io.ib67.sfcraft.util.SFConsts;
import me.lucko.fabric.api.permissions.v0.PermissionCheckEvent;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.util.TriState;
import net.minecraft.command.CommandRegistryAccess; import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.command.CommandSource;
import net.minecraft.network.packet.s2c.play.TeamS2CPacket; import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.scoreboard.Team; import net.minecraft.scoreboard.Team;
@@ -28,8 +31,15 @@ import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Colors; import net.minecraft.util.Colors;
import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.ChunkStatus;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public class CreativeRoomModule extends ServerModule { public class CreativeRoomModule extends ServerModule {
private static final Set<String> ALLOWED_VANILLA_COMMANDS = Set.of(
"minecraft.command.weather",
"minecraft.command.time",
"minecraft.command.gamerule");
@Inject @Inject
private RoomRegistry roomRegistry; private RoomRegistry roomRegistry;
@Inject @Inject
@@ -47,12 +57,38 @@ public class CreativeRoomModule extends ServerModule {
.register(this::registerCommand); .register(this::registerCommand);
ServerPlayConnectionEvents.JOIN.register(this::onJoin); ServerPlayConnectionEvents.JOIN.register(this::onJoin);
ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect); ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect);
PermissionCheckEvent.EVENT.register(this::onWorldEdit);
PermissionCheckEvent.EVENT.register(this::onVanillaCommands);
SFCallbacks.PLAYER_AFK.register(this::onAFK); SFCallbacks.PLAYER_AFK.register(this::onAFK);
room = new CreativeSpaceRoom(); room = new CreativeSpaceRoom();
roomRegistry.registerRoomType(CreativeSpaceRoom.class, CreativeSpaceRoom.WORLD, new CreativeSpaceFactory(room)); roomRegistry.registerRoomType(CreativeSpaceRoom.class, CreativeSpaceRoom.WORLD, new CreativeSpaceFactory(room));
roomRegistry.createRoomOf(CreativeSpaceRoom.class, CreativeSpaceRoom.IDENTIFIER, null, (String) null); roomRegistry.createRoomOf(CreativeSpaceRoom.class, CreativeSpaceRoom.IDENTIFIER, null, (String) null);
roomModule.enqueuePregen(CreativeSpaceRoom.WORLD, CreativeSpaceRoom.SPAWN_POS); roomModule.enqueuePregen(CreativeSpaceRoom.WORLD, CreativeSpaceRoom.SPAWN_POS);
} }
//todo: support for vanilla permissions
private @NotNull TriState onVanillaCommands(@NotNull CommandSource commandSource, @NotNull String s) {
if (commandSource instanceof ServerCommandSource source && source.getPlayer() != null) {
var p = source.getPlayer();
if (p.getServerWorld().getRegistryKey().equals(CreativeSpaceRoom.WORLD)) {
if (ALLOWED_VANILLA_COMMANDS.contains(s)) {
return TriState.TRUE;
}
}
}
return TriState.DEFAULT;
}
private @NotNull TriState onWorldEdit(@NotNull CommandSource commandSource, @NotNull String s) {
if (commandSource instanceof ServerCommandSource source && source.getPlayer() != null) {
var p = source.getPlayer();
if (p.getServerWorld().getRegistryKey().equals(CreativeSpaceRoom.WORLD)) {
if (s.startsWith("worldedit") && SFConsts.WORLDEDIT_AT_PLAYGROUND.hasPermission(p)) {
return TriState.TRUE;
}
}
}
return TriState.DEFAULT;
}
private void onAFK(ServerPlayerEntity player, boolean b) { private void onAFK(ServerPlayerEntity player, boolean b) {
if (!b) player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true)); if (!b) player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
@@ -14,6 +14,7 @@ public class SFConsts {
public static final Permission<PlayerEntity> USE_BROADCAST_LOCATION = ofSFCPermission("chat.xyz", true); public static final Permission<PlayerEntity> USE_BROADCAST_LOCATION = ofSFCPermission("chat.xyz", true);
public static final Permission<PlayerEntity> COMMAND_BACK = ofSFCPermission("command.back", true); public static final Permission<PlayerEntity> COMMAND_BACK = ofSFCPermission("command.back", true);
public static final Permission<PlayerEntity> UNLIMITED_COMMAND_BACK = ofSFCPermission("command.back.unlimited", false); public static final Permission<PlayerEntity> UNLIMITED_COMMAND_BACK = ofSFCPermission("command.back.unlimited", false);
public static final Permission<PlayerEntity> WORLDEDIT_AT_PLAYGROUND = ofSFCPermission("worldedit", true);
public static final Permission<PlayerEntity> COMMAND_ADDWL = ofSFCPermission("command.addwl", false); public static final Permission<PlayerEntity> COMMAND_ADDWL = ofSFCPermission("command.addwl", false);
public static final Permission<PlayerEntity> COMMAND_UNBLOCKSERVER = ofSFCPermission("command.unblockserver", false); public static final Permission<PlayerEntity> COMMAND_UNBLOCKSERVER = ofSFCPermission("command.unblockserver", false);