diff --git a/src/main/java/net/anvilcraft/classiccasting/Research.java b/src/main/java/net/anvilcraft/classiccasting/Research.java index f71d6c9..8373493 100644 --- a/src/main/java/net/anvilcraft/classiccasting/Research.java +++ b/src/main/java/net/anvilcraft/classiccasting/Research.java @@ -8,6 +8,7 @@ import java.util.Map; import dev.tilera.auracore.api.Aspects; import dev.tilera.auracore.api.crafting.IInfusionRecipe; import dev.tilera.auracore.api.research.ResearchPageInfusion; +import net.anvilcraft.classiccasting.research.CCResearchManager; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import thaumcraft.api.ThaumcraftApi; @@ -82,24 +83,24 @@ public class Research { new ResourceLocation("thaumcraft", "textures/gui/gui_researchback.png") ); - new ResearchItem("CCAURA", "CLASSICCASTING", new AspectList(), -2, -4, 1, new ResourceLocation("classiccasting", "textures/misc/aura.png")) + CCResearchManager.addDiscoverableResearch(new ResearchItem("CCAURA", "CLASSICCASTING", new AspectList(), -2, -4, 1, new ResourceLocation("classiccasting", "textures/misc/aura.png")) .setPages( new ResearchPage("classiccasting.research_page.CCAURA.1"), new ResearchPage("classiccasting.research_page.CCAURA.2") ) .setAutoUnlock() - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem("CCFLUX", "CLASSICCASTING", new AspectList(), -4, -4, 1, new ResourceLocation("classiccasting", "textures/misc/flux.png")) + CCResearchManager.addDiscoverableResearch(new ResearchItem("CCFLUX", "CLASSICCASTING", new AspectList(), -4, -4, 1, new ResourceLocation("classiccasting", "textures/misc/flux.png")) .setPages( new ResearchPage("classiccasting.research_page.CCFLUX.1"), new ResearchPage("classiccasting.research_page.CCFLUX.2") ) .setAutoUnlock() - .registerResearchItem(); + .registerResearchItem()); // TODO: move research to right place - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "MAGBLOCKS", "CLASSICCASTING", new AspectList() @@ -123,9 +124,9 @@ public class Research { new ResearchPage("classiccasting.research_page.MAGBLOCKS.3") ) .setParents("THAUMIUM") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "AURACOMPASS", "CLASSICCASTING", new AspectList() @@ -142,9 +143,9 @@ public class Research { new ResearchPage(arcaneRecipes.get("AuraCompass")) ) .setParents("MAGBLOCKS") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "CRYSTALCORE", "CLASSICCASTING", new AspectList() @@ -166,9 +167,9 @@ public class Research { new ResearchPage(magnetStructure) ) .setParents("THETHEORYOFEVERYTHING", "CRYSTALCLUSTER") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "CRYSTALCAPACITOR", "CLASSICCASTING", new AspectList() @@ -185,9 +186,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("CrystalCapacitor")) ) .setParents("CRYSTALCORE") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "UNIFIEDTHAUMICFIELDTHEORY", "CLASSICCASTING", new AspectList() @@ -213,9 +214,9 @@ public class Research { ) .setParents("MAGBLOCKS") .setSpecial() - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "WANDFIRE", "CLASSICCASTING", new AspectList() @@ -233,9 +234,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandFire")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "WANDFROST", "CLASSICCASTING", new AspectList().add(Aspect.COLD, 16).add(Aspect.WEAPON, 4), @@ -249,9 +250,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandFrost")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "WANDTRADE", "CLASSICCASTING", new AspectList() @@ -268,9 +269,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandTrade")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "WANDEXCAVATE", "CLASSICCASTING", new AspectList().add(Aspect.METAL, 16).add(Aspect.TOOL, 4), @@ -284,9 +285,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandExcavate")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "WANDLIGHTNING", "CLASSICCASTING", new AspectList() @@ -304,9 +305,9 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandLightning")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "BASICFLUX", "CLASSICCASTING", new AspectList() @@ -328,9 +329,9 @@ public class Research { new ResearchPage("classiccasting.research_page.BASICFLUX.3") ) .setParents("UNIFIEDTHAUMICFIELDTHEORY", "DISTILESSENTIA") - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "THETHEORYOFEVERYTHING", "CLASSICCASTING", new AspectList() @@ -365,9 +366,9 @@ public class Research { ) .setParents("UNIFIEDTHAUMICFIELDTHEORY", "BASICFLUX", "GOLEMSTRAW") .setSpecial() - .registerResearchItem(); + .registerResearchItem()); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "HELLROD", "CLASSICCASTING", new AspectList() @@ -386,11 +387,11 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("WandHellrod")) ) .setParents("THETHEORYOFEVERYTHING", "WANDFIRE") - .registerResearchItem(); + .registerResearchItem()); ThaumcraftApi.addWarpToResearch("HELLROD", 2); ThaumcraftApi.addWarpToItem(new ItemStack(CCItems.wandHellrod), 1); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "PORTABLEHOLE", "CLASSICCASTING", new AspectList() @@ -408,11 +409,11 @@ public class Research { new ResearchPageInfusion(infusionRecipes.get("PortableHole")) ) .setParents("UNIFIEDTHAUMICFIELDTHEORY", "ENCHFABRIC") - .registerResearchItem(); + .registerResearchItem()); ResearchPage crystalPage = new ResearchPageInfusion(clusters); crystalPage.recipeOutput = new ItemStack(ConfigBlocks.blockCrystal, 1, 9); - new ResearchItem( + CCResearchManager.addDiscoverableResearch(new ResearchItem( "CRYSTALCLUSTER", "CLASSICCASTING", new AspectList() @@ -429,6 +430,6 @@ public class Research { crystalPage ) .setParents("BASICFLUX") - .registerResearchItem(); + .registerResearchItem()); } } diff --git a/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java index 83fb803..4c3a61d 100644 --- a/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java +++ b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java @@ -1,9 +1,14 @@ package net.anvilcraft.classiccasting.container; import net.anvilcraft.classiccasting.CCItems; +import net.anvilcraft.classiccasting.research.CCResearchManager; +import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.lib.research.ResearchManager; +import thaumcraft.common.lib.research.ResearchNoteData; class SlotResearchTableOutput extends Slot { public SlotResearchTableOutput( @@ -13,7 +18,20 @@ class SlotResearchTableOutput extends Slot { } public boolean isItemValid(ItemStack par1ItemStack) { - return par1ItemStack.getItem() == CCItems.researchNotes + return (par1ItemStack.getItem() == CCItems.researchNotes || par1ItemStack.getItem() == ConfigItems.itemResearchNotes) && par1ItemStack.getItemDamage() < 64; } + + @Override + public void putStack(ItemStack note) { + if (note != null && note.getItem() == ConfigItems.itemResearchNotes) { + ResearchNoteData data = ResearchManager.getData(note); + if (data != null && !CCResearchManager.isDiscoverable(data.key)) { + note = CCResearchManager.createNote(new ItemStack(CCItems.researchNotes), data.key); + } else { + note = new ItemStack(Items.paper); + } + } + super.putStack(note); + } } diff --git a/src/main/java/net/anvilcraft/classiccasting/research/CCResearchManager.java b/src/main/java/net/anvilcraft/classiccasting/research/CCResearchManager.java index f7ef24a..784410a 100644 --- a/src/main/java/net/anvilcraft/classiccasting/research/CCResearchManager.java +++ b/src/main/java/net/anvilcraft/classiccasting/research/CCResearchManager.java @@ -1,6 +1,8 @@ package net.anvilcraft.classiccasting.research; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import net.anvilcraft.classiccasting.CCItems; import net.minecraft.entity.player.EntityPlayer; @@ -17,6 +19,9 @@ import thaumcraft.common.config.ConfigItems; import thaumcraft.common.lib.research.ResearchManager; public class CCResearchManager { + + public static Set discoverable = new HashSet<>(); + public static ItemStack createNote(ItemStack stack, String key) { ResearchItem research = ResearchCategories.getResearch(key); if (research == null) @@ -141,7 +146,8 @@ public class CCResearchManager { ) || !ResearchManager.doesPlayerHaveRequisites( player.getDisplayName(), research.key - )) + ) + || !isDiscoverable(research.key)) continue; int match = 0; for (int q = 0; q < 5; ++q) { @@ -264,4 +270,17 @@ public class CCResearchManager { } return bestMatch; } + + public static boolean isDiscoverable(String key) { + if (discoverable.contains(key)) { + return true; + } else { + ResearchItem item = ResearchCategories.getResearch(key); + return item != null && (item.category == "ALCHEMY" || item.category == "ARTIFICE" || item.category == "GOLEMANCY"); + } + } + + public static void addDiscoverableResearch(ResearchItem research) { + discoverable.add(research.key); + } }