feat: research system overhaul

This commit is contained in:
Timo Ley 2023-03-22 17:05:58 +01:00
parent 6a2e46dcc0
commit da3318fe70
3 changed files with 74 additions and 36 deletions

View file

@ -8,6 +8,7 @@ import java.util.Map;
import dev.tilera.auracore.api.Aspects; import dev.tilera.auracore.api.Aspects;
import dev.tilera.auracore.api.crafting.IInfusionRecipe; import dev.tilera.auracore.api.crafting.IInfusionRecipe;
import dev.tilera.auracore.api.research.ResearchPageInfusion; import dev.tilera.auracore.api.research.ResearchPageInfusion;
import net.anvilcraft.classiccasting.research.CCResearchManager;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.ThaumcraftApi;
@ -82,24 +83,24 @@ public class Research {
new ResourceLocation("thaumcraft", "textures/gui/gui_researchback.png") 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( .setPages(
new ResearchPage("classiccasting.research_page.CCAURA.1"), new ResearchPage("classiccasting.research_page.CCAURA.1"),
new ResearchPage("classiccasting.research_page.CCAURA.2") new ResearchPage("classiccasting.research_page.CCAURA.2")
) )
.setAutoUnlock() .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( .setPages(
new ResearchPage("classiccasting.research_page.CCFLUX.1"), new ResearchPage("classiccasting.research_page.CCFLUX.1"),
new ResearchPage("classiccasting.research_page.CCFLUX.2") new ResearchPage("classiccasting.research_page.CCFLUX.2")
) )
.setAutoUnlock() .setAutoUnlock()
.registerResearchItem(); .registerResearchItem());
// TODO: move research to right place // TODO: move research to right place
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"MAGBLOCKS", "MAGBLOCKS",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -123,9 +124,9 @@ public class Research {
new ResearchPage("classiccasting.research_page.MAGBLOCKS.3") new ResearchPage("classiccasting.research_page.MAGBLOCKS.3")
) )
.setParents("THAUMIUM") .setParents("THAUMIUM")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"AURACOMPASS", "AURACOMPASS",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -142,9 +143,9 @@ public class Research {
new ResearchPage(arcaneRecipes.get("AuraCompass")) new ResearchPage(arcaneRecipes.get("AuraCompass"))
) )
.setParents("MAGBLOCKS") .setParents("MAGBLOCKS")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"CRYSTALCORE", "CRYSTALCORE",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -166,9 +167,9 @@ public class Research {
new ResearchPage(magnetStructure) new ResearchPage(magnetStructure)
) )
.setParents("THETHEORYOFEVERYTHING", "CRYSTALCLUSTER") .setParents("THETHEORYOFEVERYTHING", "CRYSTALCLUSTER")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"CRYSTALCAPACITOR", "CRYSTALCAPACITOR",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -185,9 +186,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("CrystalCapacitor")) new ResearchPageInfusion(infusionRecipes.get("CrystalCapacitor"))
) )
.setParents("CRYSTALCORE") .setParents("CRYSTALCORE")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"UNIFIEDTHAUMICFIELDTHEORY", "UNIFIEDTHAUMICFIELDTHEORY",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -213,9 +214,9 @@ public class Research {
) )
.setParents("MAGBLOCKS") .setParents("MAGBLOCKS")
.setSpecial() .setSpecial()
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"WANDFIRE", "WANDFIRE",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -233,9 +234,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandFire")) new ResearchPageInfusion(infusionRecipes.get("WandFire"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY") .setParents("UNIFIEDTHAUMICFIELDTHEORY")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"WANDFROST", "WANDFROST",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList().add(Aspect.COLD, 16).add(Aspect.WEAPON, 4), new AspectList().add(Aspect.COLD, 16).add(Aspect.WEAPON, 4),
@ -249,9 +250,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandFrost")) new ResearchPageInfusion(infusionRecipes.get("WandFrost"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY") .setParents("UNIFIEDTHAUMICFIELDTHEORY")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"WANDTRADE", "WANDTRADE",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -268,9 +269,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandTrade")) new ResearchPageInfusion(infusionRecipes.get("WandTrade"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY") .setParents("UNIFIEDTHAUMICFIELDTHEORY")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"WANDEXCAVATE", "WANDEXCAVATE",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList().add(Aspect.METAL, 16).add(Aspect.TOOL, 4), new AspectList().add(Aspect.METAL, 16).add(Aspect.TOOL, 4),
@ -284,9 +285,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandExcavate")) new ResearchPageInfusion(infusionRecipes.get("WandExcavate"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY") .setParents("UNIFIEDTHAUMICFIELDTHEORY")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"WANDLIGHTNING", "WANDLIGHTNING",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -304,9 +305,9 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandLightning")) new ResearchPageInfusion(infusionRecipes.get("WandLightning"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY") .setParents("UNIFIEDTHAUMICFIELDTHEORY")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"BASICFLUX", "BASICFLUX",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -328,9 +329,9 @@ public class Research {
new ResearchPage("classiccasting.research_page.BASICFLUX.3") new ResearchPage("classiccasting.research_page.BASICFLUX.3")
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY", "DISTILESSENTIA") .setParents("UNIFIEDTHAUMICFIELDTHEORY", "DISTILESSENTIA")
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"THETHEORYOFEVERYTHING", "THETHEORYOFEVERYTHING",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -365,9 +366,9 @@ public class Research {
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY", "BASICFLUX", "GOLEMSTRAW") .setParents("UNIFIEDTHAUMICFIELDTHEORY", "BASICFLUX", "GOLEMSTRAW")
.setSpecial() .setSpecial()
.registerResearchItem(); .registerResearchItem());
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"HELLROD", "HELLROD",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -386,11 +387,11 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("WandHellrod")) new ResearchPageInfusion(infusionRecipes.get("WandHellrod"))
) )
.setParents("THETHEORYOFEVERYTHING", "WANDFIRE") .setParents("THETHEORYOFEVERYTHING", "WANDFIRE")
.registerResearchItem(); .registerResearchItem());
ThaumcraftApi.addWarpToResearch("HELLROD", 2); ThaumcraftApi.addWarpToResearch("HELLROD", 2);
ThaumcraftApi.addWarpToItem(new ItemStack(CCItems.wandHellrod), 1); ThaumcraftApi.addWarpToItem(new ItemStack(CCItems.wandHellrod), 1);
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"PORTABLEHOLE", "PORTABLEHOLE",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -408,11 +409,11 @@ public class Research {
new ResearchPageInfusion(infusionRecipes.get("PortableHole")) new ResearchPageInfusion(infusionRecipes.get("PortableHole"))
) )
.setParents("UNIFIEDTHAUMICFIELDTHEORY", "ENCHFABRIC") .setParents("UNIFIEDTHAUMICFIELDTHEORY", "ENCHFABRIC")
.registerResearchItem(); .registerResearchItem());
ResearchPage crystalPage = new ResearchPageInfusion(clusters); ResearchPage crystalPage = new ResearchPageInfusion(clusters);
crystalPage.recipeOutput = new ItemStack(ConfigBlocks.blockCrystal, 1, 9); crystalPage.recipeOutput = new ItemStack(ConfigBlocks.blockCrystal, 1, 9);
new ResearchItem( CCResearchManager.addDiscoverableResearch(new ResearchItem(
"CRYSTALCLUSTER", "CRYSTALCLUSTER",
"CLASSICCASTING", "CLASSICCASTING",
new AspectList() new AspectList()
@ -429,6 +430,6 @@ public class Research {
crystalPage crystalPage
) )
.setParents("BASICFLUX") .setParents("BASICFLUX")
.registerResearchItem(); .registerResearchItem());
} }
} }

View file

@ -1,9 +1,14 @@
package net.anvilcraft.classiccasting.container; package net.anvilcraft.classiccasting.container;
import net.anvilcraft.classiccasting.CCItems; 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.IInventory;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; 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 { class SlotResearchTableOutput extends Slot {
public SlotResearchTableOutput( public SlotResearchTableOutput(
@ -13,7 +18,20 @@ class SlotResearchTableOutput extends Slot {
} }
public boolean isItemValid(ItemStack par1ItemStack) { public boolean isItemValid(ItemStack par1ItemStack) {
return par1ItemStack.getItem() == CCItems.researchNotes return (par1ItemStack.getItem() == CCItems.researchNotes || par1ItemStack.getItem() == ConfigItems.itemResearchNotes)
&& par1ItemStack.getItemDamage() < 64; && 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);
}
} }

View file

@ -1,6 +1,8 @@
package net.anvilcraft.classiccasting.research; package net.anvilcraft.classiccasting.research;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import net.anvilcraft.classiccasting.CCItems; import net.anvilcraft.classiccasting.CCItems;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -17,6 +19,9 @@ import thaumcraft.common.config.ConfigItems;
import thaumcraft.common.lib.research.ResearchManager; import thaumcraft.common.lib.research.ResearchManager;
public class CCResearchManager { public class CCResearchManager {
public static Set<String> discoverable = new HashSet<>();
public static ItemStack createNote(ItemStack stack, String key) { public static ItemStack createNote(ItemStack stack, String key) {
ResearchItem research = ResearchCategories.getResearch(key); ResearchItem research = ResearchCategories.getResearch(key);
if (research == null) if (research == null)
@ -141,7 +146,8 @@ public class CCResearchManager {
) )
|| !ResearchManager.doesPlayerHaveRequisites( || !ResearchManager.doesPlayerHaveRequisites(
player.getDisplayName(), research.key player.getDisplayName(), research.key
)) )
|| !isDiscoverable(research.key))
continue; continue;
int match = 0; int match = 0;
for (int q = 0; q < 5; ++q) { for (int q = 0; q < 5; ++q) {
@ -264,4 +270,17 @@ public class CCResearchManager {
} }
return bestMatch; 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);
}
} }