-
Notifications
You must be signed in to change notification settings - Fork 18
/
ConfigEnabledCondition.java
139 lines (119 loc) · 4.74 KB
/
ConfigEnabledCondition.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package knightminer.inspirations.common.data;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSyntaxException;
import knightminer.inspirations.common.Config;
import knightminer.inspirations.library.Util;
import net.minecraft.util.JSONUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.conditions.ILootCondition;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.common.crafting.conditions.ICondition;
import net.minecraftforge.common.crafting.conditions.IConditionSerializer;
import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.function.BooleanSupplier;
// Reuse code for both a recipe and loot table condition.
public class ConfigEnabledCondition implements ICondition, ILootCondition {
public static final ResourceLocation ID = Util.getResource("config");
private final String configName;
private final BooleanSupplier supplier;
private static Map<String,ConfigEnabledCondition> PROPS = new HashMap<>();
private ConfigEnabledCondition(String configName, BooleanSupplier supplier) {
this.configName = configName;
this.supplier = supplier;
}
@Override
public ResourceLocation getID() {
return ID;
}
@Override
public boolean test() {
return supplier.getAsBoolean();
}
@Override
public boolean test(LootContext lootContext) {
return supplier.getAsBoolean();
}
public static class Serializer extends AbstractSerializer<ConfigEnabledCondition> implements IConditionSerializer<ConfigEnabledCondition> {
public Serializer() {
super(ID, ConfigEnabledCondition.class);
}
@Override
public void write(JsonObject json, ConfigEnabledCondition value) {
json.addProperty("prop", value.configName);
}
@Override
public ConfigEnabledCondition read(JsonObject json) {
String prop = JSONUtils.getString(json, "prop");
ConfigEnabledCondition config = PROPS.get(prop.toLowerCase(Locale.ROOT));
if (config == null) {
throw new JsonSyntaxException("Invalid propertyname '" + prop + "'");
}
return config;
}
@Override
public ResourceLocation getID() {
return ID;
}
@Override
public void serialize(@Nonnull JsonObject json, @Nonnull ConfigEnabledCondition cond, @Nonnull JsonSerializationContext ctx) {
write(json, cond);
}
@Nonnull
@Override
public ConfigEnabledCondition deserialize(@Nonnull JsonObject json, @Nonnull JsonDeserializationContext ctx) {
return read(json);
}
}
// Add all the properties.
private static void add(String prop, BooleanSupplier supplier) {
PROPS.put(prop.toLowerCase(Locale.ROOT), new ConfigEnabledCondition(prop, supplier));
}
private static void add(String prop, ForgeConfigSpec.BooleanValue option) {
PROPS.put(prop.toLowerCase(Locale.ROOT), new ConfigEnabledCondition(prop, option::get));
}
static {
// building
add("bookshelf", Config.enableBookshelf);
add("colored_books", Config::enableColoredBooks);
add("enlightened_bush", Config.enableEnlightenedBush);
add("flowers", Config.enableFlowers);
add("glass_door", Config.enableGlassDoor);
add("mulch", Config.enableMulch);
add("path", Config.enablePath);
add("rope", Config.enableRope);
// utility
add("bricks_button", ()->false/*TODO: Config.enableBricksButton*/);
add("carpeted_trapdoor", Config.enableCarpetedTrapdoor);
add("collector", Config.enableCollector);
add("pipe", Config.enablePipe);
add("redstone_book", Config::enableRedstoneBook);
add("torch_lever", Config.enableTorchLever);
// tools
add("barometer", Config.enableBarometer);
add("charged_arrow", Config.enableChargedArrow);
add("craft_waypoint_compass", Config::craftWaypointCompass);
add("copy_waypoint_compass", Config::copyWaypointCompass);
add("dye_waypoint_compass", Config::dyeWaypointCompass);
add("lock", Config.enableLock);
add("north_compass", Config.enableNorthCompass);
add("photometer", Config.enablePhotometer);
add("redstone_charger", Config.enableRedstoneCharger);
// tweaks
add("more_seeds", ()->false/* TODO: Config.enableMoreSeeds */);
add("unstackable_alts", Config.unstackableRecipeAlts);
add("skeleton_skull", Config.skeletonSkull);
add("cave_spider_web", Config.caveSpiderDrops);
// recipes
add("cauldron_dyeing", ()->false/* TODO: Config::enableCauldronDyeing */);
add("cauldron_fluids", ()->false/* TODO: Config::enableCauldronFluids */);
add("cauldron_potions", ()->false/* TODO: Config::enableCauldronPotions */);
add("extra_dyed_bottle_recipes", ()->false/* TODO: Config::extraBottleRecipes */);
add("patch_vanilla_dye_recipes", ()->false/* TODO: Config::patchVanillaDyeRecipes */);
}
}