allow adding/overriding of item/block -> permission maps #106

This commit is contained in:
Flemmli97 2021-12-21 16:27:37 +01:00
parent 36733ccb40
commit be4099fa54
8 changed files with 80 additions and 10 deletions

View File

@ -2,6 +2,11 @@ Flan 1.6.5
======================
- Fix claims below 0 not working
- Only kick players out of subclaim if the mainclaim allows them to stay
- New config "customItemPermission" and "customBlockPermission"
allows to specify a mapping of item/block to permission
example is endcrystals are mapped to the ENDCRYSTALPLACE permission internally
Syntax is <item/block>-<permission>
Use @ to indicate a tag
Flan 1.6.4
======================

View File

@ -1,7 +1,13 @@
package io.github.flemmli97.flan.api.permission;
import com.google.gson.JsonSyntaxException;
import io.github.flemmli97.flan.CrossPlatformStuff;
import io.github.flemmli97.flan.config.ConfigHandler;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tags.SerializationTags;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.EnderpearlItem;
import net.minecraft.world.item.Item;
@ -57,6 +63,45 @@ public class ObjectToPermissionMap {
for (Item item : CrossPlatformStuff.registryItems().getIterator()) {
itemPermissionBuilder.entrySet().stream().filter(e -> e.getKey().test(item)).map(Map.Entry::getValue).findFirst().ifPresent(sub -> itemToPermission.put(item, sub.get()));
}
for (String s : ConfigHandler.config.itemPermission) {
String[] sub = s.split("-");
boolean remove = sub[1].equals("NONE");
if (s.startsWith("@")) {
Tag<Item> t = SerializationTags.getInstance().getTagOrThrow(Registry.ITEM_REGISTRY, new ResourceLocation(sub[0].substring(1)), id -> new JsonSyntaxException("Unknown item tag '" + id + "'"));
if (t != null) {
t.getValues().forEach(i -> {
if (remove)
itemToPermission.remove(i);
else
itemToPermission.put(i, PermissionRegistry.get(sub[1]));
});
}
} else {
if (remove)
itemToPermission.remove(CrossPlatformStuff.registryItems().getFromId(new ResourceLocation(sub[0])));
else
itemToPermission.put(CrossPlatformStuff.registryItems().getFromId(new ResourceLocation(sub[0])), PermissionRegistry.get(sub[1]));
}
}
for (String s : ConfigHandler.config.blockPermission) {
String[] sub = s.split("-");
boolean remove = sub[1].equals("NONE");
if (s.startsWith("@")) {
Tag<Block> t = SerializationTags.getInstance().getTagOrThrow(Registry.BLOCK_REGISTRY, new ResourceLocation(sub[0].substring(1)), id -> new JsonSyntaxException("Unknown item tag '" + id + "'"));
if (t != null)
t.getValues().forEach(i -> {
if (remove)
blockToPermission.remove(i);
else
blockToPermission.put(i, PermissionRegistry.get(sub[1]));
});
} else {
if (remove)
blockToPermission.remove(CrossPlatformStuff.registryBlocks().getFromId(new ResourceLocation(sub[0])));
else
blockToPermission.put(CrossPlatformStuff.registryBlocks().getFromId(new ResourceLocation(sub[0])), PermissionRegistry.get(sub[1]));
}
}
}
public static ClaimPermission getFromBlock(Block block) {

View File

@ -137,7 +137,7 @@ public class CommandClaim {
}
private static int reloadConfig(CommandContext<CommandSourceStack> context) {
ConfigHandler.reloadConfigs();
ConfigHandler.reloadConfigs(context.getSource().getServer());
context.getSource().sendSuccess(PermHelper.simpleColoredText(ConfigHandler.lang.configReload), true);
return Command.SINGLE_SUCCESS;
}

View File

@ -69,6 +69,12 @@ public class Config {
"graves.marker" //vanilla tweaks
);
public List<String> itemPermission = Lists.newArrayList(
"@c:wrenches-INTERACTBLOCK"
);
public List<String> blockPermission = Lists.newArrayList(
);
public int dropTicks = 6000;
public int inactivityTime = 30;
@ -80,7 +86,7 @@ public class Config {
public boolean log;
public int configVersion = 3;
public int configVersion = 4;
public int preConfigVersion;
public Map<String, Map<ClaimPermission, Boolean>> defaultGroups = createHashMap(map -> {
@ -167,6 +173,11 @@ public class Config {
this.entityTagIgnore.clear();
ConfigHandler.arryFromJson(obj, "entityTagIgnore").forEach(e -> this.entityTagIgnore.add(e.getAsString()));
this.itemPermission.clear();
ConfigHandler.arryFromJson(obj, "customItemPermission").forEach(e -> this.itemPermission.add(e.getAsString()));
this.blockPermission.clear();
ConfigHandler.arryFromJson(obj, "customBlockPermission").forEach(e -> this.blockPermission.add(e.getAsString()));
this.dropTicks = ConfigHandler.fromJson(obj, "dropTicks", this.dropTicks);
this.inactivityTime = ConfigHandler.fromJson(obj, "inactivityTimeDays", this.inactivityTime);
this.inactivityBlocksMax = ConfigHandler.fromJson(obj, "inactivityBlocksMax", this.inactivityBlocksMax);
@ -260,6 +271,13 @@ public class Config {
this.entityTagIgnore.forEach(entitiesTags::add);
obj.add("entityTagIgnore", entitiesTags);
JsonArray itemPerms = new JsonArray();
this.itemPermission.forEach(itemPerms::add);
obj.add("customItemPermission", itemPerms);
JsonArray blockPerms = new JsonArray();
this.blockPermission.forEach(blockPerms::add);
obj.add("customBlockPermission", blockPerms);
obj.addProperty("dropTicks", this.dropTicks);
obj.addProperty("inactivityTimeDays", this.inactivityTime);
obj.addProperty("inactivityBlocksMax", this.inactivityBlocksMax);

View File

@ -4,6 +4,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import io.github.flemmli97.flan.api.permission.ObjectToPermissionMap;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.level.Level;
@ -26,12 +27,13 @@ public class ConfigHandler {
public static void serverLoad(MinecraftServer server) {
config = new Config(server);
lang = new LangConfig(server);
reloadConfigs();
reloadConfigs(server);
}
public static void reloadConfigs() {
public static void reloadConfigs(MinecraftServer server) {
config.load();
lang.load();
ObjectToPermissionMap.reload(server);
}
public static Path getClaimSavePath(MinecraftServer server, ResourceKey<Level> reg) {

View File

@ -35,6 +35,10 @@ public class ConfigUpdater {
ConfigHandler.config.interactBETagBlacklist.add(e.getAsString());
});
});
map.put(4, old -> {
Flan.debug("Updating config to version 4");
ConfigHandler.config.itemPermission.add("@c:wrenches-INTERACTBLOCK");
});
});
public static void updateConfig(int preVersion, JsonObject oldVals) {

View File

@ -1,7 +1,6 @@
package io.github.flemmli97.flan.fabric;
import io.github.flemmli97.flan.Flan;
import io.github.flemmli97.flan.api.permission.ObjectToPermissionMap;
import io.github.flemmli97.flan.commands.CommandClaim;
import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.event.BlockInteractEvents;
@ -50,9 +49,8 @@ public class FlanFabric implements ModInitializer {
}
public static void serverLoad(MinecraftServer server) {
ConfigHandler.serverLoad(server);
ObjectToPermissionMap.reload(server);
Flan.lockRegistry(server);
ConfigHandler.serverLoad(server);
}
public static void serverFinishLoad(MinecraftServer server) {

View File

@ -1,7 +1,6 @@
package io.github.flemmli97.flan.forgeevent;
import io.github.flemmli97.flan.Flan;
import io.github.flemmli97.flan.api.permission.ObjectToPermissionMap;
import io.github.flemmli97.flan.commands.CommandClaim;
import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.event.PlayerEvents;
@ -17,9 +16,8 @@ import net.minecraftforge.event.server.ServerStartedEvent;
public class ServerEvents {
public static void serverStart(ServerAboutToStartEvent event) {
ConfigHandler.serverLoad(event.getServer());
ObjectToPermissionMap.reload(event.getServer());
Flan.lockRegistry(event.getServer());
ConfigHandler.serverLoad(event.getServer());
}
public static void serverFinishLoad(ServerStartedEvent event) {