change permission to a registry instead of an hardcoded enum
This commit is contained in:
parent
685bafc755
commit
b6770a3f19
@ -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);
|
||||
}
|
||||
}
|
||||
|
63
src/main/java/com/flemmli97/flan/api/ClaimPermission.java
Normal file
63
src/main/java/com/flemmli97/flan/api/ClaimPermission.java
Normal 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
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user