Hi,
I configured a value to be false in my config, but when I load a world, it changes to true, and the config file does not change. I confirmed it while debugging.
I'm using it as a loot table condition. It's raw_squid - so squids should drop meat when killed.
Config class:
package com.sokas.Mokas.config;
import java.io.File;
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.common.ForgeConfigSpec.BooleanValue;
import net.minecraftforge.common.ForgeConfigSpec.Builder;
import net.minecraftforge.common.ForgeConfigSpec.IntValue;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class Config {
private static final Builder builder = new Builder();
public static final ForgeConfigSpec config;
public static IntValue EGG_FOOD_POINT;
public static IntValue RAW_SQUID_FOOD_POINT;
public static IntValue COOKED_SQUID_FOOD_POINT;
public static IntValue RAW_APPLE_PIE_FOOD_POINT;
public static IntValue APPLE_PIE_FOOD_POINT;
public static IntValue EGG_SATURATION;
public static IntValue RAW_SQUID_SATURATION;
public static IntValue COOKED_SQUID_SATURATION;
public static IntValue RAW_APPLE_PIE_SATURATION;
public static IntValue APPLE_PIE_SATURATION;
public static BooleanValue ENDER_PEARL_RECIPE;
public static BooleanValue GLOWSTONE_DUST_RECIPE;
public static BooleanValue COOKED_EGG;
public static BooleanValue RAW_SQUID;
public static BooleanValue COOKED_SQUID;
public static BooleanValue RAW_APPLE_PIE;
public static BooleanValue APPLE_PIE;
public static BooleanValue CARDBOARD;
public static BooleanValue BOOK;
public static BooleanValue FEATHER_WOOL;
static {
String start = "enable_disable.";
ENDER_PEARL_RECIPE = builder.comment(""/*"If this mod's ender pearl recipe should be enabled or not."*/)
.define(start + "ender_pearl", true);
GLOWSTONE_DUST_RECIPE = builder.comment(""/*"If this mod's glowstone dust recipe should be enabled or not."*/)
.define(start + "glowstone_dust", true);
COOKED_EGG = builder.comment(""/* If this mod's cooked egg recipe should be enabled or not." */)
.define(start + "cooked_egg", true);
RAW_SQUID = builder.comment(""/* "If squids drop raw squid or not." */).define(start + "raw_squid", true);
COOKED_SQUID = builder.comment(""/* "If raw squid should be cookable or not." */).define(start + "cooked_squid",
true);
RAW_APPLE_PIE = builder.comment(""/* "If this mod's apple pie recipe should be enabled or not." */)
.define(start + "raw_apple_pie", true);
APPLE_PIE = builder.comment(""/* "If raw apple pies should be cookable or not." */).define(start + "apple_pie",
true);
FEATHER_WOOL = builder.comment("").define(start + "feather_wool", true);
CARDBOARD = builder.comment("").define(start + "cardboard", true);
BOOK = builder.comment("").define(start + "book", true);
EGG_FOOD_POINT = builder.comment("How many drumsticks are given by eating a cooked egg.")
.defineInRange("cooked_egg.food_point", 3, 2, 4);
EGG_SATURATION = builder.comment("How much saturation is given by eating a cooked egg.")
.defineInRange("cooked_egg.saturation", 2, 1, 3);
RAW_SQUID_FOOD_POINT = builder.comment("How many drumsticks are given by eating a raw squid.")
.defineInRange("raw_squid.food_point", 2, 1, 3);
RAW_SQUID_SATURATION = builder.comment("How much saturation is given by eating a raw squid.")
.defineInRange("raw_squid.saturation", 2, 1, 3);
COOKED_SQUID_FOOD_POINT = builder.comment("How many drumsticks are given by eating a cooked squid.")
.defineInRange("cooked_squid.food_point", 4, 3, 5);
COOKED_SQUID_SATURATION = builder.comment("How much saturation is given by eating a cooked squid.")
.defineInRange("cooked_squid.saturation", 4, 3, 5);
RAW_APPLE_PIE_FOOD_POINT = builder.comment("How many drumsticks are given by eating a raw apple pie.")
.defineInRange("raw_apple_pie.food_point", 3, 1, 10);
RAW_APPLE_PIE_SATURATION = builder.comment("How much saturation is given by eating a raw apple pie.")
.defineInRange("raw_apple_pie.saturation", 4, 1, 8);
APPLE_PIE_FOOD_POINT = builder.comment("How many drumsticks are given by eating an apple pie.")
.defineInRange("apple_pie.food_point", 5, 5, 20);
APPLE_PIE_SATURATION = builder.comment("How much saturation is given by eating an apple pie.")
.defineInRange("apple_pie.saturation", 6, 3, 12);
config = builder.build();
}
public static void loadConfig(ForgeConfigSpec config, String path) {
final CommentedFileConfig file = CommentedFileConfig.builder(new File(path)).sync().autosave()
.preserveInsertionOrder().writingMode(WritingMode.REPLACE).build();
file.load();
config.setConfig(file);
}
}
Config:
[cooked_egg]
#How much saturation is given by eating a cooked egg.
#Range: 1 ~ 3
saturation = 2
#How many drumsticks are given by eating a cooked egg.
#Range: 2 ~ 4
food_point = 3
[raw_squid]
#How much saturation is given by eating a raw squid.
#Range: 1 ~ 3
saturation = 2
#How many drumsticks are given by eating a raw squid.
#Range: 1 ~ 3
food_point = 2
[cooked_squid]
#How much saturation is given by eating a cooked squid.
#Range: 3 ~ 5
saturation = 4
#How many drumsticks are given by eating a cooked squid.
#Range: 3 ~ 5
food_point = 4
[raw_apple_pie]
#How much saturation is given by eating a raw apple pie.
#Range: 1 ~ 8
saturation = 4
#How many drumsticks are given by eating a raw apple pie.
#Range: 1 ~ 10
food_point = 3
[apple_pie]
#How much saturation is given by eating an apple pie.
#Range: 3 ~ 12
saturation = 6
#How many drumsticks are given by eating an apple pie.
#Range: 5 ~ 20
food_point = 5
[enable_disable]
cooked_squid = true
feather_wool = true
apple_pie = true
glowstone_dust = true
book = true
ender_pearl = true
cooked_egg = true
cardboard = true
raw_apple_pie = true
raw_squid = false
Main class:
package com.sokas.Mokas;
import static net.minecraftforge.common.crafting.CraftingHelper.register;
import java.io.File;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.sokas.Mokas.config.Config;
import com.sokas.Mokas.recipes.ApplePieCondition;
import com.sokas.Mokas.recipes.BookCondition;
import com.sokas.Mokas.recipes.CardboardCondition;
import com.sokas.Mokas.recipes.CookedEggCondition;
import com.sokas.Mokas.recipes.CookedSquidCondition;
import com.sokas.Mokas.recipes.EnderPearlCondition;
import com.sokas.Mokas.recipes.FeatherWoolCondition;
import com.sokas.Mokas.recipes.GlowstoneDustCondition;
import com.sokas.Mokas.recipes.RawApplePieCondition;
import com.sokas.Mokas.recipes.RawSquidLootCondition;
import com.sokas.Mokas.setup.Registration;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.loading.FMLPaths;
@Mod(Main.MOD_ID)
public class Main {
public static final String MOD_ID = "mokas";
public static File config;
public static Logger logger = LogManager.getLogger(MOD_ID);
public Main() {
Registration.register();
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, Config.config);
Config.loadConfig(Config.config, FMLPaths.CONFIGDIR.get().resolve(MOD_ID + ".toml").toString());
register(new EnderPearlCondition.Serializer());
register(new GlowstoneDustCondition.Serializer());
register(new ApplePieCondition.Serializer());
register(new BookCondition.Serializer());
register(new CardboardCondition.Serializer());
register(new CookedEggCondition.Serializer());
register(new CookedSquidCondition.Serializer());
register(new FeatherWoolCondition.Serializer());
register(new RawApplePieCondition.Serializer());
RawSquidLootCondition.load();
MinecraftForge.EVENT_BUS.register(this);
}
}
Condition class:
package com.sokas.Mokas.recipes;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.sokas.Mokas.Main;
import com.sokas.Mokas.config.Config;
import com.sokas.Mokas.setup.LootHelpers;
import net.minecraft.loot.ILootSerializer;
import net.minecraft.loot.LootConditionType;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.conditions.ILootCondition;
import net.minecraft.util.ResourceLocation;
public class RawSquidLootCondition implements ILootCondition {
private static final LootConditionType TYPE = LootHelpers.registerCondition(
new ResourceLocation(Main.MOD_ID, "raw_squid_condition"), new RawSquidLootCondition.Serializer());
@Override
public boolean test(LootContext t) {
return Config.RAW_SQUID.get();
}
@Override
public LootConditionType func_230419_b_() {
return TYPE;
}
public static void load() {
// Dummy call, to enforce class loading
}
public static class Serializer implements ILootSerializer<RawSquidLootCondition> {
public static final Serializer INSTANCE = new Serializer();
@Override
public void serialize(JsonObject p_230424_1_, RawSquidLootCondition p_230424_2_,
JsonSerializationContext p_230424_3_) {
}
@Override
public RawSquidLootCondition deserialize(JsonObject p_230423_1_, JsonDeserializationContext p_230423_2_) {
return new RawSquidLootCondition();
}
}
}
json:
{
"type": "minecraft:entity",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "mokas:raw_squid",
"functions": [
{
"function": "minecraft:set_count",
"count": 1
}
]
}
],
"conditions": [
{
"condition": "mokas:raw_squid_condition"
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:ink_sac",
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1,
"max": 3
}
},
{
"function": "minecraft:looting_enchant",
"count": {
"min": 0,
"max": 1
}
}
]
}
]
}
]
}
Thanks in advance!