diff --git a/src/main/java/com/flemmli97/flan/Flan.java b/src/main/java/com/flemmli97/flan/Flan.java index a06977f..fdfe170 100644 --- a/src/main/java/com/flemmli97/flan/Flan.java +++ b/src/main/java/com/flemmli97/flan/Flan.java @@ -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); } } diff --git a/src/main/java/com/flemmli97/flan/api/ClaimPermission.java b/src/main/java/com/flemmli97/flan/api/ClaimPermission.java new file mode 100644 index 0000000..91c2e60 --- /dev/null +++ b/src/main/java/com/flemmli97/flan/api/ClaimPermission.java @@ -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 guiItem; + public String desc; + public final String id; + public final ClaimTest test; + + public ClaimPermission(String id, Supplier guiItem, String defaultDescription) { + this(id, guiItem, defaultDescription, pass); + } + + public ClaimPermission(String id, Supplier 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 + } +} diff --git a/src/main/java/com/flemmli97/flan/permission/ClaimPermRegistry.java b/src/main/java/com/flemmli97/flan/api/PermissionRegistry.java similarity index 85% rename from src/main/java/com/flemmli97/flan/permission/ClaimPermRegistry.java rename to src/main/java/com/flemmli97/flan/api/PermissionRegistry.java index 428b5a7..918b99d 100644 --- a/src/main/java/com/flemmli97/flan/permission/ClaimPermRegistry.java +++ b/src/main/java/com/flemmli97/flan/api/PermissionRegistry.java @@ -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 permissions = Maps.newLinkedHashMap(); private static final Map 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 getPerms(){ - return permissions.values(); + public static List getPerms() { + return Lists.newArrayList(permissions.values()); } - public static Collection globalPerms(){ + public static Collection 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; } diff --git a/src/main/java/com/flemmli97/flan/claim/BlockToPermissionMap.java b/src/main/java/com/flemmli97/flan/claim/BlockToPermissionMap.java index f72868f..53644db 100644 --- a/src/main/java/com/flemmli97/flan/claim/BlockToPermissionMap.java +++ b/src/main/java/com/flemmli97/flan/claim/BlockToPermissionMap.java @@ -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 blockToPermission = Maps.newHashMap(); + private static final Map 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); } } diff --git a/src/main/java/com/flemmli97/flan/claim/Claim.java b/src/main/java/com/flemmli97/flan/claim/Claim.java index 2c79e3b..6121af5 100644 --- a/src/main/java/com/flemmli97/flan/claim/Claim.java +++ b/src/main/java/com/flemmli97/flan/claim/Claim.java @@ -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 globalPerm = Maps.newEnumMap(EnumPermission.class); - private final Map> permissions = Maps.newHashMap(); + private LiteralText claimName; + private final Map globalPerm = Maps.newHashMap(); + private final Map> permissions = Maps.newHashMap(); private final Map 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 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 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 map = this.permissions.get(this.playersGroups.get(player.getUuid())); + Map 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 perms = has ? this.permissions.get(group) : new EnumMap<>(EnumPermission.class); + Map 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 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 map = new EnumMap<>(EnumPermission.class); + Map 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 infoString(ServerPlayerEntity player) { - boolean perms = this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos()); + boolean perms = this.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos()); List 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> e : this.permissions.entrySet()) { + for (Map.Entry> 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)); diff --git a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java index a5db5e5..ccd3ea6 100644 --- a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java +++ b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java @@ -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> playerClaimMap = Maps.newHashMap(); private final Set 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> subClaimMap = Maps.newHashMap(); Map intFileMap = Maps.newHashMap(); - EnumSet managers = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITCLAIM)); - EnumSet builders = EnumSet.complementOf(EnumSet.of(EnumPermission.EDITPERMS, EnumPermission.EDITCLAIM)); - EnumSet 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 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> perms = Maps.newHashMap(); + Set managers = complementOf(PermissionRegistry.EDITCLAIM); + Set builders = complementOf(PermissionRegistry.EDITPERMS, PermissionRegistry.EDITCLAIM); + Set 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 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> 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 complementOf(ClaimPermission... perms) { + Set set = Sets.newHashSet(PermissionRegistry.getPerms()); + for (ClaimPermission perm : perms) + set.remove(perm); + return set; + } + private static Pair parseFromYaml(File file, Yaml yml, MinecraftServer server, - Map> perms) throws IOException { + Map> perms) throws IOException { FileReader reader = new FileReader(file); Map 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 { diff --git a/src/main/java/com/flemmli97/flan/claim/EnumPermission.java b/src/main/java/com/flemmli97/flan/claim/EnumPermission.java deleted file mode 100644 index bfcd21a..0000000 --- a/src/main/java/com/flemmli97/flan/claim/EnumPermission.java +++ /dev/null @@ -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 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(); - } -} diff --git a/src/main/java/com/flemmli97/flan/claim/GlobalClaim.java b/src/main/java/com/flemmli97/flan/claim/GlobalClaim.java index c007f5b..91e48f7 100644 --- a/src/main/java/com/flemmli97/flan/claim/GlobalClaim.java +++ b/src/main/java/com/flemmli97/flan/claim/GlobalClaim.java @@ -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 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 permMap = ConfigHandler.config.globalDefaultPerms.get(this.world.getRegistryKey().getValue().toString()); + if (permMap.containsKey(perm)) { if (permMap.get(perm)) return true; if (message) diff --git a/src/main/java/com/flemmli97/flan/claim/IPermissionContainer.java b/src/main/java/com/flemmli97/flan/claim/IPermissionContainer.java index d3b434f..f0f2309 100644 --- a/src/main/java/com/flemmli97/flan/claim/IPermissionContainer.java +++ b/src/main/java/com/flemmli97/flan/claim/IPermissionContainer.java @@ -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); } diff --git a/src/main/java/com/flemmli97/flan/claim/PermHelper.java b/src/main/java/com/flemmli97/flan/claim/PermHelper.java index c783dae..ff0012b 100644 --- a/src/main/java/com/flemmli97/flan/claim/PermHelper.java +++ b/src/main/java/com/flemmli97/flan/claim/PermHelper.java @@ -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> cons) { + public static boolean check(ServerPlayerEntity player, BlockPos pos, Claim claim, ClaimPermission perm, Consumer> 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> cons) { + public static Claim checkReturn(ServerPlayerEntity player, ClaimPermission perm, Consumer> cons) { BlockPos pos = player.getBlockPos(); Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(pos); return check(player, pos, claim, perm, cons) ? claim : null; diff --git a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java index 15e9692..9cc97fe 100644 --- a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java +++ b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java @@ -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 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 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 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 global = ConfigHandler.config.globalDefaultPerms.get(serverWorld); - for (EnumPermission perm : EnumPermission.values()) { - if(!admin && global!=null && global.containsKey(perm)) { + Map 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; } diff --git a/src/main/java/com/flemmli97/flan/config/Config.java b/src/main/java/com/flemmli97/flan/config/Config.java index 8de02ab..25491c5 100644 --- a/src/main/java/com/flemmli97/flan/config/Config.java +++ b/src/main/java/com/flemmli97/flan/config/Config.java @@ -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> globalDefaultPerms = Maps.newHashMap(); + public final Map> 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 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 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 global = ConfigHandler.config.globalDefaultPerms.get(world.getRegistryKey().getValue().toString()); + public boolean globallyDefined(ServerWorld world, ClaimPermission perm) { + Map global = ConfigHandler.config.globalDefaultPerms.get(world.getRegistryKey().getValue().toString()); return global != null && global.containsKey(perm); - }} + } +} diff --git a/src/main/java/com/flemmli97/flan/config/ConfigHandler.java b/src/main/java/com/flemmli97/flan/config/ConfigHandler.java index 2fadf03..500f341 100644 --- a/src/main/java/com/flemmli97/flan/config/ConfigHandler.java +++ b/src/main/java/com/flemmli97/flan/config/ConfigHandler.java @@ -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(); } } diff --git a/src/main/java/com/flemmli97/flan/config/LangConfig.java b/src/main/java/com/flemmli97/flan/config/LangConfig.java index 15c80df..d454a6a 100644 --- a/src/main/java/com/flemmli97/flan/config/LangConfig.java +++ b/src/main/java/com/flemmli97/flan/config/LangConfig.java @@ -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(); diff --git a/src/main/java/com/flemmli97/flan/event/BlockInteractEvents.java b/src/main/java/com/flemmli97/flan/event/BlockInteractEvents.java index 012a723..307b696 100644 --- a/src/main/java/com/flemmli97/flan/event/BlockInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/BlockInteractEvents.java @@ -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; diff --git a/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java index 3a2398a..c31df0c 100644 --- a/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java @@ -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; } diff --git a/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java b/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java index 76aeb10..fad4f0b 100644 --- a/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java @@ -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) { diff --git a/src/main/java/com/flemmli97/flan/event/WorldEvents.java b/src/main/java/com/flemmli97/flan/event/WorldEvents.java index b6f3061..e00e938 100644 --- a/src/main/java/com/flemmli97/flan/event/WorldEvents.java +++ b/src/main/java/com/flemmli97/flan/event/WorldEvents.java @@ -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); } } diff --git a/src/main/java/com/flemmli97/flan/gui/GroupScreenHandler.java b/src/main/java/com/flemmli97/flan/gui/GroupScreenHandler.java index dbdfebb..c842f06 100644 --- a/src/main/java/com/flemmli97/flan/gui/GroupScreenHandler.java +++ b/src/main/java/com/flemmli97/flan/gui/GroupScreenHandler.java @@ -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); diff --git a/src/main/java/com/flemmli97/flan/gui/PermissionScreenHandler.java b/src/main/java/com/flemmli97/flan/gui/PermissionScreenHandler.java index 38f6b92..2f2c71b 100644 --- a/src/main/java/com/flemmli97/flan/gui/PermissionScreenHandler.java +++ b/src/main/java/com/flemmli97/flan/gui/PermissionScreenHandler.java @@ -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 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 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); diff --git a/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java b/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java index 951ebcb..9c7c272 100644 --- a/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java +++ b/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java @@ -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 global = ConfigHandler.config.globalDefaultPerms.get(claim.getWorld().getRegistryKey().getValue().toString()); - if(!claim.isAdminClaim() && global!=null && global.containsKey(perm)){ + Map 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) diff --git a/src/main/java/com/flemmli97/flan/permission/ClaimPermission.java b/src/main/java/com/flemmli97/flan/permission/ClaimPermission.java deleted file mode 100644 index 175f206..0000000 --- a/src/main/java/com/flemmli97/flan/permission/ClaimPermission.java +++ /dev/null @@ -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 guiItem; - public String desc; - public final ClaimTest test; - public final String id; - - public ClaimPermission(String id, Supplier guiItem, String defaultDescription){ - this(id, guiItem, defaultDescription, alwaysTrue); - } - - public ClaimPermission(String id, Supplier guiItem, String defaultDescription, ClaimTest test){ - this.id = id; - this.guiItem = guiItem; - this.desc = defaultDescription; - this.test = test; - } - - public ItemStack getItem(){ - return this.guiItem.get(); - } -}