change permission to a registry instead of an hardcoded enum

This commit is contained in:
Flemmli97 2020-11-28 20:53:29 +01:00
parent 685bafc755
commit b6770a3f19
22 changed files with 378 additions and 378 deletions

View File

@ -1,5 +1,6 @@
package com.flemmli97.flan; package com.flemmli97.flan;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.BlockToPermissionMap; import com.flemmli97.flan.claim.BlockToPermissionMap;
import com.flemmli97.flan.commands.CommandClaim; import com.flemmli97.flan.commands.CommandClaim;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
@ -14,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.UseBlockCallback;
import net.fabricmc.fabric.api.event.player.UseEntityCallback; import net.fabricmc.fabric.api.event.player.UseEntityCallback;
import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.fabricmc.fabric.api.event.player.UseItemCallback;
import net.minecraft.server.MinecraftServer;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -30,17 +32,22 @@ public class Flan implements ModInitializer {
UseItemCallback.EVENT.register(ItemInteractEvents::useItem); UseItemCallback.EVENT.register(ItemInteractEvents::useItem);
ServerLifecycleEvents.SERVER_STARTING.register(ConfigHandler::serverLoad); ServerLifecycleEvents.SERVER_STARTING.register(ConfigHandler::serverLoad);
ServerLifecycleEvents.SERVER_STARTING.register(BlockToPermissionMap::reload); ServerLifecycleEvents.SERVER_STARTING.register(BlockToPermissionMap::reload);
ServerLifecycleEvents.SERVER_STARTING.register(this::lockRegistry);
CommandRegistrationCallback.EVENT.register(CommandClaim::register); CommandRegistrationCallback.EVENT.register(CommandClaim::register);
} }
public static void log(String msg, Object... o){ public void lockRegistry(MinecraftServer server) {
if(ConfigHandler.config.log) PermissionRegistry.lock();
}
public static void log(String msg, Object... o) {
if (ConfigHandler.config.log)
logger.info(msg, o); logger.info(msg, o);
} }
public static void debug(String msg, Object... o){ public static void debug(String msg, Object... o) {
if(ConfigHandler.config.log) if (ConfigHandler.config.log)
logger.debug(msg, o); logger.debug(msg, o);
} }
} }

View File

@ -0,0 +1,63 @@
package com.flemmli97.flan.api;
import com.flemmli97.flan.claim.Claim;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import java.util.function.Supplier;
public class ClaimPermission {
private final Supplier<ItemStack> guiItem;
public String desc;
public final String id;
public final ClaimTest test;
public ClaimPermission(String id, Supplier<ItemStack> guiItem, String defaultDescription) {
this(id, guiItem, defaultDescription, pass);
}
public ClaimPermission(String id, Supplier<ItemStack> guiItem, String defaultDescription, ClaimTest test) {
this.id = id;
this.guiItem = guiItem;
this.desc = defaultDescription;
this.test = test;
}
public ItemStack getItem() {
return this.guiItem.get();
}
@Override
public int hashCode() {
return this.id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof ClaimPermission) {
return this.id.equals(((ClaimPermission) obj).id);
}
return false;
}
@Override
public String toString() {
return this.id;
}
public interface ClaimTest {
PermissionFlag test(Claim claim, PlayerEntity player, BlockPos pos);
}
private static final ClaimTest pass = (claim, player, pos) -> PermissionFlag.PASS;
public enum PermissionFlag {
YES,
NO,
PASS
}
}

View File

@ -1,18 +1,21 @@
package com.flemmli97.flan.permission; package com.flemmli97.flan.api;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.village.raid.Raid;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* Unused. might expand on this idea later * Register more permissions before ServerLifecycleEvents.SERVER_STARTING
*/ */
public class ClaimPermRegistry { public class PermissionRegistry {
private static final Map<String, ClaimPermission> permissions = Maps.newLinkedHashMap(); private static final Map<String, ClaimPermission> permissions = Maps.newLinkedHashMap();
private static final Map<String, ClaimPermission> globalPermissions = Maps.newLinkedHashMap(); private static final Map<String, ClaimPermission> globalPermissions = Maps.newLinkedHashMap();
@ -46,7 +49,7 @@ public class ClaimPermRegistry {
public static ClaimPermission PROJECTILES = register(new ClaimPermission("PROJECTILES", () -> new ItemStack(Items.ARROW), "Permission to let shot projectiles interact with blocks (e.g. arrow on button)")); public static ClaimPermission PROJECTILES = register(new ClaimPermission("PROJECTILES", () -> new ItemStack(Items.ARROW), "Permission to let shot projectiles interact with blocks (e.g. arrow on button)"));
public static ClaimPermission TRAMPLE = register(new ClaimPermission("TRAMPLE", () -> new ItemStack(Items.FARMLAND), "Permission to enable block trampling (farmland, turtle eggs)")); public static ClaimPermission TRAMPLE = register(new ClaimPermission("TRAMPLE", () -> new ItemStack(Items.FARMLAND), "Permission to enable block trampling (farmland, turtle eggs)"));
public static ClaimPermission PORTAL = register(new ClaimPermission("PORTAL", () -> new ItemStack(Items.OBSIDIAN), "Permission to use nether portals")); public static ClaimPermission PORTAL = register(new ClaimPermission("PORTAL", () -> new ItemStack(Items.OBSIDIAN), "Permission to use nether portals"));
public static ClaimPermission RAID = register(new ClaimPermission("RAID", () -> new ItemStack(null), "Permission to trigger raids in claim. Wont prevent raids (just) outside")); public static ClaimPermission RAID = register(new ClaimPermission("RAID", () -> Raid.getOminousBanner(), "Permission to trigger raids in claim. Wont prevent raids (just) outside"));
public static ClaimPermission BOAT = register(new ClaimPermission("BOAT", () -> new ItemStack(Items.OAK_BOAT), "Permission to sit in boats")); public static ClaimPermission BOAT = register(new ClaimPermission("BOAT", () -> new ItemStack(Items.OAK_BOAT), "Permission to sit in boats"));
public static ClaimPermission MINECART = register(new ClaimPermission("MINECART", () -> new ItemStack(Items.MINECART), "Permission to sit in minecarts")); public static ClaimPermission MINECART = register(new ClaimPermission("MINECART", () -> new ItemStack(Items.MINECART), "Permission to sit in minecarts"));
public static ClaimPermission BUCKET = register(new ClaimPermission("BUCKET", () -> new ItemStack(Items.BUCKET), "Permission to take liquids with buckets")); public static ClaimPermission BUCKET = register(new ClaimPermission("BUCKET", () -> new ItemStack(Items.BUCKET), "Permission to take liquids with buckets"));
@ -63,53 +66,56 @@ public class ClaimPermRegistry {
public static ClaimPermission FIRESPREAD = global(new ClaimPermission("FIRESPREAD", () -> new ItemStack(Items.BLAZE_POWDER), "Toggle firespread in claim")); public static ClaimPermission FIRESPREAD = global(new ClaimPermission("FIRESPREAD", () -> new ItemStack(Items.BLAZE_POWDER), "Toggle firespread in claim"));
private static ClaimPermission register(ClaimPermission perm) { private static ClaimPermission register(ClaimPermission perm) {
if (locked || permissions.containsKey(perm.id)) { if (locked) {
throw new IllegalStateException("Registering permissions is locked");
return null;
} }
return permissions.put(perm.id, perm); permissions.put(perm.id, perm);
return perm;
} }
private static ClaimPermission global(ClaimPermission perm) { public static ClaimPermission global(ClaimPermission perm) {
if (locked || globalPermissions.containsKey(perm.id)) { if (locked) {
throw new IllegalStateException("Registering permissions is locked");
return null;
} }
return globalPermissions.put(perm.id, perm); globalPermissions.put(perm.id, perm);
return register(perm);
} }
public static void lock(){
public static void lock() {
locked = true; locked = true;
} }
public static ClaimPermission get(String id) { public static ClaimPermission get(String id) {
if (!permissions.containsKey(id))
throw new NullPointerException("No such permission registered");
return permissions.get(id); return permissions.get(id);
} }
public static Collection<ClaimPermission> getPerms(){ public static List<ClaimPermission> getPerms() {
return permissions.values(); return Lists.newArrayList(permissions.values());
} }
public static Collection<ClaimPermission> globalPerms(){ public static Collection<ClaimPermission> globalPerms() {
return globalPermissions.values(); return globalPermissions.values();
} }
public static ClaimPermission registerBreakPerm(ClaimPermission perm, Identifier... affectedBlocks){ public static ClaimPermission registerBreakPerm(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm); ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks) for (Identifier blocks : affectedBlocks)
breakBlocks.put(blocks, perm); breakBlocks.put(blocks, perm);
return reg; return reg;
} }
public static ClaimPermission registerBlockInteract(ClaimPermission perm, Identifier... affectedBlocks){ public static ClaimPermission registerBlockInteract(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm); ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks) for (Identifier blocks : affectedBlocks)
interactBlocks.put(blocks, perm); interactBlocks.put(blocks, perm);
return reg; return reg;
} }
public static ClaimPermission registerItemUse(ClaimPermission perm, Identifier... affectedBlocks){ public static ClaimPermission registerItemUse(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm); ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks) for (Identifier blocks : affectedBlocks)
items.put(blocks, perm); items.put(blocks, perm);
return reg; return reg;
} }

View File

@ -1,5 +1,7 @@
package com.flemmli97.flan.claim; package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.block.AbstractButtonBlock; import net.minecraft.block.AbstractButtonBlock;
import net.minecraft.block.AbstractPressurePlateBlock; import net.minecraft.block.AbstractPressurePlateBlock;
@ -31,46 +33,46 @@ import java.util.Map;
public class BlockToPermissionMap { public class BlockToPermissionMap {
private static final Map<Block, EnumPermission> blockToPermission = Maps.newHashMap(); private static final Map<Block, ClaimPermission> blockToPermission = Maps.newHashMap();
public static void reload(MinecraftServer server) { public static void reload(MinecraftServer server) {
blockToPermission.clear(); blockToPermission.clear();
for (Block block : Registry.BLOCK) { for (Block block : Registry.BLOCK) {
if (block instanceof AnvilBlock) if (block instanceof AnvilBlock)
blockToPermission.put(block, EnumPermission.ANVIL); blockToPermission.put(block, PermissionRegistry.ANVIL);
if (block instanceof BedBlock) if (block instanceof BedBlock)
blockToPermission.put(block, EnumPermission.BED); blockToPermission.put(block, PermissionRegistry.BED);
if (block instanceof BeaconBlock) if (block instanceof BeaconBlock)
blockToPermission.put(block, EnumPermission.BEACON); blockToPermission.put(block, PermissionRegistry.BEACON);
if (block instanceof DoorBlock) if (block instanceof DoorBlock)
blockToPermission.put(block, EnumPermission.DOOR); blockToPermission.put(block, PermissionRegistry.DOOR);
if (block instanceof FenceGateBlock) if (block instanceof FenceGateBlock)
blockToPermission.put(block, EnumPermission.FENCEGATE); blockToPermission.put(block, PermissionRegistry.FENCEGATE);
if (block instanceof TrapdoorBlock) if (block instanceof TrapdoorBlock)
blockToPermission.put(block, EnumPermission.TRAPDOOR); blockToPermission.put(block, PermissionRegistry.TRAPDOOR);
if (block instanceof LeverBlock || block instanceof AbstractButtonBlock) if (block instanceof LeverBlock || block instanceof AbstractButtonBlock)
blockToPermission.put(block, EnumPermission.BUTTONLEVER); blockToPermission.put(block, PermissionRegistry.BUTTONLEVER);
if (block instanceof NoteBlock) if (block instanceof NoteBlock)
blockToPermission.put(block, EnumPermission.NOTEBLOCK); blockToPermission.put(block, PermissionRegistry.NOTEBLOCK);
if (block instanceof AbstractRedstoneGateBlock || block instanceof RedstoneWireBlock || block instanceof DaylightDetectorBlock) if (block instanceof AbstractRedstoneGateBlock || block instanceof RedstoneWireBlock || block instanceof DaylightDetectorBlock)
blockToPermission.put(block, EnumPermission.REDSTONE); blockToPermission.put(block, PermissionRegistry.REDSTONE);
if (block instanceof JukeboxBlock) if (block instanceof JukeboxBlock)
blockToPermission.put(block, EnumPermission.JUKEBOX); blockToPermission.put(block, PermissionRegistry.JUKEBOX);
if (block instanceof AbstractPressurePlateBlock) if (block instanceof AbstractPressurePlateBlock)
blockToPermission.put(block, EnumPermission.PRESSUREPLATE); blockToPermission.put(block, PermissionRegistry.PRESSUREPLATE);
if (block instanceof NetherPortalBlock) if (block instanceof NetherPortalBlock)
blockToPermission.put(block, EnumPermission.PORTAL); blockToPermission.put(block, PermissionRegistry.PORTAL);
if (block instanceof TurtleEggBlock || block instanceof FarmlandBlock) if (block instanceof TurtleEggBlock || block instanceof FarmlandBlock)
blockToPermission.put(block, EnumPermission.TRAMPLE); blockToPermission.put(block, PermissionRegistry.TRAMPLE);
if (block instanceof TargetBlock) if (block instanceof TargetBlock)
blockToPermission.put(block, EnumPermission.TARGETBLOCK); blockToPermission.put(block, PermissionRegistry.TARGETBLOCK);
if (block instanceof BellBlock || block instanceof CampfireBlock if (block instanceof BellBlock || block instanceof CampfireBlock
|| block instanceof TntBlock || block instanceof ChorusFlowerBlock) || block instanceof TntBlock || block instanceof ChorusFlowerBlock)
blockToPermission.put(block, EnumPermission.PROJECTILES); blockToPermission.put(block, PermissionRegistry.PROJECTILES);
} }
} }
public static EnumPermission getFromBlock(Block block) { public static ClaimPermission getFromBlock(Block block) {
return blockToPermission.get(block); return blockToPermission.get(block);
} }
} }

View File

@ -1,5 +1,7 @@
package com.flemmli97.flan.claim; package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import com.flemmli97.flan.player.PlayerClaimData; import com.flemmli97.flan.player.PlayerClaimData;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@ -13,18 +15,18 @@ import com.mojang.authlib.GameProfile;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import java.util.Arrays; import java.util.Arrays;
import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
public class Claim implements IPermissionContainer{ public class Claim implements IPermissionContainer {
private boolean dirty; private boolean dirty;
private int minX, minZ, maxX, maxZ, minY; private int minX, minZ, maxX, maxZ, minY;
@ -32,8 +34,9 @@ public class Claim implements IPermissionContainer{
private UUID owner; private UUID owner;
private UUID claimID; private UUID claimID;
private final EnumMap<EnumPermission, Boolean> globalPerm = Maps.newEnumMap(EnumPermission.class); private LiteralText claimName;
private final Map<String, EnumMap<EnumPermission, Boolean>> permissions = Maps.newHashMap(); private final Map<ClaimPermission, Boolean> globalPerm = Maps.newHashMap();
private final Map<String, Map<ClaimPermission, Boolean>> permissions = Maps.newHashMap();
private final Map<UUID, String> playersGroups = Maps.newHashMap(); private final Map<UUID, String> playersGroups = Maps.newHashMap();
@ -88,11 +91,20 @@ public class Claim implements IPermissionContainer{
return this.claimID; return this.claimID;
} }
public LiteralText getClaimName() {
return this.claimName;
}
public void setClaimName(LiteralText name) {
this.claimName = name;
this.setDirty(true);
}
public UUID getOwner() { public UUID getOwner() {
return this.owner; return this.owner;
} }
public ServerWorld getWorld(){ public ServerWorld getWorld() {
return this.world; return this.world;
} }
@ -168,10 +180,21 @@ public class Claim implements IPermissionContainer{
return this.removed; return this.removed;
} }
public boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos, boolean message) { public boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos, boolean message) {
if(!this.isAdminClaim() && ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())){ if (perm != null) {
EnumMap<EnumPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString()); ClaimPermission.PermissionFlag flag = perm.test.test(this, player, pos);
if(permMap.containsKey(perm)) { if (flag != ClaimPermission.PermissionFlag.PASS) {
if (flag == ClaimPermission.PermissionFlag.NO) {
if (message)
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true);
return false;
}
return true;
}
}
if (!this.isAdminClaim() && ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())) {
Map<ClaimPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString());
if (permMap.containsKey(perm)) {
if (permMap.get(perm) || this.isAdminIgnore(player)) if (permMap.get(perm) || this.isAdminIgnore(player))
return true; return true;
if (message) if (message)
@ -179,7 +202,7 @@ public class Claim implements IPermissionContainer{
return false; return false;
} }
} }
if (perm.isAlwaysGlobalPerm()) { if (PermissionRegistry.globalPerms().contains(perm)) {
for (Claim claim : this.subClaims) { for (Claim claim : this.subClaims) {
if (claim.insideClaim(pos)) { if (claim.insideClaim(pos)) {
return claim.canInteract(player, perm, pos, message); return claim.canInteract(player, perm, pos, message);
@ -193,14 +216,14 @@ public class Claim implements IPermissionContainer{
} }
if (this.isAdminIgnore(player) || player.getUuid().equals(this.owner)) if (this.isAdminIgnore(player) || player.getUuid().equals(this.owner))
return true; return true;
if (perm != EnumPermission.EDITCLAIM && perm != EnumPermission.EDITPERMS) if (perm != PermissionRegistry.EDITCLAIM && perm != PermissionRegistry.EDITPERMS)
for (Claim claim : this.subClaims) { for (Claim claim : this.subClaims) {
if (claim.insideClaim(pos)) { if (claim.insideClaim(pos)) {
return claim.canInteract(player, perm, pos, message); return claim.canInteract(player, perm, pos, message);
} }
} }
if (this.playersGroups.containsKey(player.getUuid())) { if (this.playersGroups.containsKey(player.getUuid())) {
EnumMap<EnumPermission, Boolean> map = this.permissions.get(this.playersGroups.get(player.getUuid())); Map<ClaimPermission, Boolean> map = this.permissions.get(this.playersGroups.get(player.getUuid()));
if (map != null && map.containsKey(perm)) { if (map != null && map.containsKey(perm)) {
if (map.get(perm)) if (map.get(perm))
return true; return true;
@ -216,18 +239,18 @@ public class Claim implements IPermissionContainer{
return false; return false;
} }
private boolean isAdminIgnore(ServerPlayerEntity player){ private boolean isAdminIgnore(ServerPlayerEntity player) {
return player == null || ((this.isAdminClaim() && player.hasPermissionLevel(2)) || PlayerClaimData.get(player).isAdminIgnoreClaim()); return player == null || ((this.isAdminClaim() && player.hasPermissionLevel(2)) || PlayerClaimData.get(player).isAdminIgnoreClaim());
} }
/** /**
* @return -1 for default, 0 for false, 1 for true * @return -1 for default, 0 for false, 1 for true
*/ */
public int permEnabled(EnumPermission perm) { public int permEnabled(ClaimPermission perm) {
return !this.globalPerm.containsKey(perm) ? -1 : this.globalPerm.get(perm) ? 1 : 0; return !this.globalPerm.containsKey(perm) ? -1 : this.globalPerm.get(perm) ? 1 : 0;
} }
private boolean hasPerm(EnumPermission perm) { private boolean hasPerm(ClaimPermission perm) {
if (this.parentClaim() == null) if (this.parentClaim() == null)
return this.permEnabled(perm) == 1; return this.permEnabled(perm) == 1;
if (this.permEnabled(perm) == -1) if (this.permEnabled(perm) == -1)
@ -333,8 +356,8 @@ public class Claim implements IPermissionContainer{
return names; return names;
} }
public boolean editGlobalPerms(ServerPlayerEntity player, EnumPermission toggle, int mode) { public boolean editGlobalPerms(ServerPlayerEntity player, ClaimPermission toggle, int mode) {
if((player!= null && !this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, toggle))) if ((player != null && !this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, toggle)))
return false; return false;
if (mode > 1) if (mode > 1)
mode = -1; mode = -1;
@ -346,7 +369,7 @@ public class Claim implements IPermissionContainer{
return true; return true;
} }
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode) { public boolean editPerms(ServerPlayerEntity player, String group, ClaimPermission perm, int mode) {
return this.editPerms(player, group, perm, mode, false); return this.editPerms(player, group, perm, mode, false);
} }
@ -356,14 +379,14 @@ public class Claim implements IPermissionContainer{
* @param mode -1 = makes it resort to the global perm, 0 = deny perm, 1 = allow perm * @param mode -1 = makes it resort to the global perm, 0 = deny perm, 1 = allow perm
* @return If editing was successful or not * @return If editing was successful or not
*/ */
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode, boolean griefPrevention) { public boolean editPerms(ServerPlayerEntity player, String group, ClaimPermission perm, int mode, boolean griefPrevention) {
if (perm.isAlwaysGlobalPerm() || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, perm))) if (PermissionRegistry.globalPerms().contains(perm) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, perm)))
return false; return false;
if (griefPrevention || this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) { if (griefPrevention || this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
if (mode > 1) if (mode > 1)
mode = -1; mode = -1;
boolean has = this.permissions.containsKey(group); boolean has = this.permissions.containsKey(group);
EnumMap<EnumPermission, Boolean> perms = has ? this.permissions.get(group) : new EnumMap<>(EnumPermission.class); Map<ClaimPermission, Boolean> perms = has ? this.permissions.get(group) : Maps.newHashMap();
if (mode == -1) if (mode == -1)
perms.remove(perm); perms.remove(perm);
else else
@ -377,7 +400,7 @@ public class Claim implements IPermissionContainer{
} }
public boolean removePermGroup(ServerPlayerEntity player, String group) { public boolean removePermGroup(ServerPlayerEntity player, String group) {
if (this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) { if (this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
this.permissions.remove(group); this.permissions.remove(group);
List<UUID> toRemove = Lists.newArrayList(); List<UUID> toRemove = Lists.newArrayList();
this.playersGroups.forEach((uuid, g) -> { this.playersGroups.forEach((uuid, g) -> {
@ -391,7 +414,7 @@ public class Claim implements IPermissionContainer{
return false; return false;
} }
public int groupHasPerm(String rank, EnumPermission perm) { public int groupHasPerm(String rank, ClaimPermission perm) {
if (!this.permissions.containsKey(rank) || !this.permissions.get(rank).containsKey(perm)) if (!this.permissions.containsKey(rank) || !this.permissions.get(rank).containsKey(perm))
return -1; return -1;
return this.permissions.get(rank).get(perm) ? 1 : 0; return this.permissions.get(rank).get(perm) ? 1 : 0;
@ -436,17 +459,17 @@ public class Claim implements IPermissionContainer{
this.parent = UUID.fromString(obj.get("Parent").getAsString()); this.parent = UUID.fromString(obj.get("Parent").getAsString());
if (obj.has("GlobalPerms")) { if (obj.has("GlobalPerms")) {
if (this.parent == null) { if (this.parent == null) {
obj.getAsJsonArray("GlobalPerms").forEach(perm -> this.globalPerm.put(EnumPermission.valueOf(perm.getAsString()), true)); obj.getAsJsonArray("GlobalPerms").forEach(perm -> this.globalPerm.put(PermissionRegistry.get(perm.getAsString()), true));
} else { } else {
obj.getAsJsonObject("GlobalPerms").entrySet().forEach(entry -> this.globalPerm.put(EnumPermission.valueOf(entry.getKey()), entry.getValue().getAsBoolean())); obj.getAsJsonObject("GlobalPerms").entrySet().forEach(entry -> this.globalPerm.put(PermissionRegistry.get(entry.getKey()), entry.getValue().getAsBoolean()));
} }
} }
if (obj.has("PermGroup")) { if (obj.has("PermGroup")) {
JsonObject perms = obj.getAsJsonObject("PermGroup"); JsonObject perms = obj.getAsJsonObject("PermGroup");
perms.entrySet().forEach(key -> { perms.entrySet().forEach(key -> {
EnumMap<EnumPermission, Boolean> map = new EnumMap<>(EnumPermission.class); Map<ClaimPermission, Boolean> map = Maps.newHashMap();
JsonObject group = key.getValue().getAsJsonObject(); JsonObject group = key.getValue().getAsJsonObject();
group.entrySet().forEach(gkey -> map.put(EnumPermission.valueOf(gkey.getKey()), gkey.getValue().getAsBoolean())); group.entrySet().forEach(gkey -> map.put(PermissionRegistry.get(gkey.getKey()), gkey.getValue().getAsBoolean()));
this.permissions.put(key.getKey(), map); this.permissions.put(key.getKey(), map);
}); });
} }
@ -476,11 +499,11 @@ public class Claim implements IPermissionContainer{
gPerm = new JsonArray(); gPerm = new JsonArray();
this.globalPerm.forEach((perm, bool) -> { this.globalPerm.forEach((perm, bool) -> {
if (bool) if (bool)
((JsonArray) gPerm).add(perm.toString()); ((JsonArray) gPerm).add(perm.id);
}); });
} else { } else {
gPerm = new JsonObject(); gPerm = new JsonObject();
this.globalPerm.forEach((perm, bool) -> ((JsonObject) gPerm).addProperty(perm.toString(), bool)); this.globalPerm.forEach((perm, bool) -> ((JsonObject) gPerm).addProperty(perm.id, bool));
} }
obj.add("GlobalPerms", gPerm); obj.add("GlobalPerms", gPerm);
} }
@ -488,7 +511,7 @@ public class Claim implements IPermissionContainer{
JsonObject perms = new JsonObject(); JsonObject perms = new JsonObject();
this.permissions.forEach((s, pmap) -> { this.permissions.forEach((s, pmap) -> {
JsonObject group = new JsonObject(); JsonObject group = new JsonObject();
pmap.forEach((perm, bool) -> group.addProperty(perm.toString(), bool)); pmap.forEach((perm, bool) -> group.addProperty(perm.id, bool));
perms.add(s, group); perms.add(s, group);
}); });
obj.add("PermGroup", perms); obj.add("PermGroup", perms);
@ -535,7 +558,7 @@ public class Claim implements IPermissionContainer{
} }
public List<Text> infoString(ServerPlayerEntity player) { public List<Text> infoString(ServerPlayerEntity player) {
boolean perms = this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos()); boolean perms = this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos());
List<Text> l = Lists.newArrayList(); List<Text> l = Lists.newArrayList();
l.add(PermHelper.simpleColoredText("=============================================", Formatting.GREEN)); l.add(PermHelper.simpleColoredText("=============================================", Formatting.GREEN));
GameProfile prof = this.owner != null ? player.getServer().getUserCache().getByUuid(this.owner) : null; GameProfile prof = this.owner != null ? player.getServer().getUserCache().getByUuid(this.owner) : null;
@ -557,7 +580,7 @@ public class Claim implements IPermissionContainer{
}); });
} }
} }
for (Map.Entry<String, EnumMap<EnumPermission, Boolean>> e : this.permissions.entrySet()) { for (Map.Entry<String, Map<ClaimPermission, Boolean>> e : this.permissions.entrySet()) {
l.add(PermHelper.simpleColoredText(String.format(" %s:", e.getKey()), Formatting.DARK_RED)); l.add(PermHelper.simpleColoredText(String.format(" %s:", e.getKey()), Formatting.DARK_RED));
l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimGroupPerms, e.getValue()), Formatting.RED)); l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimGroupPerms, e.getValue()), Formatting.RED));
l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimGroupPlayers, nameToGroup.getOrDefault(e.getKey(), Lists.newArrayList())), Formatting.RED)); l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimGroupPlayers, nameToGroup.getOrDefault(e.getKey(), Lists.newArrayList())), Formatting.RED));

View File

@ -2,6 +2,8 @@ package com.flemmli97.flan.claim;
import com.flemmli97.flan.Flan; import com.flemmli97.flan.Flan;
import com.flemmli97.flan.IClaimData; import com.flemmli97.flan.IClaimData;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import com.flemmli97.flan.player.EnumDisplayType; import com.flemmli97.flan.player.EnumDisplayType;
import com.flemmli97.flan.player.EnumEditMode; import com.flemmli97.flan.player.EnumEditMode;
@ -36,7 +38,6 @@ import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -50,6 +51,7 @@ public class ClaimStorage {
private final Map<UUID, Set<Claim>> playerClaimMap = Maps.newHashMap(); private final Map<UUID, Set<Claim>> playerClaimMap = Maps.newHashMap();
private final Set<UUID> dirty = Sets.newHashSet(); private final Set<UUID> dirty = Sets.newHashSet();
private final GlobalClaim globalClaim; private final GlobalClaim globalClaim;
public static ClaimStorage get(ServerWorld world) { public static ClaimStorage get(ServerWorld world) {
return (ClaimStorage) ((IClaimData) world).getClaimData(); return (ClaimStorage) ((IClaimData) world).getClaimData();
} }
@ -145,7 +147,7 @@ public class ClaimStorage {
int[] dims = claim.getDimensions(); int[] dims = claim.getDimensions();
BlockPos opposite = new BlockPos(dims[0] == from.getX() ? dims[1] : dims[0], dims[4], dims[2] == from.getZ() ? dims[3] : dims[2]); BlockPos opposite = new BlockPos(dims[0] == from.getX() ? dims[1] : dims[0], dims[4], dims[2] == from.getZ() ? dims[3] : dims[2]);
Claim newClaim = new Claim(opposite, to, player.getUuid(), player.getServerWorld()); Claim newClaim = new Claim(opposite, to, player.getUuid(), player.getServerWorld());
if(newClaim.getPlane() < ConfigHandler.config.minClaimsize){ if (newClaim.getPlane() < ConfigHandler.config.minClaimsize) {
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.minClaimSize, ConfigHandler.config.minClaimsize), Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.minClaimSize, ConfigHandler.config.minClaimsize), Formatting.RED), false);
return false; return false;
} }
@ -173,7 +175,7 @@ public class ClaimStorage {
} }
public Claim getClaimAt(BlockPos pos) { public Claim getClaimAt(BlockPos pos) {
long chunk = ChunkPos.toLong(pos.getX()>>4, pos.getZ()>>4); long chunk = ChunkPos.toLong(pos.getX() >> 4, pos.getZ() >> 4);
if (this.claims.containsKey(chunk)) if (this.claims.containsKey(chunk))
for (Claim claim : this.claims.get(chunk)) { for (Claim claim : this.claims.get(chunk)) {
if (claim.insideClaim(pos)) if (claim.insideClaim(pos))
@ -182,9 +184,9 @@ public class ClaimStorage {
return null; return null;
} }
public IPermissionContainer getForPermissionCheck(BlockPos pos){ public IPermissionContainer getForPermissionCheck(BlockPos pos) {
Claim claim = this.getClaimAt(pos); Claim claim = this.getClaimAt(pos);
if(claim != null) if (claim != null)
return claim; return claim;
return this.globalClaim; return this.globalClaim;
} }
@ -321,19 +323,19 @@ public class ClaimStorage {
Map<File, List<File>> subClaimMap = Maps.newHashMap(); Map<File, List<File>> subClaimMap = Maps.newHashMap();
Map<Integer, File> intFileMap = Maps.newHashMap(); Map<Integer, File> intFileMap = Maps.newHashMap();
EnumSet<EnumPermission> managers = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITCLAIM)); Set<ClaimPermission> managers = complementOf(PermissionRegistry.EDITCLAIM);
EnumSet<EnumPermission> builders = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM)); Set<ClaimPermission> builders = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM);
EnumSet<EnumPermission> containers = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM, Set<ClaimPermission> containers = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM,
EnumPermission.BREAK, EnumPermission.PLACE, EnumPermission.NOTEBLOCK, EnumPermission.REDSTONE, EnumPermission.JUKEBOX, PermissionRegistry.BREAK, PermissionRegistry.PLACE, PermissionRegistry.NOTEBLOCK, PermissionRegistry.REDSTONE, PermissionRegistry.JUKEBOX,
EnumPermission.ITEMFRAMEROTATE, EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES, PermissionRegistry.ITEMFRAMEROTATE, PermissionRegistry.LECTERNTAKE, PermissionRegistry.ENDCRYSTALPLACE, PermissionRegistry.PROJECTILES,
EnumPermission.TRAMPLE, EnumPermission.RAID, EnumPermission.BUCKET, EnumPermission.ARMORSTAND, EnumPermission.BREAKNONLIVING)); PermissionRegistry.TRAMPLE, PermissionRegistry.RAID, PermissionRegistry.BUCKET, PermissionRegistry.ARMORSTAND, PermissionRegistry.BREAKNONLIVING);
EnumSet<EnumPermission> accessors = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM, Set<ClaimPermission> accessors = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM,
EnumPermission.BREAK, EnumPermission.PLACE, EnumPermission.OPENCONTAINER, EnumPermission.ANVIL, EnumPermission.BEACON, PermissionRegistry.BREAK, PermissionRegistry.PLACE, PermissionRegistry.OPENCONTAINER, PermissionRegistry.ANVIL, PermissionRegistry.BEACON,
EnumPermission.NOTEBLOCK, EnumPermission.REDSTONE, EnumPermission.JUKEBOX, EnumPermission.ITEMFRAMEROTATE, PermissionRegistry.NOTEBLOCK, PermissionRegistry.REDSTONE, PermissionRegistry.JUKEBOX, PermissionRegistry.ITEMFRAMEROTATE,
EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES, EnumPermission.TRAMPLE, EnumPermission.RAID, PermissionRegistry.LECTERNTAKE, PermissionRegistry.ENDCRYSTALPLACE, PermissionRegistry.PROJECTILES, PermissionRegistry.TRAMPLE, PermissionRegistry.RAID,
EnumPermission.BUCKET, EnumPermission.ANIMALINTERACT, EnumPermission.HURTANIMAL, EnumPermission.TRADING, EnumPermission.ARMORSTAND, PermissionRegistry.BUCKET, PermissionRegistry.ANIMALINTERACT, PermissionRegistry.HURTANIMAL, PermissionRegistry.TRADING, PermissionRegistry.ARMORSTAND,
EnumPermission.BREAKNONLIVING)); PermissionRegistry.BREAKNONLIVING);
Map<String, EnumSet<EnumPermission>> perms = Maps.newHashMap(); Map<String, Set<ClaimPermission>> perms = Maps.newHashMap();
perms.put("managers", managers); perms.put("managers", managers);
perms.put("builders", builders); perms.put("builders", builders);
perms.put("containers", containers); perms.put("containers", containers);
@ -400,8 +402,15 @@ public class ClaimStorage {
} }
} }
private static Set<ClaimPermission> complementOf(ClaimPermission... perms) {
Set<ClaimPermission> set = Sets.newHashSet(PermissionRegistry.getPerms());
for (ClaimPermission perm : perms)
set.remove(perm);
return set;
}
private static Pair<ServerWorld, Claim> parseFromYaml(File file, Yaml yml, MinecraftServer server, private static Pair<ServerWorld, Claim> parseFromYaml(File file, Yaml yml, MinecraftServer server,
Map<String, EnumSet<EnumPermission>> perms) throws IOException { Map<String, Set<ClaimPermission>> perms) throws IOException {
FileReader reader = new FileReader(file); FileReader reader = new FileReader(file);
Map<String, Object> values = yml.load(reader); Map<String, Object> values = yml.load(reader);
reader.close(); reader.close();
@ -421,7 +430,7 @@ public class ClaimStorage {
if (!builders.isEmpty() && !builders.contains(ownerString)) { if (!builders.isEmpty() && !builders.contains(ownerString)) {
if (builders.contains("public")) { if (builders.contains("public")) {
perms.get("builders").forEach(perm -> { perms.get("builders").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm()) if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1); claim.editGlobalPerms(null, perm, 1);
}); });
} else { } else {
@ -432,7 +441,7 @@ public class ClaimStorage {
if (!managers.isEmpty() && !managers.contains(ownerString)) { if (!managers.isEmpty() && !managers.contains(ownerString)) {
if (managers.contains("public")) { if (managers.contains("public")) {
perms.get("managers").forEach(perm -> { perms.get("managers").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm()) if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1); claim.editGlobalPerms(null, perm, 1);
}); });
} else { } else {
@ -443,7 +452,7 @@ public class ClaimStorage {
if (!containers.isEmpty() && !containers.contains(ownerString)) { if (!containers.isEmpty() && !containers.contains(ownerString)) {
if (containers.contains("public")) { if (containers.contains("public")) {
perms.get("containers").forEach(perm -> { perms.get("containers").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm()) if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1); claim.editGlobalPerms(null, perm, 1);
}); });
} else { } else {
@ -454,7 +463,7 @@ public class ClaimStorage {
if (!accessors.isEmpty() && !accessors.contains(ownerString)) { if (!accessors.isEmpty() && !accessors.contains(ownerString)) {
if (accessors.contains("public")) { if (accessors.contains("public")) {
perms.get("accessors").forEach(perm -> { perms.get("accessors").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm()) if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1); claim.editGlobalPerms(null, perm, 1);
}); });
} else { } else {

View File

@ -1,76 +0,0 @@
package com.flemmli97.flan.claim;
import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.village.raid.Raid;
import java.util.EnumSet;
public enum EnumPermission {
EDITCLAIM(ConfigHandler.config.claimingItem, "Gives permission to edit (resize, delete...) the claim"),
EDITPERMS(Items.COMMAND_BLOCK, "Gives permission to change the claims permissions"),
BREAK(Items.DIAMOND_PICKAXE, "Permission to break blocks in the claim"),
PLACE(Items.GRASS_BLOCK, "Permission to place blocks in the claim"),
OPENCONTAINER(Items.CHEST, "Permission to open containers (chest, furnace etc.)"),
ANVIL(Items.ANVIL, "Permission to use anvils"),
BED(Items.RED_BED, "Permission to use beds"),
BEACON(Items.BEACON, "Permission to use beacons"),
DOOR(Items.OAK_DOOR, "Permission to use doors"),
FENCEGATE(Items.OAK_FENCE_GATE, "Permission to use fence gates"),
TRAPDOOR(Items.OAK_TRAPDOOR, "Permission to use trapdoors"),
BUTTONLEVER(Items.LEVER, "Permission to trigger levers and buttons"),
PRESSUREPLATE(Items.STONE_PRESSURE_PLATE, "Permission to trigger pressure plates"),
NOTEBLOCK(Items.NOTE_BLOCK, "Permission to change noteblocks"),
REDSTONE(Items.REDSTONE, "Permission to change redstone components"),
JUKEBOX(Items.JUKEBOX, "Permission to insert/take music discs"),
ITEMFRAMEROTATE(Items.ITEM_FRAME, "Permission to rotate items in item frames"),
LECTERNTAKE(Items.LECTERN, "Permission to change books in a lectern"),
ENDCRYSTALPLACE(Items.END_CRYSTAL, "Permission to place end crystals"),
TARGETBLOCK(Items.TARGET, "Permission to trigger target blocks"),
PROJECTILES(Items.ARROW, "Permission to let shot projectiles interact with blocks (e.g. arrow on button)"),
TRAMPLE(Items.FARMLAND, "Permission to enable block trampling (farmland, turtle eggs)"),
PORTAL(Items.OBSIDIAN, "Permission to use nether portals"),
RAID(null, "Permission to trigger raids in claim. Wont prevent raids (just) outside"),
BOAT(Items.OAK_BOAT, "Permission to sit in boats"),
MINECART(Items.MINECART, "Permission to sit in minecarts"),
BUCKET(Items.BUCKET, "Permission to take liquids with buckets"),
ENDERPEARL(Items.ENDER_PEARL, "Permission to use enderpearls"),
ANIMALINTERACT(Items.CHICKEN_SPAWN_EGG, "Permission to interact with animals (e.g. shearing sheeps)"),
HURTANIMAL(Items.BEEF, "Permission to hurt animals"),
XP(Items.EXPERIENCE_BOTTLE, "Permission to pick up xp orbs"),
TRADING(Items.EMERALD, "Permission to trade with villagers"),
ARMORSTAND(Items.ARMOR_STAND, "Permission to interact with armor stands"),
BREAKNONLIVING(Items.COMMAND_BLOCK_MINECART, "Permission to break things like minecarts or armor stands"),
HURTPLAYER(Items.DIAMOND_SWORD, "Permission to hurt other players"),
EXPLOSIONS(Items.TNT, "Toggle explosions in claim"),
WITHER(Items.WITHER_SKELETON_SKULL,"Toggle wither breaking blocks in claim"),
FIRESPREAD(Items.BLAZE_POWDER, "Toggle firespread in claim");
private final Item item;
public String translation;
private static final EnumSet<EnumPermission> alwaysGlobal = EnumSet.of(HURTPLAYER, EXPLOSIONS, WITHER, FIRESPREAD);
EnumPermission(Item item, String translation) {
this.item = item;
this.translation = translation;
}
public ItemStack getItem() {
if (this == RAID)
return Raid.getOminousBanner();
return new ItemStack(this.item);
}
public boolean isAlwaysGlobalPerm() {
return alwaysGlobal.contains(this);
}
public static int alwaysGlobalLength() {
return alwaysGlobal.size();
}
}

View File

@ -1,25 +1,27 @@
package com.flemmli97.flan.claim; package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import java.util.EnumMap; import java.util.Map;
public class GlobalClaim implements IPermissionContainer{ public class GlobalClaim implements IPermissionContainer {
private final ServerWorld world; private final ServerWorld world;
public GlobalClaim(ServerWorld world){
public GlobalClaim(ServerWorld world) {
this.world = world; this.world = world;
} }
@Override @Override
public boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos, boolean message) { public boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos, boolean message) {
if(ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())){ if (ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())) {
EnumMap<EnumPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString()); Map<ClaimPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString());
if(permMap.containsKey(perm)) { if (permMap.containsKey(perm)) {
if (permMap.get(perm)) if (permMap.get(perm))
return true; return true;
if (message) if (message)

View File

@ -1,14 +1,15 @@
package com.flemmli97.flan.claim; package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
public interface IPermissionContainer { public interface IPermissionContainer {
default boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos){ default boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos) {
return this.canInteract(player, perm, pos, false); return this.canInteract(player, perm, pos, false);
} }
boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos, boolean message); boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos, boolean message);
} }

View File

@ -1,5 +1,6 @@
package com.flemmli97.flan.claim; package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText; import net.minecraft.text.LiteralText;
@ -13,7 +14,7 @@ import java.util.function.Consumer;
public class PermHelper { public class PermHelper {
public static boolean check(ServerPlayerEntity player, BlockPos pos, Claim claim, EnumPermission perm, Consumer<Optional<Boolean>> cons) { public static boolean check(ServerPlayerEntity player, BlockPos pos, Claim claim, ClaimPermission perm, Consumer<Optional<Boolean>> cons) {
if (claim == null) { if (claim == null) {
cons.accept(Optional.empty()); cons.accept(Optional.empty());
return false; return false;
@ -23,7 +24,7 @@ public class PermHelper {
return hasPerm; return hasPerm;
} }
public static Claim checkReturn(ServerPlayerEntity player, EnumPermission perm, Consumer<Optional<Boolean>> cons) { public static Claim checkReturn(ServerPlayerEntity player, ClaimPermission perm, Consumer<Optional<Boolean>> cons) {
BlockPos pos = player.getBlockPos(); BlockPos pos = player.getBlockPos();
Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(pos); Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(pos);
return check(player, pos, claim, perm, cons) ? claim : null; return check(player, pos, claim, perm, cons) ? claim : null;

View File

@ -1,8 +1,9 @@
package com.flemmli97.flan.commands; package com.flemmli97.flan.commands;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim; import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper; import com.flemmli97.flan.claim.PermHelper;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import com.flemmli97.flan.gui.ClaimMenuScreenHandler; import com.flemmli97.flan.gui.ClaimMenuScreenHandler;
@ -36,7 +37,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.Collection; import java.util.Collection;
import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -82,7 +82,7 @@ public class CommandClaim {
ServerCommandSource src = context.getSource(); ServerCommandSource src = context.getSource();
ClaimStorage storage = ClaimStorage.get(src.getWorld()); ClaimStorage storage = ClaimStorage.get(src.getWorld());
Claim claim = storage.getClaimAt(src.getPlayer().getBlockPos()); Claim claim = storage.getClaimAt(src.getPlayer().getBlockPos());
if (claim != null && claim.canInteract(src.getPlayer(), EnumPermission.EDITPERMS, src.getPlayer().getBlockPos())) { if (claim != null && claim.canInteract(src.getPlayer(), PermissionRegistry.EDITPERMS, src.getPlayer().getBlockPos())) {
list = claim.playersFromGroup(player.getServer(), ""); list = claim.playersFromGroup(player.getServer(), "");
} }
return CommandSource.suggestMatching(list, build); return CommandSource.suggestMatching(list, build);
@ -138,7 +138,7 @@ public class CommandClaim {
ServerPlayerEntity player = context.getSource().getPlayer(); ServerPlayerEntity player = context.getSource().getPlayer();
PlayerClaimData data = PlayerClaimData.get(player); PlayerClaimData data = PlayerClaimData.get(player);
if (data.getEditMode() == EnumEditMode.DEFAULT) { if (data.getEditMode() == EnumEditMode.DEFAULT) {
Claim claim = PermHelper.checkReturn(player, EnumPermission.EDITPERMS, PermHelper.genericNoPermMessage(player)); Claim claim = PermHelper.checkReturn(player, PermissionRegistry.EDITPERMS, PermHelper.genericNoPermMessage(player));
if (claim == null) if (claim == null)
return 0; return 0;
ClaimMenuScreenHandler.openClaimMenu(player, claim); ClaimMenuScreenHandler.openClaimMenu(player, claim);
@ -146,9 +146,9 @@ public class CommandClaim {
} else { } else {
Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(player.getBlockPos()); Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(player.getBlockPos());
Claim sub = claim.getSubClaim(player.getBlockPos()); Claim sub = claim.getSubClaim(player.getBlockPos());
if (sub != null && (claim.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos()) || sub.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos()))) if (sub != null && (claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos()) || sub.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())))
ClaimMenuScreenHandler.openClaimMenu(player, sub); ClaimMenuScreenHandler.openClaimMenu(player, sub);
else if (claim.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) else if (claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos()))
ClaimMenuScreenHandler.openClaimMenu(player, claim); ClaimMenuScreenHandler.openClaimMenu(player, claim);
else else
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermission, Formatting.DARK_RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermission, Formatting.DARK_RED), false);
@ -184,7 +184,7 @@ public class CommandClaim {
ServerPlayerEntity player = context.getSource().getPlayer(); ServerPlayerEntity player = context.getSource().getPlayer();
ClaimStorage storage = ClaimStorage.get(player.getServerWorld()); ClaimStorage storage = ClaimStorage.get(player.getServerWorld());
Claim claim = storage.getClaimAt(player.getBlockPos()); Claim claim = storage.getClaimAt(player.getBlockPos());
boolean check = PermHelper.check(player, player.getBlockPos(), claim, EnumPermission.EDITCLAIM, b -> { boolean check = PermHelper.check(player, player.getBlockPos(), claim, PermissionRegistry.EDITCLAIM, b -> {
if (!b.isPresent()) if (!b.isPresent())
PermHelper.noClaimMessage(player); PermHelper.noClaimMessage(player);
else if (!b.get()) else if (!b.get())
@ -228,7 +228,7 @@ public class CommandClaim {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noClaim, Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noClaim, Formatting.RED), false);
return 0; return 0;
} }
boolean check = PermHelper.check(player, player.getBlockPos(), claim, EnumPermission.EDITCLAIM, b -> { boolean check = PermHelper.check(player, player.getBlockPos(), claim, PermissionRegistry.EDITCLAIM, b -> {
if (!b.isPresent()) if (!b.isPresent())
PermHelper.noClaimMessage(player); PermHelper.noClaimMessage(player);
else if (!b.get()) else if (!b.get())
@ -244,7 +244,7 @@ public class CommandClaim {
private static int deleteAllSubClaim(CommandContext<ServerCommandSource> context) throws CommandSyntaxException { private static int deleteAllSubClaim(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
ServerPlayerEntity player = context.getSource().getPlayer(); ServerPlayerEntity player = context.getSource().getPlayer();
Claim claim = PermHelper.checkReturn(player, EnumPermission.EDITCLAIM, PermHelper.genericNoPermMessage(player)); Claim claim = PermHelper.checkReturn(player, PermissionRegistry.EDITCLAIM, PermHelper.genericNoPermMessage(player));
if (claim == null) if (claim == null)
return 0; return 0;
List<Claim> subs = claim.getAllSubclaims(); List<Claim> subs = claim.getAllSubclaims();
@ -276,7 +276,7 @@ public class CommandClaim {
ClaimStorage storage = ClaimStorage.get(world); ClaimStorage storage = ClaimStorage.get(world);
claims.put(world, storage.allClaimsFromPlayer(player != null ? player.getUuid() : of)); claims.put(world, storage.allClaimsFromPlayer(player != null ? player.getUuid() : of));
} }
if(ConfigHandler.config.maxClaimBlocks != -1) { if (ConfigHandler.config.maxClaimBlocks != -1) {
if (player != null) { if (player != null) {
PlayerClaimData data = PlayerClaimData.get(player); PlayerClaimData data = PlayerClaimData.get(player);
context.getSource().sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat, context.getSource().sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat,
@ -400,7 +400,7 @@ public class CommandClaim {
List<String> list = Lists.newArrayList(); List<String> list = Lists.newArrayList();
ClaimStorage storage = ClaimStorage.get(player.getServerWorld()); ClaimStorage storage = ClaimStorage.get(player.getServerWorld());
Claim claim = storage.getClaimAt(player.getBlockPos()); Claim claim = storage.getClaimAt(player.getBlockPos());
if (claim != null && claim.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) { if (claim != null && claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
list = claim.groups(); list = claim.groups();
} }
return CommandSource.suggestMatching(list, build); return CommandSource.suggestMatching(list, build);
@ -435,7 +435,7 @@ public class CommandClaim {
if (claim.groups().contains(group)) { if (claim.groups().contains(group)) {
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.groupExist, group), Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.groupExist, group), Formatting.RED), false);
return 0; return 0;
} else if (claim.editPerms(player, group, EnumPermission.EDITPERMS, -1)) } else if (claim.editPerms(player, group, PermissionRegistry.EDITPERMS, -1))
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.groupAdd, group), Formatting.GOLD), false); player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.groupAdd, group), Formatting.GOLD), false);
else { else {
PermHelper.genericNoPermMessage(player); PermHelper.genericNoPermMessage(player);
@ -467,7 +467,7 @@ public class CommandClaim {
PermHelper.noClaimMessage(player); PermHelper.noClaimMessage(player);
return 0; return 0;
} }
if (!claim.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) { if (!claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
PermHelper.genericNoPermMessage(player); PermHelper.genericNoPermMessage(player);
return 0; return 0;
} }
@ -488,13 +488,13 @@ public class CommandClaim {
Claim claim = ClaimStorage.get(world).getClaimAt(new BlockPos(context.getSource().getPosition())); Claim claim = ClaimStorage.get(world).getClaimAt(new BlockPos(context.getSource().getPosition()));
boolean admin = claim != null && claim.isAdminClaim(); boolean admin = claim != null && claim.isAdminClaim();
String serverWorld = world.getRegistryKey().getValue().toString(); String serverWorld = world.getRegistryKey().getValue().toString();
EnumMap<EnumPermission,Boolean> global = ConfigHandler.config.globalDefaultPerms.get(serverWorld); Map<ClaimPermission, Boolean> global = ConfigHandler.config.globalDefaultPerms.get(serverWorld);
for (EnumPermission perm : EnumPermission.values()) { for (ClaimPermission perm : PermissionRegistry.getPerms()) {
if(!admin && global!=null && global.containsKey(perm)) { if (!admin && global != null && global.containsKey(perm)) {
continue; continue;
} }
if (!group || !perm.isAlwaysGlobalPerm()) if (!group || !PermissionRegistry.globalPerms().contains(perm))
build.suggest(perm.toString()); build.suggest(perm.id);
} }
return build.buildFuture(); return build.buildFuture();
} }
@ -544,17 +544,17 @@ public class CommandClaim {
PermHelper.noClaimMessage(player); PermHelper.noClaimMessage(player);
return 0; return 0;
} }
if (!claim.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) { if (!claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermission, Formatting.DARK_RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermission, Formatting.DARK_RED), false);
return 0; return 0;
} }
EnumPermission perm; ClaimPermission perm;
String p = StringArgumentType.getString(context, "permission"); String p = StringArgumentType.getString(context, "permission");
try { try {
perm = EnumPermission.valueOf(p); perm = PermissionRegistry.get(p);
if (group != null && perm.isAlwaysGlobalPerm()) if (group != null && PermissionRegistry.globalPerms().contains(perm))
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} catch (IllegalArgumentException e) { } catch (NullPointerException e) {
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.noSuchPerm, p), Formatting.DARK_RED), false); player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.noSuchPerm, p), Formatting.DARK_RED), false);
return 0; return 0;
} }

View File

@ -1,7 +1,8 @@
package com.flemmli97.flan.config; package com.flemmli97.flan.config;
import com.flemmli97.flan.Flan; import com.flemmli97.flan.Flan;
import com.flemmli97.flan.claim.EnumPermission; import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
@ -17,7 +18,6 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.EnumMap;
import java.util.Map; import java.util.Map;
public class Config { public class Config {
@ -42,7 +42,7 @@ public class Config {
public boolean log; public boolean log;
public final Map<String,EnumMap<EnumPermission,Boolean>> globalDefaultPerms = Maps.newHashMap(); public final Map<String, Map<ClaimPermission, Boolean>> globalDefaultPerms = Maps.newHashMap();
public Config(MinecraftServer server) { public Config(MinecraftServer server) {
File configDir = FabricLoader.getInstance().getConfigDir().resolve("flan").toFile(); File configDir = FabricLoader.getInstance().getConfigDir().resolve("flan").toFile();
@ -77,22 +77,21 @@ public class Config {
for (int i = 0; i < arr.size(); i++) for (int i = 0; i < arr.size(); i++)
this.blacklistedWorlds[i] = arr.get(i).getAsString(); this.blacklistedWorlds[i] = arr.get(i).getAsString();
this.worldWhitelist = ConfigHandler.fromJson(obj, "worldWhitelist", this.worldWhitelist); this.worldWhitelist = ConfigHandler.fromJson(obj, "worldWhitelist", this.worldWhitelist);
if(obj.has("claimingItem")) if (obj.has("claimingItem"))
this.claimingItem = Registry.ITEM.get(new Identifier((obj.get("claimingItem").getAsString()))); this.claimingItem = Registry.ITEM.get(new Identifier((obj.get("claimingItem").getAsString())));
if(obj.has("inspectionItem")) if (obj.has("inspectionItem"))
this.inspectionItem = Registry.ITEM.get(new Identifier((obj.get("inspectionItem").getAsString()))); this.inspectionItem = Registry.ITEM.get(new Identifier((obj.get("inspectionItem").getAsString())));
this.claimDisplayTime = ConfigHandler.fromJson(obj, "claimDisplayTime", this.claimDisplayTime); this.claimDisplayTime = ConfigHandler.fromJson(obj, "claimDisplayTime", this.claimDisplayTime);
this.globalDefaultPerms.clear(); this.globalDefaultPerms.clear();
JsonObject glob = ConfigHandler.fromJson(obj, "globalDefaultPerms"); JsonObject glob = ConfigHandler.fromJson(obj, "globalDefaultPerms");
glob.entrySet().forEach(e->{ glob.entrySet().forEach(e -> {
EnumMap<EnumPermission, Boolean> perms = new EnumMap<>(EnumPermission.class); Map<ClaimPermission, Boolean> perms = Maps.newHashMap();
if(e.getValue().isJsonObject()){ if (e.getValue().isJsonObject()) {
e.getValue().getAsJsonObject().entrySet().forEach(jperm->{ e.getValue().getAsJsonObject().entrySet().forEach(jperm -> {
try{ try {
perms.put(EnumPermission.valueOf(jperm.getKey()), jperm.getValue().getAsBoolean()); perms.put(PermissionRegistry.get(jperm.getKey()), jperm.getValue().getAsBoolean());
} } catch (NullPointerException ex) {
catch (IllegalArgumentException ex){ Flan.log("No permission with name {}", jperm.getKey());
Flan.log("No permmission with name {}", jperm.getKey());
} }
}); });
} }
@ -125,7 +124,7 @@ public class Config {
JsonObject global = new JsonObject(); JsonObject global = new JsonObject();
this.globalDefaultPerms.forEach((key, value) -> { this.globalDefaultPerms.forEach((key, value) -> {
JsonObject perm = new JsonObject(); JsonObject perm = new JsonObject();
value.forEach((key1, value1) -> perm.addProperty(key1.toString(), value1)); value.forEach((key1, value1) -> perm.addProperty(key1.id, value1));
global.add(key, perm); global.add(key, perm);
}); });
obj.add("globalDefaultPerms", global); obj.add("globalDefaultPerms", global);
@ -139,7 +138,8 @@ public class Config {
} }
} }
public boolean globallyDefined(ServerWorld world, EnumPermission perm){ public boolean globallyDefined(ServerWorld world, ClaimPermission perm) {
EnumMap<EnumPermission,Boolean> global = ConfigHandler.config.globalDefaultPerms.get(world.getRegistryKey().getValue().toString()); Map<ClaimPermission, Boolean> global = ConfigHandler.config.globalDefaultPerms.get(world.getRegistryKey().getValue().toString());
return global != null && global.containsKey(perm); return global != null && global.containsKey(perm);
}} }
}

View File

@ -24,47 +24,42 @@ public class ConfigHandler {
lang.load(); lang.load();
} }
public static int fromJson(JsonObject obj, String key, int fallback){ public static int fromJson(JsonObject obj, String key, int fallback) {
try { try {
return obj.get(key).getAsInt(); return obj.get(key).getAsInt();
} } catch (NullPointerException | UnsupportedOperationException e) {
catch (NullPointerException | UnsupportedOperationException e){
return fallback; return fallback;
} }
} }
public static boolean fromJson(JsonObject obj, String key, boolean fallback){ public static boolean fromJson(JsonObject obj, String key, boolean fallback) {
try { try {
return obj.get(key).getAsBoolean(); return obj.get(key).getAsBoolean();
} } catch (NullPointerException | UnsupportedOperationException e) {
catch (NullPointerException | UnsupportedOperationException e){
return fallback; return fallback;
} }
} }
public static String fromJson(JsonObject obj, String key, String fallback){ public static String fromJson(JsonObject obj, String key, String fallback) {
try { try {
return obj.get(key).getAsString(); return obj.get(key).getAsString();
} } catch (NullPointerException | UnsupportedOperationException e) {
catch (NullPointerException | UnsupportedOperationException e){
return fallback; return fallback;
} }
} }
public static JsonObject fromJson(JsonObject obj, String key){ public static JsonObject fromJson(JsonObject obj, String key) {
try { try {
return obj.get(key).getAsJsonObject(); return obj.get(key).getAsJsonObject();
} } catch (NullPointerException | UnsupportedOperationException e) {
catch (NullPointerException | UnsupportedOperationException e){
return new JsonObject(); return new JsonObject();
} }
} }
public static JsonArray arryFromJson(JsonObject obj, String key){ public static JsonArray arryFromJson(JsonObject obj, String key) {
try { try {
return obj.get(key).getAsJsonArray(); return obj.get(key).getAsJsonArray();
} } catch (NullPointerException | UnsupportedOperationException e) {
catch (NullPointerException | UnsupportedOperationException e){
return new JsonArray(); return new JsonArray();
} }
} }

View File

@ -1,6 +1,7 @@
package com.flemmli97.flan.config; package com.flemmli97.flan.config;
import com.flemmli97.flan.claim.EnumPermission; import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@ -102,9 +103,9 @@ public class LangConfig {
field.set(this, obj.get(field.getName()).getAsString()); field.set(this, obj.get(field.getName()).getAsString());
} }
} }
for(EnumPermission perm : EnumPermission.values()){ for (ClaimPermission perm : PermissionRegistry.getPerms()) {
if(obj.has(perm.toString()+".desc")) if (obj.has(perm.id + ".desc"))
perm.translation = obj.get(perm.toString()+".desc").getAsString(); perm.desc = obj.get(perm.id + ".desc").getAsString();
} }
} catch (IOException | IllegalAccessException e) { } catch (IOException | IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
@ -120,8 +121,8 @@ public class LangConfig {
obj.addProperty(field.getName(), (String) field.get(this)); obj.addProperty(field.getName(), (String) field.get(this));
} }
} }
for(EnumPermission perm : EnumPermission.values()) for (ClaimPermission perm : PermissionRegistry.getPerms())
obj.addProperty(perm.toString()+".desc", perm.translation); obj.addProperty(perm.id + ".desc", perm.desc);
FileWriter writer = new FileWriter(this.config); FileWriter writer = new FileWriter(this.config);
ConfigHandler.GSON.toJson(obj, writer); ConfigHandler.GSON.toJson(obj, writer);
writer.close(); writer.close();

View File

@ -1,8 +1,9 @@
package com.flemmli97.flan.event; package com.flemmli97.flan.event;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.BlockToPermissionMap; import com.flemmli97.flan.claim.BlockToPermissionMap;
import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer; import com.flemmli97.flan.claim.IPermissionContainer;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import com.flemmli97.flan.gui.LockedLecternScreenHandler; import com.flemmli97.flan.gui.LockedLecternScreenHandler;
@ -32,14 +33,14 @@ import net.minecraft.world.World;
public class BlockInteractEvents { public class BlockInteractEvents {
public static boolean breakBlocks(World world, PlayerEntity p, BlockPos pos, BlockState state, BlockEntity tile){ public static boolean breakBlocks(World world, PlayerEntity p, BlockPos pos, BlockState state, BlockEntity tile) {
if (world.isClient || p.isSpectator()) if (world.isClient || p.isSpectator())
return true; return true;
ServerPlayerEntity player = (ServerPlayerEntity) p; ServerPlayerEntity player = (ServerPlayerEntity) p;
ClaimStorage storage = ClaimStorage.get((ServerWorld) world); ClaimStorage storage = ClaimStorage.get((ServerWorld) world);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) { if (claim != null) {
if (!claim.canInteract(player, EnumPermission.BREAK, pos, true)) { if (!claim.canInteract(player, PermissionRegistry.BREAK, pos, true)) {
PlayerClaimData.get(player).addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY()); PlayerClaimData.get(player).addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY());
return false; return false;
} }
@ -68,9 +69,9 @@ public class BlockInteractEvents {
boolean cancelBlockInteract = player.shouldCancelInteraction() && emptyHand; boolean cancelBlockInteract = player.shouldCancelInteraction() && emptyHand;
if (!cancelBlockInteract) { if (!cancelBlockInteract) {
BlockState state = world.getBlockState(hitResult.getBlockPos()); BlockState state = world.getBlockState(hitResult.getBlockPos());
EnumPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock()); ClaimPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock());
//Pressureplate handled elsewhere //Pressureplate handled elsewhere
if (perm != null && perm != EnumPermission.PRESSUREPLATE) { if (perm != null && perm != PermissionRegistry.PRESSUREPLATE) {
if (claim.canInteract(player, perm, hitResult.getBlockPos(), true)) if (claim.canInteract(player, perm, hitResult.getBlockPos(), true))
return ActionResult.PASS; return ActionResult.PASS;
if (state.getBlock() instanceof DoorBlock) { if (state.getBlock() instanceof DoorBlock) {
@ -89,14 +90,14 @@ public class BlockInteractEvents {
BlockEntity blockEntity = world.getBlockEntity(hitResult.getBlockPos()); BlockEntity blockEntity = world.getBlockEntity(hitResult.getBlockPos());
if (blockEntity != null) { if (blockEntity != null) {
if (blockEntity instanceof LecternBlockEntity) { if (blockEntity instanceof LecternBlockEntity) {
if (claim.canInteract(player, EnumPermission.LECTERNTAKE, hitResult.getBlockPos(), false)) if (claim.canInteract(player, PermissionRegistry.LECTERNTAKE, hitResult.getBlockPos(), false))
return ActionResult.PASS; return ActionResult.PASS;
if (state.get(LecternBlock.HAS_BOOK)) if (state.get(LecternBlock.HAS_BOOK))
LockedLecternScreenHandler.create(player, (LecternBlockEntity) blockEntity); LockedLecternScreenHandler.create(player, (LecternBlockEntity) blockEntity);
return ActionResult.FAIL; return ActionResult.FAIL;
} }
if (!ConfigHandler.config.lenientBlockEntityCheck || blockEntity instanceof Inventory || blockEntity instanceof InventoryProvider) { if (!ConfigHandler.config.lenientBlockEntityCheck || blockEntity instanceof Inventory || blockEntity instanceof InventoryProvider) {
if (claim.canInteract(player, EnumPermission.OPENCONTAINER, hitResult.getBlockPos(), true)) if (claim.canInteract(player, PermissionRegistry.OPENCONTAINER, hitResult.getBlockPos(), true))
return ActionResult.PASS; return ActionResult.PASS;
PlayerClaimData.get(player).addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY()); PlayerClaimData.get(player).addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY());
return ActionResult.FAIL; return ActionResult.FAIL;
@ -111,16 +112,20 @@ public class BlockInteractEvents {
if (entity.world.isClient) if (entity.world.isClient)
return false; return false;
if (entity instanceof ServerPlayerEntity) { if (entity instanceof ServerPlayerEntity) {
EnumPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock()); ClaimPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock());
if (perm != EnumPermission.PRESSUREPLATE && perm != EnumPermission.PORTAL) if (perm == null)
return false;
if (perm != PermissionRegistry.PRESSUREPLATE && perm != PermissionRegistry.PORTAL)
return false; return false;
ClaimStorage storage = ClaimStorage.get((ServerWorld) world); ClaimStorage storage = ClaimStorage.get((ServerWorld) world);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) if (claim != null)
return !claim.canInteract((ServerPlayerEntity) entity, perm, pos, false); return !claim.canInteract((ServerPlayerEntity) entity, perm, pos, false);
} else if (entity instanceof ProjectileEntity) { } else if (entity instanceof ProjectileEntity) {
EnumPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock()); ClaimPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock());
if (perm != EnumPermission.PRESSUREPLATE && perm != EnumPermission.BUTTONLEVER) if (perm == null)
return false;
if (perm != PermissionRegistry.PRESSUREPLATE && perm != PermissionRegistry.BUTTONLEVER)
return false; return false;
Entity owner = ((ProjectileEntity) entity).getOwner(); Entity owner = ((ProjectileEntity) entity).getOwner();
if (owner instanceof ServerPlayerEntity) { if (owner instanceof ServerPlayerEntity) {
@ -137,21 +142,23 @@ public class BlockInteractEvents {
if (entity.world.isClient) if (entity.world.isClient)
return false; return false;
if (entity instanceof ServerPlayerEntity) { if (entity instanceof ServerPlayerEntity) {
ClaimPermission perm = BlockToPermissionMap.getFromBlock(landedState.getBlock());
if (perm != PermissionRegistry.TRAMPLE)
return false;
ClaimStorage storage = ClaimStorage.get((ServerWorld) entity.world); ClaimStorage storage = ClaimStorage.get((ServerWorld) entity.world);
IPermissionContainer claim = storage.getForPermissionCheck(landedPosition); IPermissionContainer claim = storage.getForPermissionCheck(landedPosition);
if(claim==null) if (claim == null)
return false; return false;
EnumPermission perm = BlockToPermissionMap.getFromBlock(landedState.getBlock()); return !claim.canInteract((ServerPlayerEntity) entity, perm, landedPosition, true);
if (perm == EnumPermission.TRAMPLE)
return !claim.canInteract((ServerPlayerEntity) entity, perm, landedPosition, true);
} else if (entity instanceof ProjectileEntity) { } else if (entity instanceof ProjectileEntity) {
Entity owner = ((ProjectileEntity) entity).getOwner(); Entity owner = ((ProjectileEntity) entity).getOwner();
if (owner instanceof ServerPlayerEntity) { if (owner instanceof ServerPlayerEntity) {
ClaimPermission perm = BlockToPermissionMap.getFromBlock(landedState.getBlock());
if (perm != PermissionRegistry.TRAMPLE)
return false;
ClaimStorage storage = ClaimStorage.get((ServerWorld) entity.world); ClaimStorage storage = ClaimStorage.get((ServerWorld) entity.world);
IPermissionContainer claim = storage.getForPermissionCheck(landedPosition); IPermissionContainer claim = storage.getForPermissionCheck(landedPosition);
EnumPermission perm = BlockToPermissionMap.getFromBlock(landedState.getBlock()); return !claim.canInteract((ServerPlayerEntity) owner, perm, landedPosition, true);
if (perm == EnumPermission.TRAMPLE)
return !claim.canInteract((ServerPlayerEntity) owner, perm, landedPosition, true);
} }
} }
return false; return false;
@ -164,26 +171,26 @@ public class BlockInteractEvents {
if (entity instanceof ServerPlayerEntity) { if (entity instanceof ServerPlayerEntity) {
ClaimStorage storage = ClaimStorage.get(serverWorld); ClaimStorage storage = ClaimStorage.get(serverWorld);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if(claim==null) if (claim == null)
return false; return false;
return !claim.canInteract((ServerPlayerEntity) entity, EnumPermission.TRAMPLE, pos, true); return !claim.canInteract((ServerPlayerEntity) entity, PermissionRegistry.TRAMPLE, pos, true);
} else if (entity instanceof ProjectileEntity) { } else if (entity instanceof ProjectileEntity) {
Entity owner = ((ProjectileEntity) entity).getOwner(); Entity owner = ((ProjectileEntity) entity).getOwner();
if (owner instanceof ServerPlayerEntity) { if (owner instanceof ServerPlayerEntity) {
ClaimStorage storage = ClaimStorage.get(serverWorld); ClaimStorage storage = ClaimStorage.get(serverWorld);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if(claim==null) if (claim == null)
return false; return false;
return !claim.canInteract((ServerPlayerEntity) owner, EnumPermission.TRAMPLE, pos, true); return !claim.canInteract((ServerPlayerEntity) owner, PermissionRegistry.TRAMPLE, pos, true);
} }
} else if (entity instanceof ItemEntity) { } else if (entity instanceof ItemEntity) {
Entity owner = serverWorld.getEntity(((ItemEntity) entity).getThrower()); Entity owner = serverWorld.getEntity(((ItemEntity) entity).getThrower());
if (owner instanceof ServerPlayerEntity) { if (owner instanceof ServerPlayerEntity) {
ClaimStorage storage = ClaimStorage.get(serverWorld); ClaimStorage storage = ClaimStorage.get(serverWorld);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if(claim==null) if (claim == null)
return false; return false;
return !claim.canInteract((ServerPlayerEntity) owner, EnumPermission.TRAMPLE, pos, true); return !claim.canInteract((ServerPlayerEntity) owner, PermissionRegistry.TRAMPLE, pos, true);
} }
} }
return false; return false;

View File

@ -1,8 +1,9 @@
package com.flemmli97.flan.event; package com.flemmli97.flan.event;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.BlockToPermissionMap; import com.flemmli97.flan.claim.BlockToPermissionMap;
import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer; import com.flemmli97.flan.claim.IPermissionContainer;
import com.flemmli97.flan.mixin.IPersistentProjectileVars; import com.flemmli97.flan.mixin.IPersistentProjectileVars;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -49,7 +50,7 @@ public class EntityInteractEvents {
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) { if (claim != null) {
if (entity instanceof ArmorStandEntity) { if (entity instanceof ArmorStandEntity) {
if (!claim.canInteract((ServerPlayerEntity) player, EnumPermission.ARMORSTAND, pos, true)) if (!claim.canInteract((ServerPlayerEntity) player, PermissionRegistry.ARMORSTAND, pos, true))
return ActionResult.FAIL; return ActionResult.FAIL;
} }
} }
@ -65,22 +66,22 @@ public class EntityInteractEvents {
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) { if (claim != null) {
if (entity instanceof BoatEntity) if (entity instanceof BoatEntity)
return claim.canInteract(player, EnumPermission.BOAT, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.BOAT, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
if (entity instanceof AbstractMinecartEntity) { if (entity instanceof AbstractMinecartEntity) {
if (entity instanceof StorageMinecartEntity) if (entity instanceof StorageMinecartEntity)
return claim.canInteract(player, EnumPermission.OPENCONTAINER, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.OPENCONTAINER, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
return claim.canInteract(player, EnumPermission.MINECART, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.MINECART, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
} }
if (entity instanceof VillagerEntity) if (entity instanceof VillagerEntity)
return claim.canInteract(player, EnumPermission.TRADING, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.TRADING, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
if (entity instanceof ItemFrameEntity) if (entity instanceof ItemFrameEntity)
return claim.canInteract(player, EnumPermission.ITEMFRAMEROTATE, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.ITEMFRAMEROTATE, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
if(entity instanceof TameableEntity){ if (entity instanceof TameableEntity) {
TameableEntity tame = (TameableEntity) entity; TameableEntity tame = (TameableEntity) entity;
if(tame.isOwner(player)) if (tame.isOwner(player))
return ActionResult.PASS; return ActionResult.PASS;
} }
return claim.canInteract(player, EnumPermission.ANIMALINTERACT, pos, true) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.ANIMALINTERACT, pos, true) ? ActionResult.PASS : ActionResult.FAIL;
} }
return ActionResult.PASS; return ActionResult.PASS;
} }
@ -95,10 +96,10 @@ public class EntityInteractEvents {
BlockHitResult blockRes = (BlockHitResult) res; BlockHitResult blockRes = (BlockHitResult) res;
BlockPos pos = blockRes.getBlockPos(); BlockPos pos = blockRes.getBlockPos();
BlockState state = proj.world.getBlockState(pos); BlockState state = proj.world.getBlockState(pos);
EnumPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock()); ClaimPermission perm = BlockToPermissionMap.getFromBlock(state.getBlock());
if (proj instanceof EnderPearlEntity) if (proj instanceof EnderPearlEntity)
perm = EnumPermission.ENDERPEARL; perm = PermissionRegistry.ENDERPEARL;
if (perm != EnumPermission.ENDERPEARL && perm != EnumPermission.TARGETBLOCK && perm != EnumPermission.PROJECTILES) if (perm != PermissionRegistry.ENDERPEARL && perm != PermissionRegistry.TARGETBLOCK && perm != PermissionRegistry.PROJECTILES)
return false; return false;
ClaimStorage storage = ClaimStorage.get((ServerWorld) proj.world); ClaimStorage storage = ClaimStorage.get((ServerWorld) proj.world);
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
@ -130,7 +131,7 @@ public class EntityInteractEvents {
if (proj instanceof EnderPearlEntity) { if (proj instanceof EnderPearlEntity) {
ClaimStorage storage = ClaimStorage.get((ServerWorld) proj.world); ClaimStorage storage = ClaimStorage.get((ServerWorld) proj.world);
IPermissionContainer claim = storage.getForPermissionCheck(proj.getBlockPos()); IPermissionContainer claim = storage.getForPermissionCheck(proj.getBlockPos());
return claim.canInteract(player, EnumPermission.ENDERPEARL, proj.getBlockPos(), true); return claim.canInteract(player, PermissionRegistry.ENDERPEARL, proj.getBlockPos(), true);
} }
return attackSimple(player, ((EntityHitResult) res).getEntity(), true) != ActionResult.PASS; return attackSimple(player, ((EntityHitResult) res).getEntity(), true) != ActionResult.PASS;
} }
@ -143,7 +144,7 @@ public class EntityInteractEvents {
return attackSimple((ServerPlayerEntity) source.getAttacker(), entity, false) != ActionResult.PASS; return attackSimple((ServerPlayerEntity) source.getAttacker(), entity, false) != ActionResult.PASS;
else if (source.isExplosive() && !entity.world.isClient) { else if (source.isExplosive() && !entity.world.isClient) {
IPermissionContainer claim = ClaimStorage.get((ServerWorld) entity.world).getForPermissionCheck(entity.getBlockPos()); IPermissionContainer claim = ClaimStorage.get((ServerWorld) entity.world).getForPermissionCheck(entity.getBlockPos());
return claim != null && !claim.canInteract(null, EnumPermission.EXPLOSIONS, entity.getBlockPos()); return claim != null && !claim.canInteract(null, PermissionRegistry.EXPLOSIONS, entity.getBlockPos());
} }
return false; return false;
} }
@ -159,10 +160,10 @@ public class EntityInteractEvents {
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) { if (claim != null) {
if (entity instanceof ArmorStandEntity || entity instanceof MinecartEntity || entity instanceof BoatEntity || entity instanceof ItemFrameEntity) if (entity instanceof ArmorStandEntity || entity instanceof MinecartEntity || entity instanceof BoatEntity || entity instanceof ItemFrameEntity)
return claim.canInteract(player, EnumPermission.BREAKNONLIVING, pos, message) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.BREAKNONLIVING, pos, message) ? ActionResult.PASS : ActionResult.FAIL;
if (entity instanceof PlayerEntity) if (entity instanceof PlayerEntity)
return claim.canInteract(player, EnumPermission.HURTPLAYER, pos, message) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.HURTPLAYER, pos, message) ? ActionResult.PASS : ActionResult.FAIL;
return claim.canInteract(player, EnumPermission.HURTANIMAL, pos, message) ? ActionResult.PASS : ActionResult.FAIL; return claim.canInteract(player, PermissionRegistry.HURTANIMAL, pos, message) ? ActionResult.PASS : ActionResult.FAIL;
} }
return ActionResult.PASS; return ActionResult.PASS;
} }
@ -173,7 +174,7 @@ public class EntityInteractEvents {
BlockPos pos = player.getBlockPos(); BlockPos pos = player.getBlockPos();
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) if (claim != null)
return !claim.canInteract((ServerPlayerEntity) player, EnumPermission.XP, pos, false); return !claim.canInteract((ServerPlayerEntity) player, PermissionRegistry.XP, pos, false);
} }
return false; return false;
} }

View File

@ -1,8 +1,8 @@
package com.flemmli97.flan.event; package com.flemmli97.flan.event;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim; import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer; import com.flemmli97.flan.claim.IPermissionContainer;
import com.flemmli97.flan.claim.PermHelper; import com.flemmli97.flan.claim.PermHelper;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
@ -64,9 +64,9 @@ public class ItemInteractEvents {
if (claim == null) if (claim == null)
return TypedActionResult.pass(stack); return TypedActionResult.pass(stack);
if (stack.getItem() == Items.ENDER_PEARL) if (stack.getItem() == Items.ENDER_PEARL)
return claim.canInteract(player, EnumPermission.ENDERPEARL, pos, true) ? TypedActionResult.pass(stack) : TypedActionResult.fail(stack); return claim.canInteract(player, PermissionRegistry.ENDERPEARL, pos, true) ? TypedActionResult.pass(stack) : TypedActionResult.fail(stack);
if (stack.getItem() instanceof BucketItem) if (stack.getItem() instanceof BucketItem)
return claim.canInteract(player, EnumPermission.BUCKET, pos, true) ? TypedActionResult.pass(stack) : TypedActionResult.fail(stack); return claim.canInteract(player, PermissionRegistry.BUCKET, pos, true) ? TypedActionResult.pass(stack) : TypedActionResult.fail(stack);
return TypedActionResult.pass(stack); return TypedActionResult.pass(stack);
} }
@ -86,14 +86,14 @@ public class ItemInteractEvents {
boolean actualInClaim = !(claim instanceof Claim) || placePos.getY() >= ((Claim) claim).getDimensions()[4]; boolean actualInClaim = !(claim instanceof Claim) || placePos.getY() >= ((Claim) claim).getDimensions()[4];
ServerPlayerEntity player = (ServerPlayerEntity) context.getPlayer(); ServerPlayerEntity player = (ServerPlayerEntity) context.getPlayer();
if (context.getStack().getItem() == Items.END_CRYSTAL) { if (context.getStack().getItem() == Items.END_CRYSTAL) {
if (claim.canInteract(player, EnumPermission.ENDCRYSTALPLACE, placePos, false)) if (claim.canInteract(player, PermissionRegistry.ENDCRYSTALPLACE, placePos, false))
return ActionResult.PASS; return ActionResult.PASS;
else if (actualInClaim) { else if (actualInClaim) {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true);
return ActionResult.FAIL; return ActionResult.FAIL;
} }
} }
if (claim.canInteract(player, EnumPermission.PLACE, placePos, false)) { if (claim.canInteract(player, PermissionRegistry.PLACE, placePos, false)) {
if (!actualInClaim && context.getStack().getItem() instanceof BlockItem) { if (!actualInClaim && context.getStack().getItem() instanceof BlockItem) {
((Claim) claim).extendDownwards(placePos); ((Claim) claim).extendDownwards(placePos);
} }
@ -134,7 +134,7 @@ public class ItemInteractEvents {
return; return;
data.setClaimActionCooldown(); data.setClaimActionCooldown();
if (claim != null) { if (claim != null) {
if (claim.canInteract(player, EnumPermission.EDITCLAIM, target)) { if (claim.canInteract(player, PermissionRegistry.EDITCLAIM, target)) {
if (data.getEditMode() == EnumEditMode.SUBCLAIM) { if (data.getEditMode() == EnumEditMode.SUBCLAIM) {
Claim subClaim = claim.getSubClaim(target); Claim subClaim = claim.getSubClaim(target);
if (subClaim != null && data.currentEdit() == null) { if (subClaim != null && data.currentEdit() == null) {

View File

@ -1,7 +1,7 @@
package com.flemmli97.flan.event; package com.flemmli97.flan.event;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer; import com.flemmli97.flan.claim.IPermissionContainer;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.piston.PistonBehavior; import net.minecraft.block.piston.PistonBehavior;
@ -20,7 +20,7 @@ public class WorldEvents {
explosion.getAffectedBlocks().removeIf(pos -> { explosion.getAffectedBlocks().removeIf(pos -> {
IPermissionContainer claim = storage.getForPermissionCheck(pos); IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null) if (claim != null)
return !claim.canInteract(null, EnumPermission.EXPLOSIONS, pos); return !claim.canInteract(null, PermissionRegistry.EXPLOSIONS, pos);
return false; return false;
}); });
} }
@ -64,11 +64,11 @@ public class WorldEvents {
public static boolean canStartRaid(ServerPlayerEntity player) { public static boolean canStartRaid(ServerPlayerEntity player) {
IPermissionContainer claim = ClaimStorage.get(player.getServerWorld()).getForPermissionCheck(player.getBlockPos()); IPermissionContainer claim = ClaimStorage.get(player.getServerWorld()).getForPermissionCheck(player.getBlockPos());
return claim == null || claim.canInteract(player, EnumPermission.RAID, player.getBlockPos()); return claim == null || claim.canInteract(player, PermissionRegistry.RAID, player.getBlockPos());
} }
public static boolean canFireSpread(ServerWorld world, BlockPos pos) { public static boolean canFireSpread(ServerWorld world, BlockPos pos) {
IPermissionContainer claim = ClaimStorage.get(world).getForPermissionCheck(pos); IPermissionContainer claim = ClaimStorage.get(world).getForPermissionCheck(pos);
return claim == null || claim.canInteract(null, EnumPermission.FIRESPREAD, pos); return claim == null || claim.canInteract(null, PermissionRegistry.FIRESPREAD, pos);
} }
} }

View File

@ -1,7 +1,7 @@
package com.flemmli97.flan.gui; package com.flemmli97.flan.gui;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim; import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper; import com.flemmli97.flan.claim.PermHelper;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
@ -95,7 +95,7 @@ public class GroupScreenHandler extends ServerOnlyScreenHandler {
if (index == 3) { if (index == 3) {
player.closeHandledScreen(); player.closeHandledScreen();
player.getServer().execute(() -> StringResultScreenHandler.createNewStringResult(player, this.claim, (s) -> { player.getServer().execute(() -> StringResultScreenHandler.createNewStringResult(player, this.claim, (s) -> {
this.claim.editPerms(player, s, EnumPermission.EDITPERMS, -1); this.claim.editPerms(player, s, PermissionRegistry.EDITPERMS, -1);
player.closeHandledScreen(); player.closeHandledScreen();
player.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim)); player.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_ANVIL_USE, 1, 1f); ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_ANVIL_USE, 1, 1f);

View File

@ -1,8 +1,10 @@
package com.flemmli97.flan.gui; package com.flemmli97.flan.gui;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim; import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper; import com.flemmli97.flan.claim.PermHelper;
import com.google.common.collect.Lists;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory; import net.minecraft.inventory.Inventory;
@ -18,6 +20,8 @@ import net.minecraft.text.Style;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import java.util.List;
public class PermissionScreenHandler extends ServerOnlyScreenHandler { public class PermissionScreenHandler extends ServerOnlyScreenHandler {
private final Claim claim; private final Claim claim;
@ -63,6 +67,9 @@ public class PermissionScreenHandler extends ServerOnlyScreenHandler {
@Override @Override
protected void fillInventoryWith(PlayerEntity player, Inventory inv, Object... additionalData) { protected void fillInventoryWith(PlayerEntity player, Inventory inv, Object... additionalData) {
List<ClaimPermission> perms = Lists.newArrayList(PermissionRegistry.getPerms());
if (this.group != null)
perms.removeAll(PermissionRegistry.globalPerms());
for (int i = 0; i < 54; i++) { for (int i = 0; i < 54; i++) {
int page = (int) additionalData[2]; int page = (int) additionalData[2];
if (i == 0) { if (i == 0) {
@ -82,31 +89,32 @@ public class PermissionScreenHandler extends ServerOnlyScreenHandler {
else { else {
int row = i / 9 - 1; int row = i / 9 - 1;
int id = (i % 9) + row * 7 - 1 + page * 28; int id = (i % 9) + row * 7 - 1 + page * 28;
int length = EnumPermission.values().length; if (id < perms.size())
if (this.group != null) inv.setStack(i, ServerScreenHelper.fromPermission((Claim) additionalData[0], perms.get(id), additionalData[1] == null ? null : additionalData[1].toString()));
length -= EnumPermission.alwaysGlobalLength();
if (id < length)
inv.setStack(i, ServerScreenHelper.fromPermission((Claim) additionalData[0], EnumPermission.values()[id], additionalData[1] == null ? null : additionalData[1].toString()));
} }
} }
} }
private void flipPage() { private void flipPage() {
List<ClaimPermission> perms = Lists.newArrayList(PermissionRegistry.getPerms());
if (this.group != null)
perms.removeAll(PermissionRegistry.globalPerms());
int maxPages = perms.size() / 28;
for (int i = 0; i < 54; i++) { for (int i = 0; i < 54; i++) {
if (i == 0) { if (i == 0) {
ItemStack close = new ItemStack(Items.TNT); ItemStack close = new ItemStack(Items.TNT);
close.setCustomName(new LiteralText("Back").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED))); close.setCustomName(new LiteralText("Back").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED)));
this.slots.get(i).setStack(close); this.slots.get(i).setStack(close);
} else if (i == 47) { } else if (i == 47) {
ItemStack stack = ItemStack.EMPTY; ItemStack stack = ServerScreenHelper.emptyFiller();
if (this.page == 1) { if (this.page >= 1) {
stack = new ItemStack(Items.ARROW); stack = new ItemStack(Items.ARROW);
stack.setCustomName(new LiteralText("Prev").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE))); stack.setCustomName(new LiteralText("Prev").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE)));
} }
this.slots.get(i).setStack(stack); this.slots.get(i).setStack(stack);
} else if (i == 51) { } else if (i == 51) {
ItemStack stack = ItemStack.EMPTY; ItemStack stack = ServerScreenHelper.emptyFiller();
if (this.page == 0) { if (this.page < maxPages) {
stack = new ItemStack(Items.ARROW); stack = new ItemStack(Items.ARROW);
stack.setCustomName(new LiteralText("Next").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE))); stack.setCustomName(new LiteralText("Next").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE)));
} }
@ -116,11 +124,8 @@ public class PermissionScreenHandler extends ServerOnlyScreenHandler {
else { else {
int row = i / 9 - 1; int row = i / 9 - 1;
int id = (i % 9) + row * 7 - 1 + this.page * 28; int id = (i % 9) + row * 7 - 1 + this.page * 28;
int length = EnumPermission.values().length; if (id < perms.size()) {
if (this.group != null) this.slots.get(i).setStack(ServerScreenHelper.fromPermission(this.claim, perms.get(id), this.group));
length -= EnumPermission.alwaysGlobalLength();
if (id < length) {
this.slots.get(i).setStack(ServerScreenHelper.fromPermission(this.claim, EnumPermission.values()[id], this.group));
} else } else
this.slots.get(i).setStack(ItemStack.EMPTY); this.slots.get(i).setStack(ItemStack.EMPTY);
} }
@ -153,10 +158,10 @@ public class PermissionScreenHandler extends ServerOnlyScreenHandler {
} }
ItemStack stack = slot.getStack(); ItemStack stack = slot.getStack();
String name = stack.getName().asString(); String name = stack.getName().asString();
EnumPermission perm; ClaimPermission perm;
try { try {
perm = EnumPermission.valueOf(name); perm = PermissionRegistry.get(name);
} catch (IllegalArgumentException e) { } catch (NullPointerException e) {
return false; return false;
} }
boolean success; boolean success;
@ -170,7 +175,7 @@ public class PermissionScreenHandler extends ServerOnlyScreenHandler {
} else } else
success = this.claim.editPerms(player, this.group, perm, this.claim.groupHasPerm(this.group, perm) + 1); success = this.claim.editPerms(player, this.group, perm, this.claim.groupHasPerm(this.group, perm) + 1);
slot.setStack(ServerScreenHelper.fromPermission(this.claim, perm, this.group)); slot.setStack(ServerScreenHelper.fromPermission(this.claim, perm, this.group));
if(success) if (success)
ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_NOTE_BLOCK_PLING, 1, 1.2f); ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_NOTE_BLOCK_PLING, 1, 1.2f);
else else
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ENTITY_VILLAGER_NO, 1, 1f); ServerScreenHelper.playSongToPlayer(player, SoundEvents.ENTITY_VILLAGER_NO, 1, 1f);

View File

@ -1,7 +1,7 @@
package com.flemmli97.flan.gui; package com.flemmli97.flan.gui;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.claim.Claim; import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper; import com.flemmli97.flan.claim.PermHelper;
import com.flemmli97.flan.config.ConfigHandler; import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -17,7 +17,7 @@ import net.minecraft.text.Style;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import java.util.EnumMap; import java.util.Map;
public class ServerScreenHelper { public class ServerScreenHelper {
@ -27,21 +27,20 @@ public class ServerScreenHelper {
return stack; return stack;
} }
public static ItemStack fromPermission(Claim claim, EnumPermission perm, String group) { public static ItemStack fromPermission(Claim claim, ClaimPermission perm, String group) {
ItemStack stack = perm.getItem(); ItemStack stack = perm.getItem();
stack.setCustomName(new LiteralText(perm.toString()).setStyle(Style.EMPTY.withFormatting(Formatting.GOLD))); stack.setCustomName(new LiteralText(perm.id).setStyle(Style.EMPTY.withFormatting(Formatting.GOLD)));
ListTag lore = new ListTag(); ListTag lore = new ListTag();
Text trans = new LiteralText(perm.translation).setStyle(Style.EMPTY.withFormatting(Formatting.YELLOW)); Text trans = new LiteralText(perm.desc).setStyle(Style.EMPTY.withFormatting(Formatting.YELLOW));
lore.add(StringTag.of(Text.Serializer.toJson(trans))); lore.add(StringTag.of(Text.Serializer.toJson(trans)));
EnumMap<EnumPermission,Boolean> global = ConfigHandler.config.globalDefaultPerms.get(claim.getWorld().getRegistryKey().getValue().toString()); Map<ClaimPermission, Boolean> global = ConfigHandler.config.globalDefaultPerms.get(claim.getWorld().getRegistryKey().getValue().toString());
if(!claim.isAdminClaim() && global!=null && global.containsKey(perm)){ if (!claim.isAdminClaim() && global != null && global.containsKey(perm)) {
Text text = new LiteralText("Non Editable.").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED)); Text text = new LiteralText("Non Editable.").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED));
lore.add(StringTag.of(Text.Serializer.toJson(text))); lore.add(StringTag.of(Text.Serializer.toJson(text)));
String permFlag = global.get(perm).toString(); String permFlag = global.get(perm).toString();
Text text2 = new LiteralText("Enabled: " + permFlag).setStyle(Style.EMPTY.withFormatting(permFlag.equals("true") ? Formatting.GREEN : Formatting.RED)); Text text2 = new LiteralText("Enabled: " + permFlag).setStyle(Style.EMPTY.withFormatting(permFlag.equals("true") ? Formatting.GREEN : Formatting.RED));
lore.add(StringTag.of(Text.Serializer.toJson(text2))); lore.add(StringTag.of(Text.Serializer.toJson(text2)));
} } else {
else {
String permFlag; String permFlag;
if (group == null) { if (group == null) {
if (claim.parentClaim() == null) if (claim.parentClaim() == null)

View File

@ -1,46 +0,0 @@
package com.flemmli97.flan.permission;
import com.flemmli97.flan.claim.Claim;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import java.util.function.Supplier;
/**
* Unused. might expand on this idea later
*/
public class ClaimPermission {
public interface ClaimTest{
boolean test(Claim claim, PlayerEntity player, BlockPos pos, PermissionFlag flag);
}
private static final ClaimTest alwaysTrue = (claim, player, pos, flag)->true;
public enum PermissionFlag{
YES,
NO,
PASS
}
private final Supplier<ItemStack> guiItem;
public String desc;
public final ClaimTest test;
public final String id;
public ClaimPermission(String id, Supplier<ItemStack> guiItem, String defaultDescription){
this(id, guiItem, defaultDescription, alwaysTrue);
}
public ClaimPermission(String id, Supplier<ItemStack> guiItem, String defaultDescription, ClaimTest test){
this.id = id;
this.guiItem = guiItem;
this.desc = defaultDescription;
this.test = test;
}
public ItemStack getItem(){
return this.guiItem.get();
}
}