From c09e3dfe095dbdf2b3953e592f23c0c576394ba7 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Mon, 23 Jan 2023 22:13:21 +0100 Subject: [PATCH] feat: add Auracore infusion & research compat --- build.gradle | 36 ++++++- build.properties | 2 +- .../mods/auracore/AddCruciblePage.java | 68 ++++++++++++ .../mods/auracore/AddInfusionPage.java | 68 ++++++++++++ .../modtweaker2/mods/auracore/AuraCore.java | 4 + .../mods/auracore/handlers/Infusion.java | 102 ++++++++++++++++++ .../mods/auracore/handlers/Research.java | 22 ++++ 7 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 src/main/java/modtweaker2/mods/auracore/AddCruciblePage.java create mode 100644 src/main/java/modtweaker2/mods/auracore/AddInfusionPage.java create mode 100644 src/main/java/modtweaker2/mods/auracore/handlers/Infusion.java create mode 100644 src/main/java/modtweaker2/mods/auracore/handlers/Research.java diff --git a/build.gradle b/build.gradle index 34a5f30..5f6e733 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,7 @@ buildscript { } apply plugin: 'forge' +apply plugin: 'maven-publish' apply plugin: 'java' sourceCompatibility = JavaVersion.VERSION_1_8 @@ -56,7 +57,7 @@ repositories { } dependencies { - implementation "dev.tilera:auracore:1.2.0:deobf" + implementation "dev.tilera:auracore:1.8.0:deobf" implementation "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:api" } @@ -86,3 +87,36 @@ task deobfJar(type: Jar) { } tasks.build.dependsOn deobfJar + +task sourcesJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'sources' +} + +publishing { + tasks.publish.dependsOn 'build' + publications { + mavenJava(MavenPublication) { + artifactId = project.archivesBaseName + + artifact deobfJar + artifact sourcesJar + artifact jar + } + } + + repositories { + if (project.hasProperty('mvnURL')) { + maven { + credentials { + username findProperty("mvnUsername") + password findProperty("mvnPassword") + } + url = findProperty("mvnURL") + } + } + else { + mavenLocal() + } + } +} \ No newline at end of file diff --git a/build.properties b/build.properties index b1329a1..9810267 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614-1.7.10 -mod.version=0.10.1 +mod.version=0.11.0 forestry.version=4.1.0.43 diff --git a/src/main/java/modtweaker2/mods/auracore/AddCruciblePage.java b/src/main/java/modtweaker2/mods/auracore/AddCruciblePage.java new file mode 100644 index 0000000..697ac01 --- /dev/null +++ b/src/main/java/modtweaker2/mods/auracore/AddCruciblePage.java @@ -0,0 +1,68 @@ +package modtweaker2.mods.auracore; + +import dev.tilera.auracore.api.AuracoreRecipes; +import dev.tilera.auracore.api.crafting.CrucibleRecipe; +import dev.tilera.auracore.api.research.ResearchPageCrucible; +import minetweaker.IUndoableAction; +import modtweaker2.mods.thaumcraft.ThaumcraftHelper; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchPage; + +public class AddCruciblePage implements IUndoableAction { + String key; + String tab; + ResearchPage page; + ResearchPage[] oldPages; + String recipeKey; + + public AddCruciblePage(String research, String key) { + this.key = research; + this.tab = ThaumcraftHelper.getResearchTab(this.key); + this.recipeKey = key; + } + + @Override + public void apply() { + for (CrucibleRecipe rec : AuracoreRecipes.getCrucibleRecipes()) { + if (rec.key.equals(recipeKey)) { + page = new ResearchPageCrucible(rec); + break; + } + } + if (page == null) return; + oldPages = ResearchCategories.researchCategories.get(tab).research.get(key).getPages(); + if (oldPages == null) oldPages = new ResearchPage[0]; + ResearchPage[] newPages = new ResearchPage[oldPages.length + 1]; + for (int x = 0; x < oldPages.length; x++) { + newPages[x] = oldPages[x]; + } + newPages[oldPages.length] = page; + ResearchCategories.researchCategories.get(tab).research.get(key).setPages(newPages); + } + + @Override + public String describe() { + return "Adding Research Page to " + key; + } + + @Override + public boolean canUndo() { + return oldPages != null; + } + + @Override + public void undo() { + ResearchCategories.researchCategories.get(tab).research.get(key).setPages(oldPages); + } + + @Override + public String describeUndo() { + return "Removing Page from " + key; + } + + @Override + public String getOverrideKey() { + return null; + } + +} diff --git a/src/main/java/modtweaker2/mods/auracore/AddInfusionPage.java b/src/main/java/modtweaker2/mods/auracore/AddInfusionPage.java new file mode 100644 index 0000000..36597a1 --- /dev/null +++ b/src/main/java/modtweaker2/mods/auracore/AddInfusionPage.java @@ -0,0 +1,68 @@ +package modtweaker2.mods.auracore; + +import dev.tilera.auracore.api.AuracoreRecipes; +import dev.tilera.auracore.api.crafting.IInfusionRecipe; +import dev.tilera.auracore.api.research.ResearchPageInfusion; +import minetweaker.IUndoableAction; +import modtweaker2.mods.thaumcraft.ThaumcraftHelper; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchPage; + +public class AddInfusionPage implements IUndoableAction { + String key; + String tab; + ResearchPage page; + ResearchPage[] oldPages; + String recipeKey; + + public AddInfusionPage(String research, String key) { + this.key = research; + this.tab = ThaumcraftHelper.getResearchTab(this.key); + this.recipeKey = key; + } + + @Override + public void apply() { + for (IInfusionRecipe rec : AuracoreRecipes.getInfusionRecipes()) { + if (rec.getKey().equals(recipeKey)) { + page = new ResearchPageInfusion(rec); + break; + } + } + if (page == null) return; + oldPages = ResearchCategories.researchCategories.get(tab).research.get(key).getPages(); + if (oldPages == null) oldPages = new ResearchPage[0]; + ResearchPage[] newPages = new ResearchPage[oldPages.length + 1]; + for (int x = 0; x < oldPages.length; x++) { + newPages[x] = oldPages[x]; + } + newPages[oldPages.length] = page; + ResearchCategories.researchCategories.get(tab).research.get(key).setPages(newPages); + } + + @Override + public String describe() { + return "Adding Research Page to " + key; + } + + @Override + public boolean canUndo() { + return oldPages != null; + } + + @Override + public void undo() { + ResearchCategories.researchCategories.get(tab).research.get(key).setPages(oldPages); + } + + @Override + public String describeUndo() { + return "Removing Page from " + key; + } + + @Override + public String getOverrideKey() { + return null; + } + +} diff --git a/src/main/java/modtweaker2/mods/auracore/AuraCore.java b/src/main/java/modtweaker2/mods/auracore/AuraCore.java index aa02c60..2c82ed7 100644 --- a/src/main/java/modtweaker2/mods/auracore/AuraCore.java +++ b/src/main/java/modtweaker2/mods/auracore/AuraCore.java @@ -2,12 +2,16 @@ package modtweaker2.mods.auracore; import minetweaker.MineTweakerAPI; import modtweaker2.mods.auracore.handlers.Crucible; +import modtweaker2.mods.auracore.handlers.Infusion; +import modtweaker2.mods.auracore.handlers.Research; import modtweaker2.utils.TweakerPlugin; public class AuraCore extends TweakerPlugin { public AuraCore() { MineTweakerAPI.registerClass(Crucible.class); + MineTweakerAPI.registerClass(Infusion.class); + MineTweakerAPI.registerClass(Research.class); } } diff --git a/src/main/java/modtweaker2/mods/auracore/handlers/Infusion.java b/src/main/java/modtweaker2/mods/auracore/handlers/Infusion.java new file mode 100644 index 0000000..ac1ed7b --- /dev/null +++ b/src/main/java/modtweaker2/mods/auracore/handlers/Infusion.java @@ -0,0 +1,102 @@ +package modtweaker2.mods.auracore.handlers; + +import static modtweaker2.helpers.InputHelper.toStacks; +import static modtweaker2.helpers.InputHelper.toStack; +import static modtweaker2.helpers.InputHelper.toIItemStack; +import static modtweaker2.helpers.StackHelper.matches; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import dev.tilera.auracore.api.AuracoreRecipes; +import dev.tilera.auracore.api.crafting.IInfusionRecipe; +import dev.tilera.auracore.api.crafting.ShapedInfusionCraftingRecipe; +import dev.tilera.auracore.api.crafting.ShapelessInfusionCraftingRecipe; +import minetweaker.MineTweakerAPI; +import minetweaker.api.item.IItemStack; +import modtweaker2.helpers.LogHelper; +import modtweaker2.mods.thaumcraft.ThaumcraftHelper; +import modtweaker2.utils.BaseListAddition; +import modtweaker2.utils.BaseListRemoval; +import net.minecraft.item.ItemStack; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +@ZenClass("mods.auracore.Infusion") +public class Infusion { + + public static final String name = "Auracore Infusion Altar"; + + @ZenMethod + public static void addShaped(String key, String research, int cost, IItemStack output, String aspects, IItemStack[][] ingredients) { + List stacks = new ArrayList<>(); + int width = 0; + int height = 0; + for(IItemStack[] row : ingredients) { + height++; + width = Math.max(width, row.length); + for (IItemStack i : row) { + stacks.add(toStack(i)); + } + } + MineTweakerAPI.apply(new Add(new ShapedInfusionCraftingRecipe(key, research, width, height, stacks.toArray(new ItemStack[stacks.size()]), toStack(output), cost, ThaumcraftHelper.parseAspects(aspects)))); + } + + @ZenMethod + public static void addShapeless(String key, String research, int cost, IItemStack output, String aspects, IItemStack[] ingredients) { + MineTweakerAPI.apply(new Add(new ShapelessInfusionCraftingRecipe(key, research, toStack(output), Arrays.asList(toStacks(ingredients)), cost, ThaumcraftHelper.parseAspects(aspects)))); + } + + private static class Add extends BaseListAddition { + public Add(IInfusionRecipe recipe) { + super(Infusion.name, AuracoreRecipes.getInfusionRecipes()); + recipes.add(recipe); + } + + @Override + protected String getRecipeInfo(IInfusionRecipe recipe) { + ItemStack stack = recipe.getRecipeOutput(); + + if(stack instanceof ItemStack) + return LogHelper.getStackDescription(stack); + else + return "Unknown output"; + } + } + + @ZenMethod + public static void removeRecipe(IItemStack output) { + List recipes = new LinkedList(); + + for(IInfusionRecipe recipe : AuracoreRecipes.getInfusionRecipes()) { + if(recipe.getRecipeOutput() != null && matches(output, toIItemStack(recipe.getRecipeOutput()))) { + recipes.add(recipe); + } + } + + if(!recipes.isEmpty()) { + MineTweakerAPI.apply(new Remove(recipes)); + } else { + LogHelper.logWarning(String.format("No %s Recipe found for %s. Command Ignored", Infusion.name, output.toString())); + } + } + + private static class Remove extends BaseListRemoval { + public Remove(List recipes) { + super(Infusion.name, AuracoreRecipes.getInfusionRecipes(), recipes); + } + + @Override + protected String getRecipeInfo(IInfusionRecipe recipe) { + ItemStack stack = recipe.getRecipeOutput(); + + if(stack instanceof ItemStack) + return LogHelper.getStackDescription(stack); + else + return "Unknown output"; + } + } + +} diff --git a/src/main/java/modtweaker2/mods/auracore/handlers/Research.java b/src/main/java/modtweaker2/mods/auracore/handlers/Research.java new file mode 100644 index 0000000..c5b9539 --- /dev/null +++ b/src/main/java/modtweaker2/mods/auracore/handlers/Research.java @@ -0,0 +1,22 @@ +package modtweaker2.mods.auracore.handlers; + +import minetweaker.MineTweakerAPI; +import modtweaker2.mods.auracore.AddCruciblePage; +import modtweaker2.mods.auracore.AddInfusionPage; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +@ZenClass("mods.auracore.Research") +public class Research { + + @ZenMethod + public static void addInfusionPage(String research, String recipe) { + MineTweakerAPI.apply(new AddInfusionPage(research, recipe)); + } + + @ZenMethod + public static void addCruciblePage(String research, String recipe) { + MineTweakerAPI.apply(new AddCruciblePage(research, recipe)); + } + +}