diff --git a/src/main/java/thecodex6824/thaumcraftfix/ThaumcraftFix.java b/src/main/java/thecodex6824/thaumcraftfix/ThaumcraftFix.java
index 49e8b60..14e6f67 100644
--- a/src/main/java/thecodex6824/thaumcraftfix/ThaumcraftFix.java
+++ b/src/main/java/thecodex6824/thaumcraftfix/ThaumcraftFix.java
@@ -1,21 +1,21 @@
/**
- * Thaumcraft Fix
- * Copyright (c) 2024 TheCodex6824.
- *
- * This file is part of Thaumcraft Fix.
- *
- * Thaumcraft Fix is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Thaumcraft Fix is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Thaumcraft Fix. If not, see .
+ * Thaumcraft Fix
+ * Copyright (c) 2024 TheCodex6824.
+ *
+ * This file is part of Thaumcraft Fix.
+ *
+ * Thaumcraft Fix is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Thaumcraft Fix is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Thaumcraft Fix. If not, see .
*/
package thecodex6824.thaumcraftfix;
@@ -88,7 +88,7 @@
import thecodex6824.thaumcraftfix.common.world.AuraFinalizerWorldGenerator;
@Mod(modid = ThaumcraftFixApi.MODID, name = "Thaumcraft Fix", version = ThaumcraftFix.VERSION, useMetadata = true,
-certificateFingerprint = "@FINGERPRINT@")
+ certificateFingerprint = "@FINGERPRINT@")
@EventBusSubscriber
public class ThaumcraftFix {
@@ -98,7 +98,7 @@ public class ThaumcraftFix {
public static ThaumcraftFix instance;
@SidedProxy(modId = ThaumcraftFixApi.MODID, serverSide = "thecodex6824.thaumcraftfix.ServerProxy",
- clientSide = "thecodex6824.thaumcraftfix.ClientProxy")
+ clientSide = "thecodex6824.thaumcraftfix.ClientProxy")
public static IProxy proxy;
private Logger logger;
@@ -106,208 +106,207 @@ public class ThaumcraftFix {
@EventHandler
public void construction(FMLConstructionEvent event) {
- proxy.construction();
+ proxy.construction();
}
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
- logger = event.getModLog();
- ThaumcraftFixApiBridge.setImplementation(new DefaultApiImplementation());
- CapabilityManager.INSTANCE.register(IOriginalAuraInfo.class, new IStorage() {
- @Override
- public void readNBT(Capability capability, IOriginalAuraInfo instance, EnumFacing side, NBTBase nbt) {
- if (!(instance instanceof OriginalAuraInfo) || !(nbt instanceof NBTTagCompound))
- throw new UnsupportedOperationException("Can't deserialize non-API implementation");
-
- ((OriginalAuraInfo) instance).deserializeNBT((NBTTagCompound) nbt);
- }
-
- @Override
- @Nullable
- public NBTBase writeNBT(Capability capability, IOriginalAuraInfo instance, EnumFacing side) {
- if (!(instance instanceof OriginalAuraInfo))
- throw new UnsupportedOperationException("Can't serialize non-API implementation");
-
- return ((OriginalAuraInfo) instance).serializeNBT();
- }
- }, OriginalAuraInfo::new);
- ResearchApi.registerScanParser(new ScanParserBlock(), 1000);
- ResearchApi.registerScanParser(new ScanParserItem(), 1000);
- ResearchApi.registerScanParser(new ScanParserItemExtended(), 1000);
- ResearchApi.registerScanParser(new ScanParserEntity(), 1000);
- ResearchApi.registerResearchEntrySource(Paths.get("config", ThaumcraftFixApi.MODID, "entries"));
- ResearchApi.registerResearchPatchSource(Paths.get("config", ThaumcraftFixApi.MODID, "patches"), 1000);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/alchemy.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/artifice.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/auromancy.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/basics.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/eldritch.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/golemancy.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/infusion.json"), -1);
- ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/scans.json"), -1);
+ logger = event.getModLog();
+ ThaumcraftFixApiBridge.setImplementation(new DefaultApiImplementation());
+ CapabilityManager.INSTANCE.register(IOriginalAuraInfo.class, new IStorage() {
+ @Override
+ public void readNBT(Capability capability, IOriginalAuraInfo instance, EnumFacing side, NBTBase nbt) {
+ if (!(instance instanceof OriginalAuraInfo) || !(nbt instanceof NBTTagCompound))
+ throw new UnsupportedOperationException("Can't deserialize non-API implementation");
+
+ ((OriginalAuraInfo) instance).deserializeNBT((NBTTagCompound) nbt);
+ }
+
+ @Override
+ @Nullable
+ public NBTBase writeNBT(Capability capability, IOriginalAuraInfo instance, EnumFacing side) {
+ if (!(instance instanceof OriginalAuraInfo))
+ throw new UnsupportedOperationException("Can't serialize non-API implementation");
+
+ return ((OriginalAuraInfo) instance).serializeNBT();
+ }
+ }, OriginalAuraInfo::new);
+ ResearchApi.registerScanParser(new ScanParserBlock(), 1000);
+ ResearchApi.registerScanParser(new ScanParserItem(), 1000);
+ ResearchApi.registerScanParser(new ScanParserItemExtended(), 1000);
+ ResearchApi.registerScanParser(new ScanParserEntity(), 1000);
+ ResearchApi.registerResearchEntrySource(Paths.get("config", ThaumcraftFixApi.MODID, "entries"));
+ ResearchApi.registerResearchPatchSource(Paths.get("config", ThaumcraftFixApi.MODID, "patches"), 1000);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/alchemy.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/artifice.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/auromancy.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/basics.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/eldritch.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/golemancy.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/infusion.json"), -1);
+ ResearchApi.registerResearchPatchSource(new ResourceLocation(ThaumcraftFixApi.MODID, "research/patches/scans.json"), -1);
}
@SubscribeEvent(priority = EventPriority.LOW)
public static void afterThaumcraftRegistersItems(RegistryEvent- event) {
- // we want to run a bunch of static initializers at a consistent time
- try {
- Class.forName("thaumcraft.common.golems.GolemProperties");
- }
- catch (ClassNotFoundException ex) {
- // if we don't have GolemProperties golems will be broken...
- throw new RuntimeException(ex);
- }
+ // we want to run a bunch of static initializers at a consistent time
+ try {
+ Class.forName("thaumcraft.common.golems.GolemProperties");
+ } catch (ClassNotFoundException ex) {
+ // if we don't have GolemProperties golems will be broken...
+ throw new RuntimeException(ex);
+ }
}
@EventHandler
public void init(FMLInitializationEvent event) {
- network = new ThaumcraftFixNetworkHandler();
- GameRegistry.registerWorldGenerator(new AuraFinalizerWorldGenerator(), Integer.MAX_VALUE);
- boolean errors = ResearchConfigParser.loadCategories();
- errors |= ResearchConfigParser.loadScans();
- errors |= ResearchConfigParser.loadAdvancements();
- if (errors) {
- logger.error("One or more research errors have occurred. Please check the log file for more information.");
- }
+ network = new ThaumcraftFixNetworkHandler();
+ GameRegistry.registerWorldGenerator(new AuraFinalizerWorldGenerator(), Integer.MAX_VALUE);
+ boolean errors = ResearchConfigParser.loadCategories();
+ errors |= ResearchConfigParser.loadScans();
+ errors |= ResearchConfigParser.loadAdvancements();
+ if (errors) {
+ logger.error("One or more research errors have occurred. Please check the log file for more information.");
+ }
}
private static void setToolMaterialRepairItem(ToolMaterial material, ItemStack repair) {
- try {
- material.setRepairItem(repair);
- }
- catch (RuntimeException ex) {
- // someone already set repair items
- }
+ try {
+ material.setRepairItem(repair);
+ } catch (RuntimeException ex) {
+ // someone already set repair items
+ }
}
private static void setArmorMaterialRepairItem(ArmorMaterial material, ItemStack repair) {
- try {
- material.setRepairItem(repair);
- }
- catch (RuntimeException ex) {
- // someone already set repair items
- }
+ try {
+ material.setRepairItem(repair);
+ } catch (RuntimeException ex) {
+ // someone already set repair items
+ }
}
//Wrapper function for registering aspects to an entity.
@SuppressWarnings("deprecation")
private static void registerEntityAspects(String entityName, AspectList aspectList) {
- ThaumcraftApi.registerEntityTag(entityName, aspectList);
+ ThaumcraftApi.registerEntityTag(entityName, aspectList);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
- ThaumcraftFixApiBridge.implementation().reloadConfig();
-
- // reset repair materials for TC materials
- // if the class was loaded before now, the items used will have been null and won't register
- // the individual items have extra code to allow repair, but these are required for generic support
- setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_ELEMENTAL, new ItemStack(ItemsTC.ingots, 1, 0));
- setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_THAUMIUM, new ItemStack(ItemsTC.ingots, 1, 0));
- setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_VOID, new ItemStack(ItemsTC.ingots, 1, 1));
-
- // these just don't have repair materials defined
- // should these be replaced with plates? would also need to override every class usage...
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_LEADER, new ItemStack(Items.IRON_INGOT));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_PLATE, new ItemStack(Items.IRON_INGOT));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_ROBE, new ItemStack(Items.IRON_INGOT));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_FORTRESS, new ItemStack(ItemsTC.ingots, 1, 0));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_THAUMIUM, new ItemStack(ItemsTC.ingots, 1, 0));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_VOID, new ItemStack(ItemsTC.ingots, 1, 1));
- setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_VOIDROBE, new ItemStack(ItemsTC.ingots, 1, 1));
-
- // these don't have repair materials and are shared across multiple items
- // it doesn't really make sense to have a single repair material for it
- // ThaumcraftMaterials.ARMORMAT_SPECIAL
-
-
- //Register additional entity aspects, start off with turrets...
- registerEntityAspects("ArcaneBore", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.TOOL, 10).add(Aspect.MAGIC, 10).add(Aspect.ENTROPY, 10));
- registerEntityAspects("TurretBasic", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.AVERSION, 10).add(Aspect.MAGIC, 10));
- registerEntityAspects("TurretAdvanced", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.AVERSION, 10).add(Aspect.MAGIC, 10).add(Aspect.MIND, 10));
-
- //Taint stuff...
- registerEntityAspects("TaintCrawler", new AspectList().add(Aspect.FLUX, 5).add(Aspect.BEAST, 5));
-
- //Cult stuff...
- registerEntityAspects("CultistPortalLesser", new AspectList().add(Aspect.AURA, 20).add(Aspect.ELDRITCH, 20).add(Aspect.AVERSION, 20));
- registerEntityAspects("CultistPortalGreater", new AspectList().add(Aspect.AURA, 40).add(Aspect.ELDRITCH, 40).add(Aspect.AVERSION, 40));
-
- //Machine projectiles...
- registerEntityAspects("Grapple", new AspectList().add(Aspect.MECHANISM, 5).add(Aspect.MAGIC, 5).add(Aspect.TRAP, 5));
- registerEntityAspects("GolemDart", new AspectList().add(Aspect.AVERSION, 5).add(Aspect.MOTION, 5));
-
- //Misc projectiles...
- registerEntityAspects("Alumentum", new AspectList().add(Aspect.ENERGY, 10).add(Aspect.FIRE, 10).add(Aspect.ENTROPY, 5).add(Aspect.MOTION, 5));
- registerEntityAspects("CausalityCollapser", new AspectList().add(Aspect.ENERGY, 40).add(Aspect.FIRE, 40).add(Aspect.ENTROPY, 20).add(Aspect.MOTION, 5).add(Aspect.ELDRITCH, 10));
- registerEntityAspects("BottleTaint", new AspectList().add(Aspect.FLUX, 15).add(Aspect.WATER, 5).add(Aspect.MOTION, 5));
- registerEntityAspects("FallingTaint", new AspectList().add(Aspect.MOTION, 5).add(Aspect.FLUX, 5));
- registerEntityAspects("EldritchOrb", new AspectList().add(Aspect.ELDRITCH, 5).add(Aspect.MOTION, 5).add(Aspect.AVERSION, 5));
- registerEntityAspects("GolemOrb", new AspectList().add(Aspect.ENERGY, 5).add(Aspect.MOTION, 5).add(Aspect.AVERSION, 5));
-
- //And finally casted entities.
- registerEntityAspects("FocusCloud", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.ALCHEMY, 10));
- registerEntityAspects("Focusmine", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.TRAP, 10));
- registerEntityAspects("FocusProjectile", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.MOTION, 10));
-
- //Can be cheesed easily, so comment spellbat aspects out for now.
- //registerEntityAspects("Spellbat", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.BEAST, 10));
-
-
- // delete broken spellbat spawn egg
- EntityEntry spellbat = EntityRegistry.getEntry(EntitySpellBat.class);
- if (spellbat != null) {
- spellbat.setEgg(null);
- EntityList.ENTITY_EGGS.remove(spellbat.getRegistryName());
- }
+ ThaumcraftFixApiBridge.implementation().reloadConfig();
+
+ // reset repair materials for TC materials
+ // if the class was loaded before now, the items used will have been null and won't register
+ // the individual items have extra code to allow repair, but these are required for generic support
+ setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_ELEMENTAL, new ItemStack(ItemsTC.ingots, 1, 0));
+ setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_THAUMIUM, new ItemStack(ItemsTC.ingots, 1, 0));
+ setToolMaterialRepairItem(ThaumcraftMaterials.TOOLMAT_VOID, new ItemStack(ItemsTC.ingots, 1, 1));
+
+ // these just don't have repair materials defined
+ // should these be replaced with plates? would also need to override every class usage...
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_LEADER, new ItemStack(Items.IRON_INGOT));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_PLATE, new ItemStack(Items.IRON_INGOT));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_CULTIST_ROBE, new ItemStack(Items.IRON_INGOT));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_FORTRESS, new ItemStack(ItemsTC.ingots, 1, 0));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_THAUMIUM, new ItemStack(ItemsTC.ingots, 1, 0));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_VOID, new ItemStack(ItemsTC.ingots, 1, 1));
+ setArmorMaterialRepairItem(ThaumcraftMaterials.ARMORMAT_VOIDROBE, new ItemStack(ItemsTC.ingots, 1, 1));
+
+ // these don't have repair materials and are shared across multiple items
+ // it doesn't really make sense to have a single repair material for it
+ // ThaumcraftMaterials.ARMORMAT_SPECIAL
+
+
+ //Register additional entity aspects, start off with turrets...
+ registerEntityAspects("ArcaneBore", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.TOOL, 10).add(Aspect.MAGIC, 10).add(Aspect.ENTROPY, 10));
+ registerEntityAspects("TurretBasic", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.AVERSION, 10).add(Aspect.MAGIC, 10));
+ registerEntityAspects("TurretAdvanced", new AspectList().add(Aspect.MECHANISM, 10).add(Aspect.AVERSION, 10).add(Aspect.MAGIC, 10).add(Aspect.MIND, 10));
+
+ //Taint stuff...
+ registerEntityAspects("TaintCrawler", new AspectList().add(Aspect.FLUX, 5).add(Aspect.BEAST, 5));
+
+ //Cult stuff...
+ registerEntityAspects("CultistPortalLesser", new AspectList().add(Aspect.AURA, 20).add(Aspect.ELDRITCH, 20).add(Aspect.AVERSION, 20));
+ registerEntityAspects("CultistPortalGreater", new AspectList().add(Aspect.AURA, 40).add(Aspect.ELDRITCH, 40).add(Aspect.AVERSION, 40));
+
+ //Machine projectiles...
+ registerEntityAspects("Grapple", new AspectList().add(Aspect.MECHANISM, 5).add(Aspect.MAGIC, 5).add(Aspect.TRAP, 5));
+ registerEntityAspects("GolemDart", new AspectList().add(Aspect.AVERSION, 5).add(Aspect.MOTION, 5));
+
+ //Misc projectiles...
+ registerEntityAspects("Alumentum", new AspectList().add(Aspect.ENERGY, 10).add(Aspect.FIRE, 10).add(Aspect.ENTROPY, 5).add(Aspect.MOTION, 5));
+ registerEntityAspects("CausalityCollapser", new AspectList().add(Aspect.ENERGY, 40).add(Aspect.FIRE, 40).add(Aspect.ENTROPY, 20).add(Aspect.MOTION, 5).add(Aspect.ELDRITCH, 10));
+ registerEntityAspects("BottleTaint", new AspectList().add(Aspect.FLUX, 15).add(Aspect.WATER, 5).add(Aspect.MOTION, 5));
+ registerEntityAspects("FallingTaint", new AspectList().add(Aspect.MOTION, 5).add(Aspect.FLUX, 5));
+ registerEntityAspects("EldritchOrb", new AspectList().add(Aspect.ELDRITCH, 5).add(Aspect.MOTION, 5).add(Aspect.AVERSION, 5));
+ registerEntityAspects("GolemOrb", new AspectList().add(Aspect.ENERGY, 5).add(Aspect.MOTION, 5).add(Aspect.AVERSION, 5));
+
+ //And finally casted entities.
+ registerEntityAspects("FocusCloud", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.ALCHEMY, 10));
+ registerEntityAspects("Focusmine", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.TRAP, 10));
+ registerEntityAspects("FocusProjectile", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.MOTION, 10));
+
+ //Can be cheesed easily, so comment spellbat aspects out for now.
+ //registerEntityAspects("Spellbat", new AspectList().add(Aspect.AURA, 10).add(Aspect.MAGIC, 10).add(Aspect.BEAST, 10));
+
+
+ // delete broken spellbat spawn egg
+ EntityEntry spellbat = EntityRegistry.getEntry(EntitySpellBat.class);
+ if (spellbat != null) {
+ spellbat.setEgg(null);
+ EntityList.ENTITY_EGGS.remove(spellbat.getRegistryName());
+ }
+
+ ResearchConfigParser.researchPostInit();
}
@EventHandler
public void loadComplete(FMLLoadCompleteEvent event) {
- ThaumcraftFixApiBridge.InternalImplementation impl = ThaumcraftFixApiBridge.implementation();
- if (impl instanceof DefaultApiImplementation) {
- ImmutableSet.Builder allowed = ImmutableSet.builder();
- for (ResearchCategory category : ResearchCategories.researchCategories.values()) {
- for (ResearchEntry entry : category.research.values()) {
- if (entry.getStages() != null) {
- for (ResearchStage stage : entry.getStages()) {
- if (stage.getKnow() != null) {
- for (Knowledge know : stage.getKnow()) {
- if (know.type == EnumKnowledgeType.THEORY && know.category != null) {
- allowed.add(know.category);
- }
- }
- }
- }
- }
- }
- }
-
- ((DefaultApiImplementation) impl).setAllowedTheorycraftCategories(allowed.build());
- logger.debug("The following research categories will be allowed for theorycrafting:");
- for (ResearchCategory c : ResearchCategoryTheorycraftFilter.getAllowedTheorycraftCategories()) {
- logger.debug("{}", c.key);
- }
- }
+ ThaumcraftFixApiBridge.InternalImplementation impl = ThaumcraftFixApiBridge.implementation();
+ if (impl instanceof DefaultApiImplementation) {
+ ImmutableSet.Builder allowed = ImmutableSet.builder();
+ for (ResearchCategory category : ResearchCategories.researchCategories.values()) {
+ for (ResearchEntry entry : category.research.values()) {
+ if (entry.getStages() != null) {
+ for (ResearchStage stage : entry.getStages()) {
+ if (stage.getKnow() != null) {
+ for (Knowledge know : stage.getKnow()) {
+ if (know.type == EnumKnowledgeType.THEORY && know.category != null) {
+ allowed.add(know.category);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ((DefaultApiImplementation) impl).setAllowedTheorycraftCategories(allowed.build());
+ logger.debug("The following research categories will be allowed for theorycrafting:");
+ for (ResearchCategory c : ResearchCategoryTheorycraftFilter.getAllowedTheorycraftCategories()) {
+ logger.debug("{}", c.key);
+ }
+ }
}
@EventHandler
public static void onFingerPrintViolation(FMLFingerprintViolationEvent event) {
- if (!event.isDirectory()) {
- Logger tempLogger = LogManager.getLogger(ThaumcraftFixApi.MODID);
- tempLogger.warn("A file failed to match with the signing key.");
- tempLogger.warn("If you *know* this is a homebrew/custom build then this is expected, carry on.");
- tempLogger.warn("Otherwise, you might want to redownload this mod from the *official* CurseForge page.");
- }
+ if (!event.isDirectory()) {
+ Logger tempLogger = LogManager.getLogger(ThaumcraftFixApi.MODID);
+ tempLogger.warn("A file failed to match with the signing key.");
+ tempLogger.warn("If you *know* this is a homebrew/custom build then this is expected, carry on.");
+ tempLogger.warn("Otherwise, you might want to redownload this mod from the *official* CurseForge page.");
+ }
}
public Logger getLogger() {
- return logger;
+ return logger;
}
public SimpleNetworkWrapper getNetworkHandler() {
- return network;
+ return network;
}
}
diff --git a/src/main/java/thecodex6824/thaumcraftfix/common/ThaumcraftFixConfig.java b/src/main/java/thecodex6824/thaumcraftfix/common/ThaumcraftFixConfig.java
index 25d0794..f73bb6a 100644
--- a/src/main/java/thecodex6824/thaumcraftfix/common/ThaumcraftFixConfig.java
+++ b/src/main/java/thecodex6824/thaumcraftfix/common/ThaumcraftFixConfig.java
@@ -162,6 +162,14 @@ public static class VegetationConfig {
}
+ @Name("CategoriesToRemove")
+ @Comment({
+ "The keys of categories that should be deleted.",
+ "Note that categories are not automatically deleted (even when having no entries) due to addon incompatibilities."
+ })
+ @Config.RequiresMcRestart
+ public static String[] removedCategories = {};
+
@Name("world")
@LangKey(ThaumcraftFixApi.MODID + ".text.config.world")
public static WorldConfig world = new WorldConfig();
diff --git a/src/main/java/thecodex6824/thaumcraftfix/common/research/ResearchConfigParser.java b/src/main/java/thecodex6824/thaumcraftfix/common/research/ResearchConfigParser.java
index 9d2edf5..c2acc3e 100644
--- a/src/main/java/thecodex6824/thaumcraftfix/common/research/ResearchConfigParser.java
+++ b/src/main/java/thecodex6824/thaumcraftfix/common/research/ResearchConfigParser.java
@@ -43,6 +43,7 @@
import thaumcraft.api.research.ScanningManager;
import thecodex6824.thaumcraftfix.ThaumcraftFix;
import thecodex6824.thaumcraftfix.api.ResearchApi;
+import thecodex6824.thaumcraftfix.common.ThaumcraftFixConfig;
import thecodex6824.thaumcraftfix.common.event.AdvancementResearchEventHandler;
import thecodex6824.thaumcraftfix.common.json.JsonSchemaException;
import thecodex6824.thaumcraftfix.common.json.JsonUtils;
@@ -189,4 +190,18 @@ public boolean accept(File f) {
return researchErrors;
}
+ public static void researchPostInit() {
+ Logger log = ThaumcraftFix.instance.getLogger();
+ for (String s : ThaumcraftFixConfig.removedCategories) {
+ if (ResearchCategories.researchCategories.remove(s) != null)
+ log.info("Removing research category " + s);
+ else
+ log.warn("Research category " + s + " was supposed to be removed, but did not exist");
+ }
+
+ // "reminder" because init / model loading often causes log spam
+ //if (researchErrors)
+ // log.error("One or more research errors have occurred. Please check the log file for more information.");
+ }
+
}