Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/main/java/com/circulation/only_one_item/OOIConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Loader;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
Expand All @@ -28,12 +30,16 @@ public class OOIConfig {
public static final List<ItemConversionTarget> items = new ObjectArrayList<>();
public static final List<FluidConversionTarget> fluids = new ObjectArrayList<>();
public static final Set<BlackMatchItem> blackList = new ObjectOpenHashSet<>();
public static boolean clearDuplicateRecipes = true;
public static boolean initializeBeforeCraftTweakerActions = true;
public static boolean processOreDictionaryAtLoadComplete = false;

public static void readConfig() {
var configPath = Loader.instance().getConfigDir().toPath().resolve("ooi");
var ooiPath = configPath.resolve("ooi_item.json");
var blackPath = configPath.resolve("ooi_item_black_list.json");
var ooiFluidPath = configPath.resolve("ooi_fluid.json");
readGeneralConfig(Loader.instance().getConfigDir());

try {
Files.createDirectories(configPath);
Expand Down Expand Up @@ -99,6 +105,40 @@ public static void readConfig() {
MatchFluidHandler.Init(OOIConfig.fluids);
}

private static void readGeneralConfig(File configDir) {
Configuration config = new Configuration(new File(configDir, "only_one_item.cfg"));
try {
config.load();
clearDuplicateRecipes = config.getBoolean(
"clearDuplicateRecipes",
"recipes",
true,
"Remove duplicate crafting recipes generated by ore dictionary unification. " +
"Disable this if another recipe manager or CraftTweaker scripts need to control recipe removals."
);
initializeBeforeCraftTweakerActions = config.getBoolean(
"initializeBeforeCraftTweakerActions",
"recipes",
true,
"When CraftTweaker is installed, initialize OOI stack unification at the start of CraftTweaker postInit " +
"so CraftTweaker and ModTweaker removals see already-unified inputs."
);
processOreDictionaryAtLoadComplete = config.getBoolean(
"processOreDictionaryAtLoadComplete",
"recipes",
false,
"Run OOI ore dictionary post-processing during FMLLoadComplete. The old behavior used true, but it can " +
"rewrite machine recipe inputs after CraftTweaker removals have already run."
);
} catch (Exception e) {
OnlyOneItem.LOGGER.error("[OOI]The config/only_one_item.cfg file is incorrect!", e);
} finally {
if (config.hasChanged()) {
config.save();
}
}
}

private static void addItemTargets(Set<ItemConversionTarget> targets) {
if (targets == null) return;
for (ItemConversionTarget target : targets) {
Expand Down
24 changes: 21 additions & 3 deletions src/main/java/com/circulation/only_one_item/OnlyOneItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public class OnlyOneItem {

public static final Logger LOGGER = LogManager.getLogger(Tags.MOD_NAME);

private static boolean stackInitializationComplete = false;

@Mod.Instance(MOD_ID)
public static OnlyOneItem instance = null;

Expand All @@ -40,15 +42,31 @@ public void init(FMLInitializationEvent event) {

@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event) {
InitHandler.allPreInit();
if (!Loader.isModLoaded("unidict")) {
initializeStacksOnce("OOI postInit");
if (!Loader.isModLoaded("unidict") && OOIConfig.clearDuplicateRecipes) {
MatchItemHandler.clearRecipe();
} else if (!OOIConfig.clearDuplicateRecipes) {
LOGGER.info("[OOI] Duplicate recipe cleanup is disabled by config.");
}
}

@Mod.EventHandler
public void loadComplete(FMLLoadCompleteEvent event) {
MatchItemHandler.postODProcess();
if (OOIConfig.processOreDictionaryAtLoadComplete) {
MatchItemHandler.postODProcess();
} else {
LOGGER.info("[OOI] LoadComplete ore dictionary post-processing is disabled by config.");
}
}

public static synchronized void initializeStacksOnce(String phase) {
if (stackInitializationComplete) {
LOGGER.debug("[OOI] Stack initialization already completed, skipping {}.", phase);
return;
}

LOGGER.info("[OOI] Initializing stack unification at {}.", phase);
InitHandler.allPreInit();
stackInitializationComplete = true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.circulation.only_one_item.mixin.crt;

import com.circulation.only_one_item.OOIConfig;
import com.circulation.only_one_item.OnlyOneItem;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(value = crafttweaker.mc1120.CraftTweaker.class, remap = false)
public class MixinCraftTweaker {

@Inject(method = "onPostInit", at = @At("HEAD"))
private void ooi$initializeBeforeCraftTweakerActions(FMLPostInitializationEvent event, CallbackInfo ci) {
if (OOIConfig.initializeBeforeCraftTweakerActions) {
OnlyOneItem.initializeStacksOnce("CraftTweaker postInit");
}
}
}
3 changes: 2 additions & 1 deletion src/main/resources/mixins.only_one_item.crt.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
"minVersion": "0.8.5",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinCraftTweaker",
"MixinCrtCommonProxy"
],
"server": [],
"client": [
]
}
}
Loading