open up scroll loot tables to config
This commit is contained in:
parent
e61b5c1255
commit
0edc687a60
5 changed files with 122 additions and 19 deletions
|
@ -0,0 +1,24 @@
|
|||
package at.petrak.hexcasting.api.misc;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import static at.petrak.hexcasting.api.HexAPI.modLoc;
|
||||
|
||||
public enum ScrollQuantity {
|
||||
NONE(null),
|
||||
FEW(modLoc("inject/scroll_loot_few")),
|
||||
SOME(modLoc("inject/scroll_loot_some")),
|
||||
MANY(modLoc("inject/scroll_loot_many"));
|
||||
|
||||
private final ResourceLocation pool;
|
||||
|
||||
ScrollQuantity(ResourceLocation pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ResourceLocation getPool() {
|
||||
return pool;
|
||||
}
|
||||
}
|
|
@ -2,10 +2,13 @@ package at.petrak.hexcasting.api.mod;
|
|||
|
||||
import at.petrak.hexcasting.api.HexAPI;
|
||||
import at.petrak.hexcasting.api.misc.ManaConstants;
|
||||
import at.petrak.hexcasting.api.misc.ScrollQuantity;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Tier;
|
||||
import net.minecraft.world.item.Tiers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class HexConfig {
|
||||
public interface CommonConfigAccess {
|
||||
|
||||
|
@ -46,9 +49,14 @@ public class HexConfig {
|
|||
|
||||
boolean doVillagersTakeOffenseAtMindMurder();
|
||||
|
||||
ScrollQuantity scrollsForLootTable(ResourceLocation lootTable);
|
||||
|
||||
int DEFAULT_MAX_RECURSE_DEPTH = 64;
|
||||
int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024;
|
||||
int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3;
|
||||
List<String> DEFAULT_FEW_SCROLL_TABLES = List.of("minecraft:chests/jungle_temple", "minecraft:chests/simple_dungeon", "minecraft:chests/village/village_cartographer");
|
||||
List<String> DEFAULT_SOME_SCROLL_TABLES = List.of("minecraft:chests/bastion_treasure", "minecraft:chests/shipwreck_map");
|
||||
List<String> DEFAULT_MANY_SCROLL_TABLES = List.of("minecraft:chests/stronghold_library");
|
||||
// We can't have default values for the break harvest level or if
|
||||
|
||||
default Tier opBreakHarvestLevel() {
|
||||
|
@ -63,6 +71,15 @@ public class HexConfig {
|
|||
}
|
||||
}
|
||||
|
||||
// Simple extensions for resource location configs
|
||||
public static boolean anyMatch(List<? extends String> keys, ResourceLocation key) {
|
||||
return keys.stream().map(ResourceLocation::new).anyMatch(key::equals);
|
||||
}
|
||||
|
||||
public static boolean noneMatch(List<? extends String> keys, ResourceLocation key) {
|
||||
return keys.stream().map(ResourceLocation::new).noneMatch(key::equals);
|
||||
}
|
||||
|
||||
// oh man this is aesthetically pleasing
|
||||
private static CommonConfigAccess common = null;
|
||||
private static ClientConfigAccess client = null;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package at.petrak.hexcasting.common.loot;
|
||||
|
||||
import at.petrak.hexcasting.api.misc.ScrollQuantity;
|
||||
import at.petrak.hexcasting.api.mod.HexConfig;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.storage.loot.LootPool;
|
||||
|
@ -21,20 +23,12 @@ public class HexLootHandler {
|
|||
Consumer<LootPool> addPool) {
|
||||
if (id.equals(Blocks.AMETHYST_CLUSTER.getLootTable())) {
|
||||
addPool.accept(getInjectPool(TABLE_INJECT_AMETHYST_CLUSTER));
|
||||
} else if (
|
||||
id.equals(new ResourceLocation("minecraft:chests/jungle_temple"))
|
||||
|| id.equals(new ResourceLocation("minecraft:chests/simple_dungeon"))
|
||||
|| id.equals(new ResourceLocation("minecraft:chests/village/village_cartographer"))
|
||||
) {
|
||||
addPool.accept(getInjectPool(modLoc("inject/scroll_loot_few")));
|
||||
} else if (
|
||||
id.equals(new ResourceLocation("minecraft:chests/bastion_treasure"))
|
||||
|| id.equals(new ResourceLocation("minecraft:chests/shipwreck_map"))
|
||||
) {
|
||||
addPool.accept(getInjectPool(modLoc("inject/scroll_loot_some")));
|
||||
} else if (id.equals(new ResourceLocation("minecraft:chests/stronghold_library"))
|
||||
) {
|
||||
addPool.accept(getInjectPool(modLoc("inject/scroll_loot_many")));
|
||||
} else {
|
||||
ScrollQuantity scrolls = HexConfig.server().scrollsForLootTable(id);
|
||||
ResourceLocation injection = scrolls.getPool();
|
||||
if (injection != null) {
|
||||
addPool.accept(getInjectPool(injection));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package at.petrak.hexcasting.fabric;
|
||||
|
||||
import at.petrak.hexcasting.api.HexAPI;
|
||||
import at.petrak.hexcasting.api.misc.ScrollQuantity;
|
||||
import at.petrak.hexcasting.api.mod.HexConfig;
|
||||
import at.petrak.hexcasting.xplat.IXplatAbstractions;
|
||||
import io.github.fablabsmc.fablabs.api.fiber.v1.builder.ConfigTreeBuilder;
|
||||
|
@ -16,6 +17,9 @@ import java.io.*;
|
|||
import java.nio.file.*;
|
||||
import java.util.List;
|
||||
|
||||
import static at.petrak.hexcasting.api.mod.HexConfig.anyMatch;
|
||||
import static at.petrak.hexcasting.api.mod.HexConfig.noneMatch;
|
||||
|
||||
// https://github.com/VazkiiMods/Botania/blob/1.18.x/Fabric/src/main/java/vazkii/botania/fabric/FiberBotaniaConfig.java
|
||||
public class FabricHexConfig {
|
||||
private static final Common COMMON = new Common();
|
||||
|
@ -161,6 +165,12 @@ public class FabricHexConfig {
|
|||
ConfigTypes.makeList(ConfigTypes.STRING));
|
||||
private final PropertyMirror<Boolean> villagersOffendedByMindMurder = PropertyMirror.create(
|
||||
ConfigTypes.BOOLEAN);
|
||||
private final PropertyMirror<List<String>> fewScrollTables = PropertyMirror.create(
|
||||
ConfigTypes.makeList(ConfigTypes.STRING));
|
||||
private final PropertyMirror<List<String>> someScrollTables = PropertyMirror.create(
|
||||
ConfigTypes.makeList(ConfigTypes.STRING));
|
||||
private final PropertyMirror<List<String>> manyScrollTables = PropertyMirror.create(
|
||||
ConfigTypes.makeList(ConfigTypes.STRING));
|
||||
|
||||
public ConfigTree configure(ConfigTreeBuilder bob) {
|
||||
bob.fork("Spells")
|
||||
|
@ -190,7 +200,21 @@ public class FabricHexConfig {
|
|||
|
||||
.beginValue("villagersOffendedByMindMurder", ConfigTypes.BOOLEAN, true)
|
||||
.withComment("Should villagers take offense when you flay the mind of their fellow villagers?")
|
||||
.finishValue(villagersOffendedByMindMurder::mirror);
|
||||
.finishValue(villagersOffendedByMindMurder::mirror)
|
||||
|
||||
.fork("Scrolls in Loot")
|
||||
.beginValue("fewScrollTables", ConfigTypes.makeList(ConfigTypes.STRING), DEFAULT_FEW_SCROLL_TABLES)
|
||||
.withComment("Which loot tables should a small number of Ancient Scrolls be injected into?")
|
||||
.finishValue(fewScrollTables::mirror)
|
||||
|
||||
.beginValue("someScrollTables", ConfigTypes.makeList(ConfigTypes.STRING), DEFAULT_SOME_SCROLL_TABLES)
|
||||
.withComment("Which loot tables should a decent number of Ancient Scrolls be injected into?")
|
||||
.finishValue(someScrollTables::mirror)
|
||||
|
||||
.beginValue("manyScrollTables", ConfigTypes.makeList(ConfigTypes.STRING), DEFAULT_MANY_SCROLL_TABLES)
|
||||
.withComment("Which loot tables should a huge number of Ancient Scrolls be injected into?")
|
||||
.finishValue(manyScrollTables::mirror)
|
||||
.finishBranch();
|
||||
|
||||
return bob.build();
|
||||
}
|
||||
|
@ -212,17 +236,28 @@ public class FabricHexConfig {
|
|||
|
||||
@Override
|
||||
public boolean isActionAllowed(ResourceLocation actionID) {
|
||||
return !actionDenyList.getValue().contains(actionID.toString());
|
||||
return noneMatch(actionDenyList.getValue(), actionID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActionAllowedInCircles(ResourceLocation actionID) {
|
||||
return !circleActionDenyList.getValue().contains(actionID.toString());
|
||||
return noneMatch(circleActionDenyList.getValue(), actionID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doVillagersTakeOffenseAtMindMurder() {
|
||||
return villagersOffendedByMindMurder.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScrollQuantity scrollsForLootTable(ResourceLocation lootTable) {
|
||||
if (anyMatch(fewScrollTables.getValue(), lootTable))
|
||||
return ScrollQuantity.FEW;
|
||||
else if (anyMatch(someScrollTables.getValue(), lootTable))
|
||||
return ScrollQuantity.SOME;
|
||||
else if (anyMatch(manyScrollTables.getValue(), lootTable))
|
||||
return ScrollQuantity.MANY;
|
||||
return ScrollQuantity.NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
package at.petrak.hexcasting.forge;
|
||||
|
||||
import at.petrak.hexcasting.api.misc.ScrollQuantity;
|
||||
import at.petrak.hexcasting.api.mod.HexConfig;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeConfigSpec;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static at.petrak.hexcasting.api.mod.HexConfig.anyMatch;
|
||||
import static at.petrak.hexcasting.api.mod.HexConfig.noneMatch;
|
||||
|
||||
public class ForgeHexConfig implements HexConfig.CommonConfigAccess {
|
||||
private static ForgeConfigSpec.IntValue dustManaAmount;
|
||||
private static ForgeConfigSpec.IntValue shardManaAmount;
|
||||
|
@ -81,6 +85,9 @@ public class ForgeHexConfig implements HexConfig.CommonConfigAccess {
|
|||
|
||||
private static ForgeConfigSpec.BooleanValue villagersOffendedByMindMurder;
|
||||
|
||||
private static ForgeConfigSpec.ConfigValue<List<? extends String>> fewScrollTables;
|
||||
private static ForgeConfigSpec.ConfigValue<List<? extends String>> someScrollTables;
|
||||
private static ForgeConfigSpec.ConfigValue<List<? extends String>> manyScrollTables;
|
||||
|
||||
public Server(ForgeConfigSpec.Builder builder) {
|
||||
builder.push("Spells");
|
||||
|
@ -110,6 +117,21 @@ public class ForgeHexConfig implements HexConfig.CommonConfigAccess {
|
|||
villagersOffendedByMindMurder = builder.comment(
|
||||
"Should villagers take offense when you flay the mind of their fellow villagers?")
|
||||
.define("villagersOffendedByMindMurder", true);
|
||||
|
||||
builder.push("Scrolls in Loot");
|
||||
|
||||
fewScrollTables = builder.comment(
|
||||
"Which loot tables should a small number of Ancient Scrolls be injected into?")
|
||||
.defineList("fewScrollTables", DEFAULT_FEW_SCROLL_TABLES,
|
||||
obj -> obj instanceof String s && ResourceLocation.isValidResourceLocation(s));
|
||||
someScrollTables = builder.comment(
|
||||
"Which loot tables should a decent number of Ancient Scrolls be injected into?")
|
||||
.defineList("someScrollTables", DEFAULT_SOME_SCROLL_TABLES,
|
||||
obj -> obj instanceof String s && ResourceLocation.isValidResourceLocation(s));
|
||||
manyScrollTables = builder.comment(
|
||||
"Which loot tables should a huge number of Ancient Scrolls be injected into?")
|
||||
.defineList("manyScrollTables", DEFAULT_MANY_SCROLL_TABLES,
|
||||
obj -> obj instanceof String s && ResourceLocation.isValidResourceLocation(s));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -129,17 +151,28 @@ public class ForgeHexConfig implements HexConfig.CommonConfigAccess {
|
|||
|
||||
@Override
|
||||
public boolean isActionAllowed(ResourceLocation actionID) {
|
||||
return !actionDenyList.get().contains(actionID.toString());
|
||||
return noneMatch(actionDenyList.get(), actionID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActionAllowedInCircles(ResourceLocation actionID) {
|
||||
return !circleActionDenyList.get().contains(actionID.toString());
|
||||
return noneMatch(circleActionDenyList.get(), actionID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doVillagersTakeOffenseAtMindMurder() {
|
||||
return villagersOffendedByMindMurder.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScrollQuantity scrollsForLootTable(ResourceLocation lootTable) {
|
||||
if (anyMatch(fewScrollTables.get(), lootTable))
|
||||
return ScrollQuantity.FEW;
|
||||
else if (anyMatch(someScrollTables.get(), lootTable))
|
||||
return ScrollQuantity.SOME;
|
||||
else if (anyMatch(manyScrollTables.get(), lootTable))
|
||||
return ScrollQuantity.MANY;
|
||||
return ScrollQuantity.NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue