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;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.BlockToPermissionMap;
import com.flemmli97.flan.commands.CommandClaim;
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.UseEntityCallback;
import net.fabricmc.fabric.api.event.player.UseItemCallback;
import net.minecraft.server.MinecraftServer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -30,17 +32,22 @@ public class Flan implements ModInitializer {
UseItemCallback.EVENT.register(ItemInteractEvents::useItem);
ServerLifecycleEvents.SERVER_STARTING.register(ConfigHandler::serverLoad);
ServerLifecycleEvents.SERVER_STARTING.register(BlockToPermissionMap::reload);
ServerLifecycleEvents.SERVER_STARTING.register(this::lockRegistry);
CommandRegistrationCallback.EVENT.register(CommandClaim::register);
}
public static void log(String msg, Object... o){
if(ConfigHandler.config.log)
public void lockRegistry(MinecraftServer server) {
PermissionRegistry.lock();
}
public static void log(String msg, Object... o) {
if (ConfigHandler.config.log)
logger.info(msg, o);
}
public static void debug(String msg, Object... o){
if(ConfigHandler.config.log)
public static void debug(String msg, Object... o) {
if (ConfigHandler.config.log)
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.google.common.collect.Lists;
import com.google.common.collect.Maps;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;
import net.minecraft.village.raid.Raid;
import java.util.Collection;
import java.util.List;
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> 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 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 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 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"));
@ -63,53 +66,56 @@ public class ClaimPermRegistry {
public static ClaimPermission FIRESPREAD = global(new ClaimPermission("FIRESPREAD", () -> new ItemStack(Items.BLAZE_POWDER), "Toggle firespread in claim"));
private static ClaimPermission register(ClaimPermission perm) {
if (locked || permissions.containsKey(perm.id)) {
return null;
if (locked) {
throw new IllegalStateException("Registering permissions is locked");
}
return permissions.put(perm.id, perm);
permissions.put(perm.id, perm);
return perm;
}
private static ClaimPermission global(ClaimPermission perm) {
if (locked || globalPermissions.containsKey(perm.id)) {
return null;
public static ClaimPermission global(ClaimPermission perm) {
if (locked) {
throw new IllegalStateException("Registering permissions is locked");
}
return globalPermissions.put(perm.id, perm);
globalPermissions.put(perm.id, perm);
return register(perm);
}
public static void lock(){
public static void lock() {
locked = true;
}
public static ClaimPermission get(String id) {
if (!permissions.containsKey(id))
throw new NullPointerException("No such permission registered");
return permissions.get(id);
}
public static Collection<ClaimPermission> getPerms(){
return permissions.values();
public static List<ClaimPermission> getPerms() {
return Lists.newArrayList(permissions.values());
}
public static Collection<ClaimPermission> globalPerms(){
public static Collection<ClaimPermission> globalPerms() {
return globalPermissions.values();
}
public static ClaimPermission registerBreakPerm(ClaimPermission perm, Identifier... affectedBlocks){
public static ClaimPermission registerBreakPerm(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks)
for (Identifier blocks : affectedBlocks)
breakBlocks.put(blocks, perm);
return reg;
}
public static ClaimPermission registerBlockInteract(ClaimPermission perm, Identifier... affectedBlocks){
public static ClaimPermission registerBlockInteract(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks)
for (Identifier blocks : affectedBlocks)
interactBlocks.put(blocks, perm);
return reg;
}
public static ClaimPermission registerItemUse(ClaimPermission perm, Identifier... affectedBlocks){
public static ClaimPermission registerItemUse(ClaimPermission perm, Identifier... affectedBlocks) {
ClaimPermission reg = register(perm);
for(Identifier blocks : affectedBlocks)
for (Identifier blocks : affectedBlocks)
items.put(blocks, perm);
return reg;
}

View File

@ -1,5 +1,7 @@
package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.google.common.collect.Maps;
import net.minecraft.block.AbstractButtonBlock;
import net.minecraft.block.AbstractPressurePlateBlock;
@ -31,46 +33,46 @@ import java.util.Map;
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) {
blockToPermission.clear();
for (Block block : Registry.BLOCK) {
if (block instanceof AnvilBlock)
blockToPermission.put(block, EnumPermission.ANVIL);
blockToPermission.put(block, PermissionRegistry.ANVIL);
if (block instanceof BedBlock)
blockToPermission.put(block, EnumPermission.BED);
blockToPermission.put(block, PermissionRegistry.BED);
if (block instanceof BeaconBlock)
blockToPermission.put(block, EnumPermission.BEACON);
blockToPermission.put(block, PermissionRegistry.BEACON);
if (block instanceof DoorBlock)
blockToPermission.put(block, EnumPermission.DOOR);
blockToPermission.put(block, PermissionRegistry.DOOR);
if (block instanceof FenceGateBlock)
blockToPermission.put(block, EnumPermission.FENCEGATE);
blockToPermission.put(block, PermissionRegistry.FENCEGATE);
if (block instanceof TrapdoorBlock)
blockToPermission.put(block, EnumPermission.TRAPDOOR);
blockToPermission.put(block, PermissionRegistry.TRAPDOOR);
if (block instanceof LeverBlock || block instanceof AbstractButtonBlock)
blockToPermission.put(block, EnumPermission.BUTTONLEVER);
blockToPermission.put(block, PermissionRegistry.BUTTONLEVER);
if (block instanceof NoteBlock)
blockToPermission.put(block, EnumPermission.NOTEBLOCK);
blockToPermission.put(block, PermissionRegistry.NOTEBLOCK);
if (block instanceof AbstractRedstoneGateBlock || block instanceof RedstoneWireBlock || block instanceof DaylightDetectorBlock)
blockToPermission.put(block, EnumPermission.REDSTONE);
blockToPermission.put(block, PermissionRegistry.REDSTONE);
if (block instanceof JukeboxBlock)
blockToPermission.put(block, EnumPermission.JUKEBOX);
blockToPermission.put(block, PermissionRegistry.JUKEBOX);
if (block instanceof AbstractPressurePlateBlock)
blockToPermission.put(block, EnumPermission.PRESSUREPLATE);
blockToPermission.put(block, PermissionRegistry.PRESSUREPLATE);
if (block instanceof NetherPortalBlock)
blockToPermission.put(block, EnumPermission.PORTAL);
blockToPermission.put(block, PermissionRegistry.PORTAL);
if (block instanceof TurtleEggBlock || block instanceof FarmlandBlock)
blockToPermission.put(block, EnumPermission.TRAMPLE);
blockToPermission.put(block, PermissionRegistry.TRAMPLE);
if (block instanceof TargetBlock)
blockToPermission.put(block, EnumPermission.TARGETBLOCK);
blockToPermission.put(block, PermissionRegistry.TARGETBLOCK);
if (block instanceof BellBlock || block instanceof CampfireBlock
|| 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);
}
}

View File

@ -1,5 +1,7 @@
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.player.PlayerClaimData;
import com.google.common.collect.ImmutableList;
@ -13,18 +15,18 @@ import com.mojang.authlib.GameProfile;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class Claim implements IPermissionContainer{
public class Claim implements IPermissionContainer {
private boolean dirty;
private int minX, minZ, maxX, maxZ, minY;
@ -32,8 +34,9 @@ public class Claim implements IPermissionContainer{
private UUID owner;
private UUID claimID;
private final EnumMap<EnumPermission, Boolean> globalPerm = Maps.newEnumMap(EnumPermission.class);
private final Map<String, EnumMap<EnumPermission, Boolean>> permissions = Maps.newHashMap();
private LiteralText claimName;
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();
@ -88,11 +91,20 @@ public class Claim implements IPermissionContainer{
return this.claimID;
}
public LiteralText getClaimName() {
return this.claimName;
}
public void setClaimName(LiteralText name) {
this.claimName = name;
this.setDirty(true);
}
public UUID getOwner() {
return this.owner;
}
public ServerWorld getWorld(){
public ServerWorld getWorld() {
return this.world;
}
@ -168,10 +180,21 @@ public class Claim implements IPermissionContainer{
return this.removed;
}
public boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos, boolean message) {
if(!this.isAdminClaim() && ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())){
EnumMap<EnumPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString());
if(permMap.containsKey(perm)) {
public boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos, boolean message) {
if (perm != null) {
ClaimPermission.PermissionFlag flag = perm.test.test(this, player, pos);
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))
return true;
if (message)
@ -179,7 +202,7 @@ public class Claim implements IPermissionContainer{
return false;
}
}
if (perm.isAlwaysGlobalPerm()) {
if (PermissionRegistry.globalPerms().contains(perm)) {
for (Claim claim : this.subClaims) {
if (claim.insideClaim(pos)) {
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))
return true;
if (perm != EnumPermission.EDITCLAIM && perm != EnumPermission.EDITPERMS)
if (perm != PermissionRegistry.EDITCLAIM && perm != PermissionRegistry.EDITPERMS)
for (Claim claim : this.subClaims) {
if (claim.insideClaim(pos)) {
return claim.canInteract(player, perm, pos, message);
}
}
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.get(perm))
return true;
@ -216,18 +239,18 @@ public class Claim implements IPermissionContainer{
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 -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;
}
private boolean hasPerm(EnumPermission perm) {
private boolean hasPerm(ClaimPermission perm) {
if (this.parentClaim() == null)
return this.permEnabled(perm) == 1;
if (this.permEnabled(perm) == -1)
@ -333,8 +356,8 @@ public class Claim implements IPermissionContainer{
return names;
}
public boolean editGlobalPerms(ServerPlayerEntity player, EnumPermission toggle, int mode) {
if((player!= null && !this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, toggle)))
public boolean editGlobalPerms(ServerPlayerEntity player, ClaimPermission toggle, int mode) {
if ((player != null && !this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, toggle)))
return false;
if (mode > 1)
mode = -1;
@ -346,7 +369,7 @@ public class Claim implements IPermissionContainer{
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);
}
@ -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
* @return If editing was successful or not
*/
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode, boolean griefPrevention) {
if (perm.isAlwaysGlobalPerm() || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, perm)))
public boolean editPerms(ServerPlayerEntity player, String group, ClaimPermission perm, int mode, boolean griefPrevention) {
if (PermissionRegistry.globalPerms().contains(perm) || (!this.isAdminClaim() && ConfigHandler.config.globallyDefined(this.world, perm)))
return false;
if (griefPrevention || this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) {
if (griefPrevention || this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos())) {
if (mode > 1)
mode = -1;
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)
perms.remove(perm);
else
@ -377,7 +400,7 @@ public class Claim implements IPermissionContainer{
}
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);
List<UUID> toRemove = Lists.newArrayList();
this.playersGroups.forEach((uuid, g) -> {
@ -391,7 +414,7 @@ public class Claim implements IPermissionContainer{
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))
return -1;
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());
if (obj.has("GlobalPerms")) {
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 {
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")) {
JsonObject perms = obj.getAsJsonObject("PermGroup");
perms.entrySet().forEach(key -> {
EnumMap<EnumPermission, Boolean> map = new EnumMap<>(EnumPermission.class);
Map<ClaimPermission, Boolean> map = Maps.newHashMap();
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);
});
}
@ -476,11 +499,11 @@ public class Claim implements IPermissionContainer{
gPerm = new JsonArray();
this.globalPerm.forEach((perm, bool) -> {
if (bool)
((JsonArray) gPerm).add(perm.toString());
((JsonArray) gPerm).add(perm.id);
});
} else {
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);
}
@ -488,7 +511,7 @@ public class Claim implements IPermissionContainer{
JsonObject perms = new JsonObject();
this.permissions.forEach((s, pmap) -> {
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);
});
obj.add("PermGroup", perms);
@ -535,7 +558,7 @@ public class Claim implements IPermissionContainer{
}
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();
l.add(PermHelper.simpleColoredText("=============================================", Formatting.GREEN));
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(ConfigHandler.lang.claimGroupPerms, e.getValue()), 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.IClaimData;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.config.ConfigHandler;
import com.flemmli97.flan.player.EnumDisplayType;
import com.flemmli97.flan.player.EnumEditMode;
@ -36,7 +38,6 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -50,6 +51,7 @@ public class ClaimStorage {
private final Map<UUID, Set<Claim>> playerClaimMap = Maps.newHashMap();
private final Set<UUID> dirty = Sets.newHashSet();
private final GlobalClaim globalClaim;
public static ClaimStorage get(ServerWorld world) {
return (ClaimStorage) ((IClaimData) world).getClaimData();
}
@ -145,7 +147,7 @@ public class ClaimStorage {
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]);
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);
return false;
}
@ -173,7 +175,7 @@ public class ClaimStorage {
}
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))
for (Claim claim : this.claims.get(chunk)) {
if (claim.insideClaim(pos))
@ -182,9 +184,9 @@ public class ClaimStorage {
return null;
}
public IPermissionContainer getForPermissionCheck(BlockPos pos){
public IPermissionContainer getForPermissionCheck(BlockPos pos) {
Claim claim = this.getClaimAt(pos);
if(claim != null)
if (claim != null)
return claim;
return this.globalClaim;
}
@ -321,19 +323,19 @@ public class ClaimStorage {
Map<File, List<File>> subClaimMap = Maps.newHashMap();
Map<Integer, File> intFileMap = Maps.newHashMap();
EnumSet<EnumPermission> managers = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITCLAIM));
EnumSet<EnumPermission> builders = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM));
EnumSet<EnumPermission> containers = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM,
EnumPermission.BREAK, EnumPermission.PLACE, EnumPermission.NOTEBLOCK, EnumPermission.REDSTONE, EnumPermission.JUKEBOX,
EnumPermission.ITEMFRAMEROTATE, EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES,
EnumPermission.TRAMPLE, EnumPermission.RAID, EnumPermission.BUCKET, EnumPermission.ARMORSTAND, EnumPermission.BREAKNONLIVING));
EnumSet<EnumPermission> accessors = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM,
EnumPermission.BREAK, EnumPermission.PLACE, EnumPermission.OPENCONTAINER, EnumPermission.ANVIL, EnumPermission.BEACON,
EnumPermission.NOTEBLOCK, EnumPermission.REDSTONE, EnumPermission.JUKEBOX, EnumPermission.ITEMFRAMEROTATE,
EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES, EnumPermission.TRAMPLE, EnumPermission.RAID,
EnumPermission.BUCKET, EnumPermission.ANIMALINTERACT, EnumPermission.HURTANIMAL, EnumPermission.TRADING, EnumPermission.ARMORSTAND,
EnumPermission.BREAKNONLIVING));
Map<String, EnumSet<EnumPermission>> perms = Maps.newHashMap();
Set<ClaimPermission> managers = complementOf(PermissionRegistry.EDITCLAIM);
Set<ClaimPermission> builders = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM);
Set<ClaimPermission> containers = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM,
PermissionRegistry.BREAK, PermissionRegistry.PLACE, PermissionRegistry.NOTEBLOCK, PermissionRegistry.REDSTONE, PermissionRegistry.JUKEBOX,
PermissionRegistry.ITEMFRAMEROTATE, PermissionRegistry.LECTERNTAKE, PermissionRegistry.ENDCRYSTALPLACE, PermissionRegistry.PROJECTILES,
PermissionRegistry.TRAMPLE, PermissionRegistry.RAID, PermissionRegistry.BUCKET, PermissionRegistry.ARMORSTAND, PermissionRegistry.BREAKNONLIVING);
Set<ClaimPermission> accessors = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM,
PermissionRegistry.BREAK, PermissionRegistry.PLACE, PermissionRegistry.OPENCONTAINER, PermissionRegistry.ANVIL, PermissionRegistry.BEACON,
PermissionRegistry.NOTEBLOCK, PermissionRegistry.REDSTONE, PermissionRegistry.JUKEBOX, PermissionRegistry.ITEMFRAMEROTATE,
PermissionRegistry.LECTERNTAKE, PermissionRegistry.ENDCRYSTALPLACE, PermissionRegistry.PROJECTILES, PermissionRegistry.TRAMPLE, PermissionRegistry.RAID,
PermissionRegistry.BUCKET, PermissionRegistry.ANIMALINTERACT, PermissionRegistry.HURTANIMAL, PermissionRegistry.TRADING, PermissionRegistry.ARMORSTAND,
PermissionRegistry.BREAKNONLIVING);
Map<String, Set<ClaimPermission>> perms = Maps.newHashMap();
perms.put("managers", managers);
perms.put("builders", builders);
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,
Map<String, EnumSet<EnumPermission>> perms) throws IOException {
Map<String, Set<ClaimPermission>> perms) throws IOException {
FileReader reader = new FileReader(file);
Map<String, Object> values = yml.load(reader);
reader.close();
@ -421,7 +430,7 @@ public class ClaimStorage {
if (!builders.isEmpty() && !builders.contains(ownerString)) {
if (builders.contains("public")) {
perms.get("builders").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm())
if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1);
});
} else {
@ -432,7 +441,7 @@ public class ClaimStorage {
if (!managers.isEmpty() && !managers.contains(ownerString)) {
if (managers.contains("public")) {
perms.get("managers").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm())
if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1);
});
} else {
@ -443,7 +452,7 @@ public class ClaimStorage {
if (!containers.isEmpty() && !containers.contains(ownerString)) {
if (containers.contains("public")) {
perms.get("containers").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm())
if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1);
});
} else {
@ -454,7 +463,7 @@ public class ClaimStorage {
if (!accessors.isEmpty() && !accessors.contains(ownerString)) {
if (accessors.contains("public")) {
perms.get("accessors").forEach(perm -> {
if (!perm.isAlwaysGlobalPerm())
if (!PermissionRegistry.globalPerms().contains(perm))
claim.editGlobalPerms(null, perm, 1);
});
} 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;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Formatting;
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;
public GlobalClaim(ServerWorld world){
public GlobalClaim(ServerWorld world) {
this.world = world;
}
@Override
public boolean canInteract(ServerPlayerEntity player, EnumPermission perm, BlockPos pos, boolean message) {
if(ConfigHandler.config.globalDefaultPerms.containsKey(this.world.getRegistryKey().getValue().toString())){
EnumMap<EnumPermission, Boolean> permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString());
if(permMap.containsKey(perm)) {
public boolean canInteract(ServerPlayerEntity player, ClaimPermission perm, BlockPos pos, boolean message) {
if (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))
return true;
if (message)

View File

@ -1,14 +1,15 @@
package com.flemmli97.flan.claim;
import com.flemmli97.flan.api.ClaimPermission;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
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);
}
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;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
@ -13,7 +14,7 @@ import java.util.function.Consumer;
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) {
cons.accept(Optional.empty());
return false;
@ -23,7 +24,7 @@ public class PermHelper {
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();
Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(pos);
return check(player, pos, claim, perm, cons) ? claim : null;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,8 @@
package com.flemmli97.flan.event;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer;
import com.flemmli97.flan.claim.PermHelper;
import com.flemmli97.flan.config.ConfigHandler;
@ -64,9 +64,9 @@ public class ItemInteractEvents {
if (claim == null)
return TypedActionResult.pass(stack);
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)
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);
}
@ -86,14 +86,14 @@ public class ItemInteractEvents {
boolean actualInClaim = !(claim instanceof Claim) || placePos.getY() >= ((Claim) claim).getDimensions()[4];
ServerPlayerEntity player = (ServerPlayerEntity) context.getPlayer();
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;
else if (actualInClaim) {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true);
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) {
((Claim) claim).extendDownwards(placePos);
}
@ -134,7 +134,7 @@ public class ItemInteractEvents {
return;
data.setClaimActionCooldown();
if (claim != null) {
if (claim.canInteract(player, EnumPermission.EDITCLAIM, target)) {
if (claim.canInteract(player, PermissionRegistry.EDITCLAIM, target)) {
if (data.getEditMode() == EnumEditMode.SUBCLAIM) {
Claim subClaim = claim.getSubClaim(target);
if (subClaim != null && data.currentEdit() == null) {

View File

@ -1,7 +1,7 @@
package com.flemmli97.flan.event;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.ClaimStorage;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.IPermissionContainer;
import net.minecraft.block.BlockState;
import net.minecraft.block.piston.PistonBehavior;
@ -20,7 +20,7 @@ public class WorldEvents {
explosion.getAffectedBlocks().removeIf(pos -> {
IPermissionContainer claim = storage.getForPermissionCheck(pos);
if (claim != null)
return !claim.canInteract(null, EnumPermission.EXPLOSIONS, pos);
return !claim.canInteract(null, PermissionRegistry.EXPLOSIONS, pos);
return false;
});
}
@ -64,11 +64,11 @@ public class WorldEvents {
public static boolean canStartRaid(ServerPlayerEntity player) {
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) {
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;
import com.flemmli97.flan.api.PermissionRegistry;
import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@ -95,7 +95,7 @@ public class GroupScreenHandler extends ServerOnlyScreenHandler {
if (index == 3) {
player.closeHandledScreen();
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.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_ANVIL_USE, 1, 1f);

View File

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

View File

@ -1,7 +1,7 @@
package com.flemmli97.flan.gui;
import com.flemmli97.flan.api.ClaimPermission;
import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import com.flemmli97.flan.claim.PermHelper;
import com.flemmli97.flan.config.ConfigHandler;
import net.minecraft.item.ItemStack;
@ -17,7 +17,7 @@ import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import java.util.EnumMap;
import java.util.Map;
public class ServerScreenHelper {
@ -27,21 +27,20 @@ public class ServerScreenHelper {
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();
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();
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)));
EnumMap<EnumPermission,Boolean> global = ConfigHandler.config.globalDefaultPerms.get(claim.getWorld().getRegistryKey().getValue().toString());
if(!claim.isAdminClaim() && global!=null && global.containsKey(perm)){
Map<ClaimPermission, Boolean> global = ConfigHandler.config.globalDefaultPerms.get(claim.getWorld().getRegistryKey().getValue().toString());
if (!claim.isAdminClaim() && global != null && global.containsKey(perm)) {
Text text = new LiteralText("Non Editable.").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED));
lore.add(StringTag.of(Text.Serializer.toJson(text)));
String permFlag = global.get(perm).toString();
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)));
}
else {
} else {
String permFlag;
if (group == 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();
}
}