add fabric permission api support. closes #35
This commit is contained in:
parent
a8c8d7508b
commit
053d8ed500
@ -12,6 +12,10 @@ group = project.maven_group
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven {
|
||||
name = 'Fabric-Permission-API'
|
||||
url 'https://oss.sonatype.org/content/repositories/snapshots'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@ -26,6 +30,7 @@ dependencies {
|
||||
compile group: 'org.yaml', name: 'snakeyaml', version: '1.25'
|
||||
include group: 'org.yaml', name: 'snakeyaml', version: '1.25'
|
||||
|
||||
modImplementation 'me.lucko:fabric-permissions-api:0.1-SNAPSHOT'
|
||||
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
|
||||
// You may need to force-disable transitiveness on them.
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
|
||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
|
||||
import net.fabricmc.fabric.api.event.player.UseEntityCallback;
|
||||
import net.fabricmc.fabric.api.event.player.UseItemCallback;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@ -23,6 +24,8 @@ public class Flan implements ModInitializer {
|
||||
|
||||
public static final Logger logger = LogManager.getLogger("flan");
|
||||
|
||||
public static boolean permissionAPI;
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
PlayerBlockBreakEvents.BEFORE.register(BlockInteractEvents::breakBlocks);
|
||||
@ -35,6 +38,8 @@ public class Flan implements ModInitializer {
|
||||
ServerLifecycleEvents.SERVER_STARTING.register(this::lockRegistry);
|
||||
|
||||
CommandRegistrationCallback.EVENT.register(CommandClaim::register);
|
||||
|
||||
permissionAPI = FabricLoader.getInstance().isModLoaded("fabric-permissions-api-v0");
|
||||
}
|
||||
|
||||
public void lockRegistry(MinecraftServer server) {
|
||||
|
@ -25,9 +25,10 @@ public interface ClaimPermissionEvent {
|
||||
|
||||
/**
|
||||
* Callback for when permissions are checked
|
||||
* @param player The corresponding player. Can be null if the check is e.g. caused by tnt explosions
|
||||
*
|
||||
* @param player The corresponding player. Can be null if the check is e.g. caused by tnt explosions
|
||||
* @param permission The permission to check
|
||||
* @param pos The block pos where the action is occuring
|
||||
* @param pos The block pos where the action is occuring
|
||||
* @return ActionResult#PASS to do nothing. ActionResult#FAIL to prevent the action. Else to allow the action
|
||||
*/
|
||||
ActionResult check(@Nullable ServerPlayerEntity player, ClaimPermission permission, BlockPos pos);
|
||||
|
@ -47,28 +47,28 @@ public class CommandClaim {
|
||||
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher, boolean dedicated) {
|
||||
dispatcher.register(CommandManager.literal("flan")
|
||||
.then(CommandManager.literal("reload").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).executes(CommandClaim::reloadConfig))
|
||||
.then(CommandManager.literal("addClaim").then(CommandManager.argument("from", BlockPosArgumentType.blockPos()).then(CommandManager.argument("to", BlockPosArgumentType.blockPos()).executes(CommandClaim::addClaim))))
|
||||
.then(CommandManager.literal("menu").executes(CommandClaim::openMenu))
|
||||
.then(CommandManager.literal("claimInfo").executes(CommandClaim::claimInfo))
|
||||
.then(CommandManager.literal("transferClaim").then(CommandManager.argument("player", GameProfileArgumentType.gameProfile()).executes(CommandClaim::transferClaim)))
|
||||
.then(CommandManager.literal("delete").executes(CommandClaim::deleteClaim))
|
||||
.then(CommandManager.literal("deleteAll").executes(CommandClaim::deleteAllClaim))
|
||||
.then(CommandManager.literal("deleteSubClaim").executes(CommandClaim::deleteSubClaim))
|
||||
.then(CommandManager.literal("deleteAllSubClaims").executes(CommandClaim::deleteAllSubClaim))
|
||||
.then(CommandManager.literal("list").executes(CommandClaim::listClaims).then(CommandManager.argument("player", GameProfileArgumentType.gameProfile()).requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel))
|
||||
.then(CommandManager.literal("reload").requires(src -> CommandPermission.perm(src, CommandPermission.cmdReload, true)).executes(CommandClaim::reloadConfig))
|
||||
.then(CommandManager.literal("addClaim").requires(src -> CommandPermission.perm(src, CommandPermission.claimCreate)).then(CommandManager.argument("from", BlockPosArgumentType.blockPos()).then(CommandManager.argument("to", BlockPosArgumentType.blockPos()).executes(CommandClaim::addClaim))))
|
||||
.then(CommandManager.literal("menu").requires(src -> CommandPermission.perm(src, CommandPermission.cmdMenu)).executes(CommandClaim::openMenu))
|
||||
.then(CommandManager.literal("claimInfo").requires(src -> CommandPermission.perm(src, CommandPermission.cmdInfo)).executes(CommandClaim::claimInfo))
|
||||
.then(CommandManager.literal("transferClaim").requires(src -> CommandPermission.perm(src, CommandPermission.cmdTransfer)).then(CommandManager.argument("player", GameProfileArgumentType.gameProfile()).executes(CommandClaim::transferClaim)))
|
||||
.then(CommandManager.literal("delete").requires(src -> CommandPermission.perm(src, CommandPermission.cmdTransfer)).executes(CommandClaim::deleteClaim))
|
||||
.then(CommandManager.literal("deleteAll").requires(src -> CommandPermission.perm(src, CommandPermission.cmdTransfer)).executes(CommandClaim::deleteAllClaim))
|
||||
.then(CommandManager.literal("deleteSubClaim").requires(src -> CommandPermission.perm(src, CommandPermission.cmdTransfer)).executes(CommandClaim::deleteSubClaim))
|
||||
.then(CommandManager.literal("deleteAllSubClaims").requires(src -> CommandPermission.perm(src, CommandPermission.cmdTransfer)).executes(CommandClaim::deleteAllSubClaim))
|
||||
.then(CommandManager.literal("list").requires(src -> CommandPermission.perm(src, CommandPermission.cmdList)).executes(CommandClaim::listClaims).then(CommandManager.argument("player", GameProfileArgumentType.gameProfile()).requires(src -> CommandPermission.perm(src, CommandPermission.cmdListAll, true))
|
||||
.executes(cmd -> listClaims(cmd, GameProfileArgumentType.getProfileArgument(cmd, "player")))))
|
||||
.then(CommandManager.literal("switchMode").executes(CommandClaim::switchClaimMode))
|
||||
.then(CommandManager.literal("adminMode").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).executes(CommandClaim::switchAdminMode))
|
||||
.then(CommandManager.literal("readGriefPrevention").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).executes(CommandClaim::readGriefPreventionData))
|
||||
.then(CommandManager.literal("setAdminClaim").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).then(CommandManager.argument("toggle", BoolArgumentType.bool()).executes(CommandClaim::toggleAdminClaim)))
|
||||
.then(CommandManager.literal("listAdminClaims").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).executes(CommandClaim::listAdminClaims))
|
||||
.then(CommandManager.literal("adminDelete").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).executes(CommandClaim::adminDelete)
|
||||
.then(CommandManager.literal("switchMode").requires(src -> CommandPermission.perm(src, CommandPermission.cmdClaimMode)).executes(CommandClaim::switchClaimMode))
|
||||
.then(CommandManager.literal("adminMode").requires(src -> CommandPermission.perm(src, CommandPermission.cmdAdminMode, true)).executes(CommandClaim::switchAdminMode))
|
||||
.then(CommandManager.literal("readGriefPrevention").requires(src -> CommandPermission.perm(src, CommandPermission.cmdGriefPrevention, true)).executes(CommandClaim::readGriefPreventionData))
|
||||
.then(CommandManager.literal("setAdminClaim").requires(src -> CommandPermission.perm(src, CommandPermission.cmdAdminSet, true)).then(CommandManager.argument("toggle", BoolArgumentType.bool()).executes(CommandClaim::toggleAdminClaim)))
|
||||
.then(CommandManager.literal("listAdminClaims").requires(src -> CommandPermission.perm(src, CommandPermission.cmdAdminList, true)).executes(CommandClaim::listAdminClaims))
|
||||
.then(CommandManager.literal("adminDelete").requires(src -> CommandPermission.perm(src, CommandPermission.cmdAdminDelete, true)).executes(CommandClaim::adminDelete)
|
||||
.then(CommandManager.literal("all").then(CommandManager.argument("players", GameProfileArgumentType.gameProfile())
|
||||
.executes(CommandClaim::adminDeleteAll))))
|
||||
.then(CommandManager.literal("giveClaimBlocks").requires(src -> src.hasPermissionLevel(ConfigHandler.config.permissionLevel)).then(CommandManager.argument("players", GameProfileArgumentType.gameProfile())
|
||||
.then(CommandManager.literal("giveClaimBlocks").requires(src -> CommandPermission.perm(src, CommandPermission.cmdAdminGive, true)).then(CommandManager.argument("players", GameProfileArgumentType.gameProfile())
|
||||
.then(CommandManager.argument("amount", IntegerArgumentType.integer()).executes(CommandClaim::giveClaimBlocks))))
|
||||
.then(CommandManager.literal("group")
|
||||
.then(CommandManager.literal("group").requires(src -> CommandPermission.perm(src, CommandPermission.cmdGroup))
|
||||
.then(CommandManager.literal("add").then(CommandManager.argument("group", StringArgumentType.string()).executes(CommandClaim::addGroup)))
|
||||
.then(CommandManager.literal("remove").then(CommandManager.argument("group", StringArgumentType.string())
|
||||
.suggests(CommandClaim::groupSuggestion).executes(CommandClaim::removeGroup)))
|
||||
@ -88,7 +88,7 @@ public class CommandClaim {
|
||||
}
|
||||
return CommandSource.suggestMatching(list, build);
|
||||
}).executes(CommandClaim::removePlayer))))))
|
||||
.then(CommandManager.literal("permission")
|
||||
.then(CommandManager.literal("permission").requires(src -> CommandPermission.perm(src, CommandPermission.cmdPermission))
|
||||
.then(CommandManager.literal("global").then(CommandManager.argument("permission", StringArgumentType.word()).suggests((ctx, b) -> permSuggestions(ctx, b, false))
|
||||
.then(CommandManager.argument("toggle", StringArgumentType.word()).suggests((ctx, b) -> CommandSource.suggestMatching(new String[]{"default", "true", "false"}, b)).executes(CommandClaim::editGlobalPerm))))
|
||||
.then(CommandManager.literal("group").then(CommandManager.argument("group", StringArgumentType.string()).suggests(CommandClaim::groupSuggestion)
|
||||
|
@ -0,0 +1,57 @@
|
||||
package com.flemmli97.flan.commands;
|
||||
|
||||
import com.flemmli97.flan.Flan;
|
||||
import com.flemmli97.flan.config.ConfigHandler;
|
||||
import me.lucko.fabric.api.permissions.v0.Permissions;
|
||||
import net.minecraft.server.command.CommandSource;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
|
||||
public class CommandPermission {
|
||||
|
||||
public static final String cmdReload = "flan.command.reload";
|
||||
public static final String cmdGriefPrevention = "flan.command.read.griefprevention";
|
||||
|
||||
public static final String claimCreate = "flan.claim.create";
|
||||
|
||||
public static final String cmdMenu = "flan.command.menu";
|
||||
public static final String cmdInfo = "flan.command.info";
|
||||
public static final String cmdTransfer = "flan.command.transfer";
|
||||
|
||||
public static final String cmdDelete = "flan.command.delete";
|
||||
public static final String cmdDeleteAll = "flan.command.delete.all";
|
||||
public static final String cmdDeleteSub = "flan.command.delete.sub";
|
||||
public static final String cmdDeleteSubAll = "flan.command.delete.sub.all";
|
||||
|
||||
public static final String cmdList = "flan.command.list";
|
||||
public static final String cmdListAll = "flan.command.list.all";
|
||||
|
||||
public static final String cmdClaimMode = "flan.command.claim.mode";
|
||||
public static final String cmdAdminMode = "flan.command.admin.mode";
|
||||
public static final String cmdAdminSet = "flan.command.admin.claim";
|
||||
public static final String cmdAdminList = "flan.command.admin.list";
|
||||
public static final String cmdAdminDelete = "flan.command.admin.delete";
|
||||
public static final String cmdAdminGive = "flan.command.admin.give";
|
||||
|
||||
public static final String cmdGroup = "flan.command.group";
|
||||
public static final String cmdPermission = "flan.command.permission";
|
||||
|
||||
public static boolean perm(CommandSource src, String perm) {
|
||||
return perm(src, perm, false);
|
||||
}
|
||||
|
||||
public static boolean perm(CommandSource src, String perm, boolean adminCmd) {
|
||||
if (!Flan.permissionAPI)
|
||||
return !adminCmd || src.hasPermissionLevel(ConfigHandler.config.permissionLevel);
|
||||
if (adminCmd)
|
||||
return Permissions.check(src, perm, ConfigHandler.config.permissionLevel);
|
||||
return Permissions.check(src, perm, true);
|
||||
}
|
||||
|
||||
public static boolean perm(ServerPlayerEntity src, String perm, boolean adminCmd) {
|
||||
if (!Flan.permissionAPI)
|
||||
return !adminCmd || src.hasPermissionLevel(ConfigHandler.config.permissionLevel);
|
||||
if (adminCmd)
|
||||
return Permissions.check(src, perm, ConfigHandler.config.permissionLevel);
|
||||
return Permissions.check(src, perm, true);
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ import com.flemmli97.flan.claim.Claim;
|
||||
import com.flemmli97.flan.claim.ClaimStorage;
|
||||
import com.flemmli97.flan.claim.IPermissionContainer;
|
||||
import com.flemmli97.flan.claim.PermHelper;
|
||||
import com.flemmli97.flan.commands.CommandPermission;
|
||||
import com.flemmli97.flan.config.ConfigHandler;
|
||||
import com.flemmli97.flan.player.EnumDisplayType;
|
||||
import com.flemmli97.flan.player.EnumEditMode;
|
||||
@ -118,6 +119,10 @@ public class ItemInteractEvents {
|
||||
}
|
||||
|
||||
public static void claimLandHandling(ServerPlayerEntity player, BlockPos target) {
|
||||
if (!CommandPermission.perm(player, CommandPermission.claimCreate, false)) {
|
||||
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermission, Formatting.DARK_RED), true);
|
||||
return;
|
||||
}
|
||||
if (ConfigHandler.config.worldWhitelist) {
|
||||
if (!cantClaimInWorld(player.getServerWorld())) {
|
||||
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.landClaimDisabledWorld, Formatting.DARK_RED), false);
|
||||
|
@ -2,7 +2,6 @@
|
||||
"schemaVersion": 1,
|
||||
"id": "flan",
|
||||
"version": "${version}",
|
||||
|
||||
"name": "Flan",
|
||||
"description": "A claiming mod for fabric",
|
||||
"authors": [
|
||||
@ -12,10 +11,8 @@
|
||||
"homepage": "",
|
||||
"sources": "https://github.com/Flemmli97/Flan"
|
||||
},
|
||||
|
||||
"license": "ARR",
|
||||
"icon": "assets/modid/icon.png",
|
||||
|
||||
"environment": "*",
|
||||
"entrypoints": {
|
||||
"main": [
|
||||
@ -25,7 +22,6 @@
|
||||
"mixins": [
|
||||
"flan.mixins.json"
|
||||
],
|
||||
|
||||
"depends": {
|
||||
"fabricloader": ">=0.7.4",
|
||||
"fabric": ">=0.19.0"
|
||||
|
Loading…
Reference in New Issue
Block a user