(update) add: permissions to use worldedit in playground
This commit is contained in:
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);
|
||||||
|
|||||||
Reference in new issue
Block a user