From f7027afb39eacfd0abff556c960e0694d63da82d Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 10 May 2023 19:18:28 +0200 Subject: [PATCH 01/16] remove research builder since is not used --- src/main/java/ab/utils/ResearchBuilder.java | 161 -------------------- 1 file changed, 161 deletions(-) delete mode 100644 src/main/java/ab/utils/ResearchBuilder.java diff --git a/src/main/java/ab/utils/ResearchBuilder.java b/src/main/java/ab/utils/ResearchBuilder.java deleted file mode 100644 index 11d109c..0000000 --- a/src/main/java/ab/utils/ResearchBuilder.java +++ /dev/null @@ -1,161 +0,0 @@ -package ab.utils; - -import java.util.LinkedList; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import thaumcraft.api.ThaumcraftApi; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.crafting.CrucibleRecipe; -import thaumcraft.api.crafting.ShapedArcaneRecipe; -import thaumcraft.api.crafting.ShapelessArcaneRecipe; -import thaumcraft.api.research.ResearchCategories; -import thaumcraft.api.research.ResearchItem; -import thaumcraft.api.research.ResearchPage; -import ab.AdvancedBotany; - -public class ResearchBuilder { - - public static final String category = AdvancedBotany.modid; - public static final String prefix = "AB"; - - public final String key; - public int row = 0; - public int col = 0; - public int researchDifficulty = 1; - public int warp = 0; - public boolean mainline = false; - public String[] dependencies = new String[0]; - public String[] hiddenDependencies = new String[0]; - public AspectList researchAspects; - public LinkedList content = new LinkedList<>(); - public ResourceLocation researchIcon = new ResourceLocation("botania", "textures/gui/categories/forgotten.png"); - public ItemStack researchItemIcon = null; - - public ResearchBuilder(String key) { - this.key = prefix + key; - } - - public ResearchBuilder setResearchAspects(Aspect... aspects) { - AspectList list = new AspectList(); - for (Aspect aspect : aspects) { - list.add(aspect, 1); - } - this.researchAspects = list; - return this; - } - - // goes in units of whole tiles - have >= 2 difference to see lines - public ResearchBuilder setBookLocation(int x, int y) { - this.row = y; - this.col = x; - return this; - } - - public ResearchBuilder setDifficulty(int difficulty) { - this.researchDifficulty = difficulty; - return this; - } - - public ResearchBuilder setResearchIconItem(String mod, String filename) { - this.researchIcon = new ResourceLocation(mod, "textures/items/" + filename); - return this; - } - - public ResearchBuilder setResearchIconBlock(String mod, String filename) { - this.researchIcon = new ResourceLocation(mod, "textures/blocks/" + filename); - return this; - } - - public ResearchBuilder setResearchIconItemStack(ItemStack render) { - this.researchItemIcon = render; - return this; - } - - public ResearchBuilder addSingleTextPage() { - content.add(new ResearchPage(this.key, category + "." + key + ".body")); - return this; - } - - public ResearchBuilder addTextPages(int i18n_start, int count) { - for (int i = i18n_start; i < i18n_start + count; i++) { - content.add(new ResearchPage(this.key, category + "." + key + ".body_" + i)); - } - return this; - } - - public ResearchBuilder addCraftingRecipe(ItemStack out, AspectList aspects, Object... craftingRecipe) { - ShapedArcaneRecipe recipe = ThaumcraftApi.addArcaneCraftingRecipe(key, out, aspects, craftingRecipe); - content.add(new ResearchPage(recipe)); - return this; - } - - public ResearchBuilder addShapelessCraftingRecipe(ItemStack out, AspectList aspects, Object... craftingRecipe) { - ShapelessArcaneRecipe recipe = ThaumcraftApi - .addShapelessArcaneCraftingRecipe(key, out, aspects, craftingRecipe); - content.add(new ResearchPage(recipe)); - return this; - } - - public ResearchBuilder addCrucibleRecipe(AspectList aspects, ItemStack out, ItemStack in) { - CrucibleRecipe recipe = ThaumcraftApi.addCrucibleRecipe(key, out, in, aspects); - content.add(new ResearchPage(recipe)); - return this; - } - - public ResearchBuilder setWarp(int warp) { - this.warp = warp; - return this; - } - - public ResearchBuilder setMainlineResearch() { - this.mainline = true; - return this; - } - - public ResearchBuilder setDependencies(String... dependencies) { - this.dependencies = dependencies; - for (int i = 0; i < this.dependencies.length; i++) { - this.dependencies[i] = prefix + this.dependencies[i]; - } - return this; - } - - public ResearchBuilder setExternalDependencies(String... dependencies) { - this.hiddenDependencies = dependencies; - return this; - } - - public ResearchBuilder apply(WithResearchBuilder lambda) { - lambda.apply(this); - return this; - } - - public void commit() { - ResearchItem research; - if (researchItemIcon != null) { - research = new ResearchItem(key, category, researchAspects, col, row, researchDifficulty, researchItemIcon); - } else { - research = new ResearchItem(key, category, researchAspects, col, row, researchDifficulty, researchIcon); - } - research.setPages(content.toArray(new ResearchPage[0])); - research.parents = dependencies; - research.parentsHidden = hiddenDependencies; - research.setConcealed(); - if (mainline) { - research.setSpecial(); - } - - ResearchCategories.addResearch(research); - if (warp > 0) { - ThaumcraftApi.addWarpToResearch(key, warp); - } - } - - public interface WithResearchBuilder { - - void apply(ResearchBuilder builder); - } -} From 6e3518f7d79b0ed5367be6b1fcaef18a754c12f7 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Tue, 30 May 2023 16:48:50 +0200 Subject: [PATCH 02/16] Upgrading Lang... for now --- src/main/resources/assets/ab/lang/en_US.lang | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/assets/ab/lang/en_US.lang b/src/main/resources/assets/ab/lang/en_US.lang index 77a20ec..e92c338 100644 --- a/src/main/resources/assets/ab/lang/en_US.lang +++ b/src/main/resources/assets/ab/lang/en_US.lang @@ -132,6 +132,14 @@ tc.research_name.Forge=Forge of Nidavellir tc.research_name.Destroyer=Material Destroyer tc.research_name.Nebula=Nebula Fragments +TerraHoePages=The standard way of harvesting is getting boring over time. Terrahoe, or rather its unique ability to transform the soil into a more fertile and automated soil, can help with this very problem.
The harvest in the new soil gathers itself after a certain period of time! +DestroyerPages=A harsh tool based on a global catastrophe in the past.
He is perfectly capable of breaking any block almost instantly. His speed is so high that it was necessary to create a *Fuse* in him - that is, to turn him off/on. +MithrillSwordPages=A melee weapon that uses mana to communicate with the cosmic forces, the more mana in the blade, the stronger the connection.
The power of connection to cosmic forces is divided into Ranks, like Terra Shatterer. Each rank unlocks a new magical property for the Space Blade +AquaSwordPages=A mystical melee weapon imbued with the powers of the seas!
An attack with Blade of the Sea is resisted by a water splash, and pushes everyone around in the direction the player is looking
The block, on the other hand, is resisted by a water shield, which prevents enemies from approaching to you. +ForgePages=A really powerful Dwarf invention for fusing different materials into one whole, the main thing is to know the proportions!
This forge was given to the Elves, that is, it came to our land at the time of "Destruction," but... Not for long - it was soon destroyed. +ManaChargerPages=The mana charger is a device that allows you to charge up to 4 portable mana sources at once, as well as to discharge one of them.
To start the charger, you must bind a mana source to it, such as a Mana Pool or Mana Container +NebulaPages=A nebula fragment is a material filled with part of the power of space. It allows you to create instruments and weapons that are unearthly in power. + From 0fc41932d38fa60e44b339d4f08b037f7e737fed Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 7 Jun 2023 22:23:25 +0200 Subject: [PATCH 03/16] New recipes and fix --- src/main/java/ab/api/AdvancedBotanyAPI.java | 28 + .../ab/api/recipe/RecipeFountainAlchemy.java | 68 ++ .../api/recipe/RecipeFountainConjuration.java | 67 ++ .../ab/api/recipe/RecipeFountainMana.java | 67 ++ .../ab/client/core/proxy/ClientProxy.java | 10 + .../ab/client/model/ModelFountainAlchemy.java | 47 + .../model/ModelFountainConjuration.java | 47 + .../ab/client/model/ModelFountainMana.java | 47 + src/main/java/ab/client/nei/NEIConfig.java | 6 + .../nei/RecipeHandlerFountainAlchemy.java | 124 ++ .../nei/RecipeHandlerFountainConjuration.java | 124 ++ .../client/nei/RecipeHandlerFountainMana.java | 126 ++ .../block/RenderBlockFountainAlchemy.java | 40 + .../block/RenderBlockFountainConjuration.java | 40 + .../render/block/RenderBlockFountainMana.java | 40 + .../tile/RenderTileFountainAlchemy.java | 97 ++ .../tile/RenderTileFountainConjuration.java | 97 ++ .../render/tile/RenderTileFountainMana.java | 97 ++ .../ab/common/block/BlockFountainAlchemy.java | 161 +++ .../block/BlockFountainConjuration.java | 161 +++ .../ab/common/block/BlockFountainMana.java | 161 +++ .../block/tile/TileFountainAlchemy.java | 292 +++++ .../block/tile/TileFountainConjuration.java | 292 +++++ .../common/block/tile/TileFountainMana.java | 293 +++++ .../ab/common/lib/register/BlockListAB.java | 24 + .../ab/common/lib/register/RecipeListAB.java | 1042 ++++++++++++++++- src/main/java/ab/nei/IMCForNEI.java | 9 + src/main/java/ab/utils/Compats.java | 0 src/main/resources/assets/ab/lang/en_US.lang | 13 +- 29 files changed, 3610 insertions(+), 10 deletions(-) create mode 100644 src/main/java/ab/api/recipe/RecipeFountainAlchemy.java create mode 100644 src/main/java/ab/api/recipe/RecipeFountainConjuration.java create mode 100644 src/main/java/ab/api/recipe/RecipeFountainMana.java create mode 100644 src/main/java/ab/client/model/ModelFountainAlchemy.java create mode 100644 src/main/java/ab/client/model/ModelFountainConjuration.java create mode 100644 src/main/java/ab/client/model/ModelFountainMana.java create mode 100644 src/main/java/ab/client/nei/RecipeHandlerFountainAlchemy.java create mode 100644 src/main/java/ab/client/nei/RecipeHandlerFountainConjuration.java create mode 100644 src/main/java/ab/client/nei/RecipeHandlerFountainMana.java create mode 100644 src/main/java/ab/client/render/block/RenderBlockFountainAlchemy.java create mode 100644 src/main/java/ab/client/render/block/RenderBlockFountainConjuration.java create mode 100644 src/main/java/ab/client/render/block/RenderBlockFountainMana.java create mode 100644 src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java create mode 100644 src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java create mode 100644 src/main/java/ab/client/render/tile/RenderTileFountainMana.java create mode 100644 src/main/java/ab/common/block/BlockFountainAlchemy.java create mode 100644 src/main/java/ab/common/block/BlockFountainConjuration.java create mode 100644 src/main/java/ab/common/block/BlockFountainMana.java create mode 100644 src/main/java/ab/common/block/tile/TileFountainAlchemy.java create mode 100644 src/main/java/ab/common/block/tile/TileFountainConjuration.java create mode 100644 src/main/java/ab/common/block/tile/TileFountainMana.java create mode 100644 src/main/java/ab/utils/Compats.java diff --git a/src/main/java/ab/api/AdvancedBotanyAPI.java b/src/main/java/ab/api/AdvancedBotanyAPI.java index 1fa307e..cc73542 100644 --- a/src/main/java/ab/api/AdvancedBotanyAPI.java +++ b/src/main/java/ab/api/AdvancedBotanyAPI.java @@ -14,11 +14,17 @@ import ab.api.recipe.RecipeAdvancedPlate; import ab.api.recipe.RecipeAncientAlphirine; +import ab.api.recipe.RecipeFountainAlchemy; +import ab.api.recipe.RecipeFountainConjuration; +import ab.api.recipe.RecipeFountainMana; import ab.common.core.handler.ConfigABHandler; public class AdvancedBotanyAPI { public static List advancedPlateRecipes = new ArrayList(); + public static List FountainManaRecipes = new ArrayList(); + public static List FountainAlchemyRecipes = new ArrayList(); + public static List FountainConjurationRecipes = new ArrayList(); public static List alphirineRecipes = new ArrayList(); public static List farmlandList = new ArrayList(); public static List achievements = new ArrayList(); @@ -47,6 +53,27 @@ public static RecipeAdvancedPlate registerAdvancedPlateRecipe(ItemStack output, return recipe; } + public static RecipeFountainMana registerFountainManaRecipe(ItemStack output, ItemStack inputs, int mana, + int color) { + RecipeFountainMana recipe = new RecipeFountainMana(output, mana, color, inputs); + FountainManaRecipes.add(recipe); + return recipe; + } + + public static RecipeFountainConjuration registerFountainConjurationRecipe(ItemStack output, ItemStack inputs, + int mana, int color) { + RecipeFountainConjuration recipe = new RecipeFountainConjuration(output, mana, color, inputs); + FountainConjurationRecipes.add(recipe); + return recipe; + } + + public static RecipeFountainAlchemy registerFountainAlchemyRecipe(ItemStack output, ItemStack inputs, int mana, + int color) { + RecipeFountainAlchemy recipe = new RecipeFountainAlchemy(output, mana, color, inputs); + FountainAlchemyRecipes.add(recipe); + return recipe; + } + public static RecipeAncientAlphirine registerAlphirineRecipe(ItemStack output, ItemStack input, int chance) { RecipeAncientAlphirine recipe = new RecipeAncientAlphirine(output, input, chance); alphirineRecipes.add(recipe); @@ -58,4 +85,5 @@ public static TerraFarmlandList registerFarmlandSeed(Block block, int meta) { farmlandList.add(seed); return seed; } + } diff --git a/src/main/java/ab/api/recipe/RecipeFountainAlchemy.java b/src/main/java/ab/api/recipe/RecipeFountainAlchemy.java new file mode 100644 index 0000000..b11544a --- /dev/null +++ b/src/main/java/ab/api/recipe/RecipeFountainAlchemy.java @@ -0,0 +1,68 @@ +package ab.api.recipe; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class RecipeFountainAlchemy { + + private ItemStack output; + private int color; + private List inputs; + + private int mana; + + public RecipeFountainAlchemy(ItemStack output, int mana, int color, ItemStack... inputs2) { + this.output = output; + this.mana = mana; + this.color = color; + List inputsToSet = new ArrayList(); + for (ItemStack obj : inputs2) inputsToSet.add(obj); + this.inputs = inputsToSet; + } + + public List getInputs() { + return new ArrayList(this.inputs); + } + + public ItemStack getOutput() { + return this.output; + } + + public int getManaUsage() { + return this.mana; + } + + public int getColor() { + return this.color; + } + + public boolean matches(IInventory inv) { + List inputsMissing = new ArrayList(this.inputs); + for (int i = 1; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack == null) break; + int stackIndex = -1; + for (int j = 0; j < inputsMissing.size(); j++) { + ItemStack input = inputsMissing.get(j); + if (input instanceof ItemStack && simpleAreStacksEqual(input.copy(), stack)) { + stackIndex = j; + break; + } + } + if (stackIndex != -1) { + inputsMissing.remove(stackIndex); + } else { + return false; + } + } + return inputsMissing.isEmpty(); + } + + boolean simpleAreStacksEqual(ItemStack input, ItemStack stack) { + if (input.getItemDamage() == 32767) input.setItemDamage(stack.getItemDamage()); + return (input.getItem() == stack.getItem() && input.getItemDamage() == stack.getItemDamage()); + } +} diff --git a/src/main/java/ab/api/recipe/RecipeFountainConjuration.java b/src/main/java/ab/api/recipe/RecipeFountainConjuration.java new file mode 100644 index 0000000..a89b86a --- /dev/null +++ b/src/main/java/ab/api/recipe/RecipeFountainConjuration.java @@ -0,0 +1,67 @@ +package ab.api.recipe; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class RecipeFountainConjuration { + + private ItemStack output; + private int color; + private List inputs; + private int mana; + + public RecipeFountainConjuration(ItemStack output, int mana, int color, ItemStack... inputs2) { + this.output = output; + this.mana = mana; + this.color = color; + List inputsToSet = new ArrayList(); + for (ItemStack obj : inputs2) inputsToSet.add(obj); + this.inputs = inputsToSet; + } + + public List getInputs() { + return new ArrayList(this.inputs); + } + + public ItemStack getOutput() { + return this.output; + } + + public int getManaUsage() { + return this.mana; + } + + public int getColor() { + return this.color; + } + + public boolean matches(IInventory inv) { + List inputsMissing = new ArrayList(this.inputs); + for (int i = 1; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack == null) break; + int stackIndex = -1; + for (int j = 0; j < inputsMissing.size(); j++) { + ItemStack input = inputsMissing.get(j); + if (input instanceof ItemStack && simpleAreStacksEqual(input.copy(), stack)) { + stackIndex = j; + break; + } + } + if (stackIndex != -1) { + inputsMissing.remove(stackIndex); + } else { + return false; + } + } + return inputsMissing.isEmpty(); + } + + boolean simpleAreStacksEqual(ItemStack input, ItemStack stack) { + if (input.getItemDamage() == 32767) input.setItemDamage(stack.getItemDamage()); + return (input.getItem() == stack.getItem() && input.getItemDamage() == stack.getItemDamage()); + } +} diff --git a/src/main/java/ab/api/recipe/RecipeFountainMana.java b/src/main/java/ab/api/recipe/RecipeFountainMana.java new file mode 100644 index 0000000..054352a --- /dev/null +++ b/src/main/java/ab/api/recipe/RecipeFountainMana.java @@ -0,0 +1,67 @@ +package ab.api.recipe; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class RecipeFountainMana { + + private ItemStack output; + private int color; + private List inputs; + private int mana; + + public RecipeFountainMana(ItemStack output, int mana, int color, ItemStack... inputs2) { + this.output = output; + this.mana = mana; + this.color = color; + List inputsToSet = new ArrayList(); + for (ItemStack obj : inputs2) inputsToSet.add(obj); + this.inputs = inputsToSet; + } + + public List getInputs() { + return new ArrayList(this.inputs); + } + + public ItemStack getOutput() { + return this.output; + } + + public int getManaUsage() { + return this.mana; + } + + public int getColor() { + return this.color; + } + + public boolean matches(IInventory inv) { + List inputsMissing = new ArrayList(this.inputs); + for (int i = 1; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack == null) break; + int stackIndex = -1; + for (int j = 0; j < inputsMissing.size(); j++) { + ItemStack input = inputsMissing.get(j); + if (input instanceof ItemStack && simpleAreStacksEqual(input.copy(), stack)) { + stackIndex = j; + break; + } + } + if (stackIndex != -1) { + inputsMissing.remove(stackIndex); + } else { + return false; + } + } + return inputsMissing.isEmpty(); + } + + boolean simpleAreStacksEqual(ItemStack input, ItemStack stack) { + if (input.getItemDamage() == 32767) input.setItemDamage(stack.getItemDamage()); + return (input.getItem() == stack.getItem() && input.getItemDamage() == stack.getItemDamage()); + } +} diff --git a/src/main/java/ab/client/core/proxy/ClientProxy.java b/src/main/java/ab/client/core/proxy/ClientProxy.java index 54ec5c6..143433e 100644 --- a/src/main/java/ab/client/core/proxy/ClientProxy.java +++ b/src/main/java/ab/client/core/proxy/ClientProxy.java @@ -41,6 +41,10 @@ public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new BoundRenderHandler()); ClientRegistry.bindTileEntitySpecialRenderer(TileNidavellirForge.class, new RenderTileNidavellirForge()); + ClientRegistry.bindTileEntitySpecialRenderer(TileFountainMana.class, new RenderTileFountainMana()); + ClientRegistry.bindTileEntitySpecialRenderer(TileFountainAlchemy.class, new RenderTileFountainAlchemy()); + ClientRegistry + .bindTileEntitySpecialRenderer(TileFountainConjuration.class, new RenderTileFountainConjuration()); ClientRegistry.bindTileEntitySpecialRenderer(TileABSpreader.class, new RenderTileABSpreader()); ClientRegistry.bindTileEntitySpecialRenderer(TileManaContainer.class, new RenderTileManaContainer()); ClientRegistry.bindTileEntitySpecialRenderer(TileManaCrystalCube.class, new RenderTileManaCrystalCube()); @@ -58,6 +62,9 @@ public void init(FMLInitializationEvent event) { BlockListAB.blockManaChargerRI = RenderingRegistry.getNextAvailableRenderId(); BlockListAB.blockEngineerHopperRI = RenderingRegistry.getNextAvailableRenderId(); BlockListAB.blockABPlateRI = RenderingRegistry.getNextAvailableRenderId(); + BlockListAB.blockABFountainRI = RenderingRegistry.getNextAvailableRenderId(); + BlockListAB.blockABAlchemyRI = RenderingRegistry.getNextAvailableRenderId(); + BlockListAB.blockABConjurationRI = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(new RenderBlockABSpreader()); RenderingRegistry.registerBlockHandler(new RenderBlockManaContainer()); @@ -65,6 +72,9 @@ public void init(FMLInitializationEvent event) { RenderingRegistry.registerBlockHandler(new RenderBlockManaCharger()); RenderingRegistry.registerBlockHandler(new RenderBlockEngineerHopper()); RenderingRegistry.registerBlockHandler(new RenderBlockNidavellirForge()); + RenderingRegistry.registerBlockHandler(new RenderBlockFountainMana()); + RenderingRegistry.registerBlockHandler(new RenderBlockFountainAlchemy()); + RenderingRegistry.registerBlockHandler(new RenderBlockFountainConjuration()); RenderingRegistry.registerEntityRenderingHandler(EntityAdvancedSpark.class, new RenderEntityAdvancedSpark()); RenderingRegistry.registerEntityRenderingHandler(EntityNebulaBlaze.class, new EntityNullRender()); diff --git a/src/main/java/ab/client/model/ModelFountainAlchemy.java b/src/main/java/ab/client/model/ModelFountainAlchemy.java new file mode 100644 index 0000000..57f6e5d --- /dev/null +++ b/src/main/java/ab/client/model/ModelFountainAlchemy.java @@ -0,0 +1,47 @@ +package ab.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; + +public class ModelFountainAlchemy extends ModelBase { + + private final ModelRenderer bottomAnvil; + private final ModelRenderer topAnvil; + + public ModelFountainAlchemy() { + textureWidth = 48; + textureHeight = 48; + + bottomAnvil = new ModelRenderer(this); + bottomAnvil.setRotationPoint(0.0F, 24.0F, 0.0F); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 26, -3.0F, -1.0F, -4.0F, 6, 1, 1, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 31, -5.0F, -1.0F, -3.0F, 12, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 17, -2.0F, -3.0F, -2.0F, 4, 1, 4, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 8, -4.0F, -2.0F, -3.0F, 8, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 23, -3.0F, -1.0F, 3.0F, 6, 1, 1, 0.0F)); + + topAnvil = new ModelRenderer(this); + topAnvil.setRotationPoint(0.0F, 26.0F, 0.0F); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 23, -6.5F, -11.0F, -3.0F, 12, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 38, -5.5F, -12.0F, -4.0F, 13, 2, 8, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 15, -5.5F, -9.0F, -3.0F, 9, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 17, 0, -4.5F, -11.0F, 2.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 0, -4.5F, -11.0F, -3.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 30, 12, -2.5F, -7.0F, -2.0F, 5, 1, 4, 0.0F)); + } + + public void renderBottom() { + bottomAnvil.render(0.0625f); + } + + public void renderTop() { + topAnvil.render(0.0625f); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/ab/client/model/ModelFountainConjuration.java b/src/main/java/ab/client/model/ModelFountainConjuration.java new file mode 100644 index 0000000..5691529 --- /dev/null +++ b/src/main/java/ab/client/model/ModelFountainConjuration.java @@ -0,0 +1,47 @@ +package ab.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; + +public class ModelFountainConjuration extends ModelBase { + + private final ModelRenderer bottomAnvil; + private final ModelRenderer topAnvil; + + public ModelFountainConjuration() { + textureWidth = 48; + textureHeight = 48; + + bottomAnvil = new ModelRenderer(this); + bottomAnvil.setRotationPoint(0.0F, 24.0F, 0.0F); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 26, -3.0F, -1.0F, -4.0F, 6, 1, 1, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 31, -5.0F, -1.0F, -3.0F, 12, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 17, -2.0F, -3.0F, -2.0F, 4, 1, 4, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 8, -4.0F, -2.0F, -3.0F, 8, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 23, -3.0F, -1.0F, 3.0F, 6, 1, 1, 0.0F)); + + topAnvil = new ModelRenderer(this); + topAnvil.setRotationPoint(0.0F, 26.0F, 0.0F); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 23, -6.5F, -11.0F, -3.0F, 12, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 38, -5.5F, -12.0F, -4.0F, 13, 2, 8, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 15, -5.5F, -9.0F, -3.0F, 9, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 17, 0, -4.5F, -11.0F, 2.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 0, -4.5F, -11.0F, -3.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 30, 12, -2.5F, -7.0F, -2.0F, 5, 1, 4, 0.0F)); + } + + public void renderBottom() { + bottomAnvil.render(0.0625f); + } + + public void renderTop() { + topAnvil.render(0.0625f); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/ab/client/model/ModelFountainMana.java b/src/main/java/ab/client/model/ModelFountainMana.java new file mode 100644 index 0000000..069e601 --- /dev/null +++ b/src/main/java/ab/client/model/ModelFountainMana.java @@ -0,0 +1,47 @@ +package ab.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; + +public class ModelFountainMana extends ModelBase { + + private final ModelRenderer bottomAnvil; + private final ModelRenderer topAnvil; + + public ModelFountainMana() { + textureWidth = 48; + textureHeight = 48; + + bottomAnvil = new ModelRenderer(this); + bottomAnvil.setRotationPoint(0.0F, 24.0F, 0.0F); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 26, -3.0F, -1.0F, -4.0F, 6, 1, 1, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 31, -5.0F, -1.0F, -3.0F, 12, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 17, -2.0F, -3.0F, -2.0F, 4, 1, 4, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 8, -4.0F, -2.0F, -3.0F, 8, 1, 6, 0.0F)); + bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 23, -3.0F, -1.0F, 3.0F, 6, 1, 1, 0.0F)); + + topAnvil = new ModelRenderer(this); + topAnvil.setRotationPoint(0.0F, 26.0F, 0.0F); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 23, -6.5F, -11.0F, -3.0F, 12, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 38, -5.5F, -12.0F, -4.0F, 13, 2, 8, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 15, -5.5F, -9.0F, -3.0F, 9, 2, 6, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 17, 0, -4.5F, -11.0F, 2.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 0, -4.5F, -11.0F, -3.5F, 7, 3, 1, 0.0F)); + topAnvil.cubeList.add(new ModelBox(topAnvil, 30, 12, -2.5F, -7.0F, -2.0F, 5, 1, 4, 0.0F)); + } + + public void renderBottom() { + bottomAnvil.render(0.0625f); + } + + public void renderTop() { + topAnvil.render(0.0625f); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/ab/client/nei/NEIConfig.java b/src/main/java/ab/client/nei/NEIConfig.java index 90063ce..4141743 100644 --- a/src/main/java/ab/client/nei/NEIConfig.java +++ b/src/main/java/ab/client/nei/NEIConfig.java @@ -24,6 +24,12 @@ public void loadConfig() { API.registerUsageHandler((IUsageHandler) new RecipeHandlerAlphirine()); API.registerRecipeHandler((ICraftingHandler) new RecipeHandlerAdvancedPlate()); API.registerUsageHandler((IUsageHandler) new RecipeHandlerAdvancedPlate()); + API.registerRecipeHandler((ICraftingHandler) new RecipeHandlerFountainMana()); + API.registerUsageHandler((IUsageHandler) new RecipeHandlerFountainMana()); + API.registerRecipeHandler((ICraftingHandler) new RecipeHandlerFountainAlchemy()); + API.registerUsageHandler((IUsageHandler) new RecipeHandlerFountainAlchemy()); + API.registerRecipeHandler((ICraftingHandler) new RecipeHandlerFountainConjuration()); + API.registerUsageHandler((IUsageHandler) new RecipeHandlerFountainConjuration()); API.hideItem(new ItemStack(BlockListAB.blockAntigravitation)); } } diff --git a/src/main/java/ab/client/nei/RecipeHandlerFountainAlchemy.java b/src/main/java/ab/client/nei/RecipeHandlerFountainAlchemy.java new file mode 100644 index 0000000..52f2cb7 --- /dev/null +++ b/src/main/java/ab/client/nei/RecipeHandlerFountainAlchemy.java @@ -0,0 +1,124 @@ +package ab.client.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainAlchemy; +import ab.client.core.ClientHelper; +import ab.common.lib.register.BlockListAB; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public class RecipeHandlerFountainAlchemy extends TemplateRecipeHandler { + + public class CachedFountainAlchemyRecipe extends TemplateRecipeHandler.CachedRecipe { + + public List inputs = new ArrayList(); + public PositionedStack output; + public int manaUsage; + + public CachedFountainAlchemyRecipe(RecipeFountainAlchemy recipe) { + setIngredients(recipe.getInputs()); + this.output = new PositionedStack(recipe.getOutput(), 111, 21); + this.inputs.add(new PositionedStack(new ItemStack(BlockListAB.blockABAlchemy), 73, 55)); + this.manaUsage = recipe.getManaUsage(); + } + + public void setIngredients(List inputs) { + float degreePerInput = 360.0F / inputs.size(); + float currentDegree = -90.0F; + for (Object o : inputs) { + int posX = (int) Math.round(73.0D + Math.cos(currentDegree * Math.PI / 180.0D) * 32.0D); + int posY = (int) Math.round(55.0D + Math.sin(currentDegree * Math.PI / 180.0D) * 32.0D); + this.inputs.add(new PositionedStack(o, posX, posY)); + currentDegree += degreePerInput; + } + } + + public List getIngredients() { + return getCycledIngredients(RecipeHandlerFountainAlchemy.this.cycleticks / 20, this.inputs); + } + + public PositionedStack getResult() { + return this.output; + } + } + + public String getRecipeName() { + return StatCollector.translateToLocal("ab.nei.FountainAlchemy"); + } + + public String getRecipeID() { + return "ab.FountainAlchemy"; + } + + public String getGuiTexture() { + return "botania:textures/gui/neiBlank.png"; + } + + public void loadTransferRects() { + this.transferRects.add( + new TemplateRecipeHandler.RecipeTransferRect( + new Rectangle(72, 54, 18, 18), + getRecipeID(), + new Object[0])); + } + + public int recipiesPerPage() { + return 1; + } + + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(3042); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture("botania:textures/gui/petalOverlay.png"); + GuiDraw.drawTexturedModalRect(45, 10, 38, 7, 92, 92); + int mana = ((CachedFountainAlchemyRecipe) this.arecipes.get(recipe)).manaUsage; + ClientHelper.renderPoolManaBar(32, 112, 0x239ddc, 1.0f, mana); + } + + public CachedFountainAlchemyRecipe getCachedRecipe(RecipeFountainAlchemy recipe) { + return new CachedFountainAlchemyRecipe(recipe); + } + + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getRecipeID())) { + for (RecipeFountainAlchemy recipe : AdvancedBotanyAPI.FountainAlchemyRecipes) { + this.arecipes.add(getCachedRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + public void loadCraftingRecipes(ItemStack result) { + for (RecipeFountainAlchemy recipe : AdvancedBotanyAPI.FountainAlchemyRecipes) { + if (recipe == null) continue; + if (((recipe.getOutput()).stackTagCompound != null + && NEIServerUtils.areStacksSameType(recipe.getOutput(), result)) + || ((recipe.getOutput()).stackTagCompound == null + && NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result))) + this.arecipes.add(getCachedRecipe(recipe)); + } + } + + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipeFountainAlchemy recipe : AdvancedBotanyAPI.FountainAlchemyRecipes) { + if (recipe == null) continue; + CachedFountainAlchemyRecipe crecipe = getCachedRecipe(recipe); + if (crecipe.contains(crecipe.getIngredients(), ingredient) + || crecipe.contains(crecipe.getOtherStacks(), ingredient)) + this.arecipes.add(crecipe); + } + } +} diff --git a/src/main/java/ab/client/nei/RecipeHandlerFountainConjuration.java b/src/main/java/ab/client/nei/RecipeHandlerFountainConjuration.java new file mode 100644 index 0000000..8f61f0d --- /dev/null +++ b/src/main/java/ab/client/nei/RecipeHandlerFountainConjuration.java @@ -0,0 +1,124 @@ +package ab.client.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainConjuration; +import ab.client.core.ClientHelper; +import ab.common.lib.register.BlockListAB; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public class RecipeHandlerFountainConjuration extends TemplateRecipeHandler { + + public class CachedFountainConjurationRecipe extends TemplateRecipeHandler.CachedRecipe { + + public List inputs = new ArrayList(); + public PositionedStack output; + public int manaUsage; + + public CachedFountainConjurationRecipe(RecipeFountainConjuration recipe) { + setIngredients(recipe.getInputs()); + this.output = new PositionedStack(recipe.getOutput(), 111, 21); + this.inputs.add(new PositionedStack(new ItemStack(BlockListAB.blockABConjuration), 73, 55)); + this.manaUsage = recipe.getManaUsage(); + } + + public void setIngredients(List inputs) { + float degreePerInput = 360.0F / inputs.size(); + float currentDegree = -90.0F; + for (Object o : inputs) { + int posX = (int) Math.round(73.0D + Math.cos(currentDegree * Math.PI / 180.0D) * 32.0D); + int posY = (int) Math.round(55.0D + Math.sin(currentDegree * Math.PI / 180.0D) * 32.0D); + this.inputs.add(new PositionedStack(o, posX, posY)); + currentDegree += degreePerInput; + } + } + + public List getIngredients() { + return getCycledIngredients(RecipeHandlerFountainConjuration.this.cycleticks / 20, this.inputs); + } + + public PositionedStack getResult() { + return this.output; + } + } + + public String getRecipeName() { + return StatCollector.translateToLocal("ab.nei.FountainConjuration"); + } + + public String getRecipeID() { + return "ab.FountainConjuration"; + } + + public String getGuiTexture() { + return "botania:textures/gui/neiBlank.png"; + } + + public void loadTransferRects() { + this.transferRects.add( + new TemplateRecipeHandler.RecipeTransferRect( + new Rectangle(72, 54, 18, 18), + getRecipeID(), + new Object[0])); + } + + public int recipiesPerPage() { + return 1; + } + + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(3042); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture("botania:textures/gui/petalOverlay.png"); + GuiDraw.drawTexturedModalRect(45, 10, 38, 7, 92, 92); + int mana = ((CachedFountainConjurationRecipe) this.arecipes.get(recipe)).manaUsage; + ClientHelper.renderPoolManaBar(32, 112, 0x239ddc, 1.0f, mana); + } + + public CachedFountainConjurationRecipe getCachedRecipe(RecipeFountainConjuration recipe) { + return new CachedFountainConjurationRecipe(recipe); + } + + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getRecipeID())) { + for (RecipeFountainConjuration recipe : AdvancedBotanyAPI.FountainConjurationRecipes) { + this.arecipes.add(getCachedRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + public void loadCraftingRecipes(ItemStack result) { + for (RecipeFountainConjuration recipe : AdvancedBotanyAPI.FountainConjurationRecipes) { + if (recipe == null) continue; + if (((recipe.getOutput()).stackTagCompound != null + && NEIServerUtils.areStacksSameType(recipe.getOutput(), result)) + || ((recipe.getOutput()).stackTagCompound == null + && NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result))) + this.arecipes.add(getCachedRecipe(recipe)); + } + } + + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipeFountainConjuration recipe : AdvancedBotanyAPI.FountainConjurationRecipes) { + if (recipe == null) continue; + CachedFountainConjurationRecipe crecipe = getCachedRecipe(recipe); + if (crecipe.contains(crecipe.getIngredients(), ingredient) + || crecipe.contains(crecipe.getOtherStacks(), ingredient)) + this.arecipes.add(crecipe); + } + } +} diff --git a/src/main/java/ab/client/nei/RecipeHandlerFountainMana.java b/src/main/java/ab/client/nei/RecipeHandlerFountainMana.java new file mode 100644 index 0000000..4aac15f --- /dev/null +++ b/src/main/java/ab/client/nei/RecipeHandlerFountainMana.java @@ -0,0 +1,126 @@ +package ab.client.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainMana; +import ab.client.core.ClientHelper; +import ab.common.lib.register.BlockListAB; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public class RecipeHandlerFountainMana extends TemplateRecipeHandler { + + public class CachedFountainManaRecipe extends TemplateRecipeHandler.CachedRecipe { + + public List inputs = new ArrayList(); + public PositionedStack output; + public int manaUsage; + + public CachedFountainManaRecipe(RecipeFountainMana recipe) { + setIngredients(recipe.getInputs()); + this.output = new PositionedStack(recipe.getOutput(), 111, 21); + this.inputs.add(new PositionedStack(new ItemStack(BlockListAB.blockABFountain), 73, 55)); + this.manaUsage = recipe.getManaUsage(); + } + + // private void setIngredients(ItemStack inputs) {} + + public void setIngredients(List inputs) { + float degreePerInput = 360.0F / inputs.size(); + float currentDegree = -90.0F; + for (Object o : inputs) { + int posX = (int) Math.round(73.0D + Math.cos(currentDegree * Math.PI / 180.0D) * 32.0D); + int posY = (int) Math.round(55.0D + Math.sin(currentDegree * Math.PI / 180.0D) * 32.0D); + this.inputs.add(new PositionedStack(o, posX, posY)); + currentDegree += degreePerInput; + } + } + + public List getIngredients() { + return getCycledIngredients(RecipeHandlerFountainMana.this.cycleticks / 20, this.inputs); + } + + public PositionedStack getResult() { + return this.output; + } + } + + public String getRecipeName() { + return StatCollector.translateToLocal("ab.nei.FountainMana"); + } + + public String getRecipeID() { + return "ab.FountainMana"; + } + + public String getGuiTexture() { + return "botania:textures/gui/neiBlank.png"; + } + + public void loadTransferRects() { + this.transferRects.add( + new TemplateRecipeHandler.RecipeTransferRect( + new Rectangle(72, 54, 18, 18), + getRecipeID(), + new Object[0])); + } + + public int recipiesPerPage() { + return 1; + } + + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(3042); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture("botania:textures/gui/petalOverlay.png"); + GuiDraw.drawTexturedModalRect(45, 10, 38, 7, 92, 92); + int mana = ((CachedFountainManaRecipe) this.arecipes.get(recipe)).manaUsage; + ClientHelper.renderPoolManaBar(32, 112, 0x239ddc, 1.0f, mana); + } + + public CachedFountainManaRecipe getCachedRecipe(RecipeFountainMana recipe) { + return new CachedFountainManaRecipe(recipe); + } + + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getRecipeID())) { + for (RecipeFountainMana recipe : AdvancedBotanyAPI.FountainManaRecipes) { + this.arecipes.add(getCachedRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + public void loadCraftingRecipes(ItemStack result) { + for (RecipeFountainMana recipe : AdvancedBotanyAPI.FountainManaRecipes) { + if (recipe == null) continue; + if (((recipe.getOutput()).stackTagCompound != null + && NEIServerUtils.areStacksSameType(recipe.getOutput(), result)) + || ((recipe.getOutput()).stackTagCompound == null + && NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result))) + this.arecipes.add(getCachedRecipe(recipe)); + } + } + + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipeFountainMana recipe : AdvancedBotanyAPI.FountainManaRecipes) { + if (recipe == null) continue; + CachedFountainManaRecipe crecipe = getCachedRecipe(recipe); + if (crecipe.contains(crecipe.getIngredients(), ingredient) + || crecipe.contains(crecipe.getOtherStacks(), ingredient)) + this.arecipes.add(crecipe); + } + } +} diff --git a/src/main/java/ab/client/render/block/RenderBlockFountainAlchemy.java b/src/main/java/ab/client/render/block/RenderBlockFountainAlchemy.java new file mode 100644 index 0000000..53d2c86 --- /dev/null +++ b/src/main/java/ab/client/render/block/RenderBlockFountainAlchemy.java @@ -0,0 +1,40 @@ +package ab.client.render.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import ab.client.render.tile.RenderTileManaContainer; +import ab.common.block.tile.TileFountainAlchemy; +import ab.common.lib.register.BlockListAB; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RenderBlockFountainAlchemy implements ISimpleBlockRenderingHandler { + + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.375F, -0.5F); + GL11.glScalef(1.25f, 1.25f, 1.25f); + TileFountainAlchemy alchemy = new TileFountainAlchemy(); + RenderTileManaContainer.metadata = metadata; + TileEntityRendererDispatcher.instance.renderTileEntityAt((TileEntity) alchemy, 0.0D, 0.0D, 0.0D, 0.0F); + GL11.glPopMatrix(); + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + return false; + } + + public int getRenderId() { + return BlockListAB.blockABAlchemyRI; + } + + public boolean shouldRender3DInInventory(int modelId) { + return true; + } +} diff --git a/src/main/java/ab/client/render/block/RenderBlockFountainConjuration.java b/src/main/java/ab/client/render/block/RenderBlockFountainConjuration.java new file mode 100644 index 0000000..a2b6a37 --- /dev/null +++ b/src/main/java/ab/client/render/block/RenderBlockFountainConjuration.java @@ -0,0 +1,40 @@ +package ab.client.render.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import ab.client.render.tile.RenderTileManaContainer; +import ab.common.block.tile.TileFountainConjuration; +import ab.common.lib.register.BlockListAB; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RenderBlockFountainConjuration implements ISimpleBlockRenderingHandler { + + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.375F, -0.5F); + GL11.glScalef(1.25f, 1.25f, 1.25f); + TileFountainConjuration conjuration = new TileFountainConjuration(); + RenderTileManaContainer.metadata = metadata; + TileEntityRendererDispatcher.instance.renderTileEntityAt((TileEntity) conjuration, 0.0D, 0.0D, 0.0D, 0.0F); + GL11.glPopMatrix(); + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + return false; + } + + public int getRenderId() { + return BlockListAB.blockABConjurationRI; + } + + public boolean shouldRender3DInInventory(int modelId) { + return true; + } +} diff --git a/src/main/java/ab/client/render/block/RenderBlockFountainMana.java b/src/main/java/ab/client/render/block/RenderBlockFountainMana.java new file mode 100644 index 0000000..d73dc92 --- /dev/null +++ b/src/main/java/ab/client/render/block/RenderBlockFountainMana.java @@ -0,0 +1,40 @@ +package ab.client.render.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import ab.client.render.tile.RenderTileManaContainer; +import ab.common.block.tile.TileFountainMana; +import ab.common.lib.register.BlockListAB; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RenderBlockFountainMana implements ISimpleBlockRenderingHandler { + + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.375F, -0.5F); + GL11.glScalef(1.25f, 1.25f, 1.25f); + TileFountainMana fountain = new TileFountainMana(); + RenderTileManaContainer.metadata = metadata; + TileEntityRendererDispatcher.instance.renderTileEntityAt((TileEntity) fountain, 0.0D, 0.0D, 0.0D, 0.0F); + GL11.glPopMatrix(); + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + return false; + } + + public int getRenderId() { + return BlockListAB.blockABFountainRI; + } + + public boolean shouldRender3DInInventory(int modelId) { + return true; + } +} diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java b/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java new file mode 100644 index 0000000..fd556aa --- /dev/null +++ b/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java @@ -0,0 +1,97 @@ +package ab.client.render.tile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.client.core.handler.ClientTickHandler; +import ab.client.model.ModelFountainAlchemy; +import ab.common.block.tile.TileFountainAlchemy; + +public class RenderTileFountainAlchemy extends TileEntitySpecialRenderer { + + private List entityList = null; + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ModelFountainAlchemy model = new ModelFountainAlchemy(); + + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { + TileFountainAlchemy tile = (TileFountainAlchemy) tileentity; + double worldTime = 0.0D; + int meta = 2; + float invRender = 0.0f; + if (tileentity != null && tileentity.getWorldObj() != null) { + worldTime = ClientTickHandler.ticksInGame + f + + (new Random((tileentity.xCoord ^ tileentity.yCoord ^ tileentity.zCoord))).nextInt(360); + meta = tileentity.getWorldObj().getBlockMetadata(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord); + } else invRender = 0.0875f; + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + GL11.glPushMatrix(); + GL11.glEnable(32826); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslated(x - invRender, y, z); + GL11.glTranslatef(0.5f, 1.5f, 0.5f); + GL11.glRotatef(180.0f, 1.0f, 0.0f, 1.0f); + GL11.glRotatef(90.0f * meta, 0.0f, 1.0f, 0.0f); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + model.renderBottom(); + GL11.glTranslatef(0.0f, indetY, 0.0f); + model.renderTop(); + GL11.glEnable(32826); + GL11.glPopMatrix(); + if (entityList == null) { + List list = new ArrayList(); + for (int i = 0; i < tile.getSizeInventory(); i++) { + list.add(new EntityItem(tile.getWorldObj(), tile.xCoord, tile.yCoord, tile.zCoord)); + } + entityList = list; + } + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5f, y + 0.675f - indetY, z + 0.5f); + GL11.glScalef(0.2F, 0.225F, 0.225F); + for (int i = 1; i < entityList.size(); i++) { + GL11.glPushMatrix(); + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + switch (i) { + case 1: + GL11.glTranslated(0.15f, 0.0f, 0.0f); + break; + case 2: + GL11.glTranslated(-0.15f, 0.0f, -0.15f); + break; + case 3: + GL11.glTranslated(-0.15f, 0.0f, 0.15f); + break; + } + entityList.get(i).setEntityItemStack(stack); + entityList.get(i).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(i), 0.0D, 0.0D, 0.0D, 1.0F, f); + } + GL11.glPopMatrix(); + } + GL11.glPopMatrix(); + if (tile.getStackInSlot(0) != null) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.915f - indetY, z + 0.5); + GL11.glScalef(0.45f, 0.45f, 0.45f); + entityList.get(0).setEntityItemStack(tile.getStackInSlot(0)); + entityList.get(0).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(0), 0.0D, 0.0D, 0.0D, 1.0F, f); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java b/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java new file mode 100644 index 0000000..e4a71a1 --- /dev/null +++ b/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java @@ -0,0 +1,97 @@ +package ab.client.render.tile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.client.core.handler.ClientTickHandler; +import ab.client.model.ModelFountainConjuration; +import ab.common.block.tile.TileFountainConjuration; + +public class RenderTileFountainConjuration extends TileEntitySpecialRenderer { + + private List entityList = null; + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ModelFountainConjuration model = new ModelFountainConjuration(); + + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { + TileFountainConjuration tile = (TileFountainConjuration) tileentity; + double worldTime = 0.0D; + int meta = 2; + float invRender = 0.0f; + if (tileentity != null && tileentity.getWorldObj() != null) { + worldTime = ClientTickHandler.ticksInGame + f + + (new Random((tileentity.xCoord ^ tileentity.yCoord ^ tileentity.zCoord))).nextInt(360); + meta = tileentity.getWorldObj().getBlockMetadata(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord); + } else invRender = 0.0875f; + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + GL11.glPushMatrix(); + GL11.glEnable(32826); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslated(x - invRender, y, z); + GL11.glTranslatef(0.5f, 1.5f, 0.5f); + GL11.glRotatef(180.0f, 1.0f, 0.0f, 1.0f); + GL11.glRotatef(90.0f * meta, 0.0f, 1.0f, 0.0f); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + model.renderBottom(); + GL11.glTranslatef(0.0f, indetY, 0.0f); + model.renderTop(); + GL11.glEnable(32826); + GL11.glPopMatrix(); + if (entityList == null) { + List list = new ArrayList(); + for (int i = 0; i < tile.getSizeInventory(); i++) { + list.add(new EntityItem(tile.getWorldObj(), tile.xCoord, tile.yCoord, tile.zCoord)); + } + entityList = list; + } + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5f, y + 0.675f - indetY, z + 0.5f); + GL11.glScalef(0.2F, 0.225F, 0.225F); + for (int i = 1; i < entityList.size(); i++) { + GL11.glPushMatrix(); + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + switch (i) { + case 1: + GL11.glTranslated(0.15f, 0.0f, 0.0f); + break; + case 2: + GL11.glTranslated(-0.15f, 0.0f, -0.15f); + break; + case 3: + GL11.glTranslated(-0.15f, 0.0f, 0.15f); + break; + } + entityList.get(i).setEntityItemStack(stack); + entityList.get(i).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(i), 0.0D, 0.0D, 0.0D, 1.0F, f); + } + GL11.glPopMatrix(); + } + GL11.glPopMatrix(); + if (tile.getStackInSlot(0) != null) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.915f - indetY, z + 0.5); + GL11.glScalef(0.45f, 0.45f, 0.45f); + entityList.get(0).setEntityItemStack(tile.getStackInSlot(0)); + entityList.get(0).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(0), 0.0D, 0.0D, 0.0D, 1.0F, f); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainMana.java b/src/main/java/ab/client/render/tile/RenderTileFountainMana.java new file mode 100644 index 0000000..c3a50ac --- /dev/null +++ b/src/main/java/ab/client/render/tile/RenderTileFountainMana.java @@ -0,0 +1,97 @@ +package ab.client.render.tile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.client.core.handler.ClientTickHandler; +import ab.client.model.ModelFountainMana; +import ab.common.block.tile.TileFountainMana; + +public class RenderTileFountainMana extends TileEntitySpecialRenderer { + + private List entityList = null; + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ModelFountainMana model = new ModelFountainMana(); + + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { + TileFountainMana tile = (TileFountainMana) tileentity; + double worldTime = 0.0D; + int meta = 2; + float invRender = 0.0f; + if (tileentity != null && tileentity.getWorldObj() != null) { + worldTime = ClientTickHandler.ticksInGame + f + + (new Random((tileentity.xCoord ^ tileentity.yCoord ^ tileentity.zCoord))).nextInt(360); + meta = tileentity.getWorldObj().getBlockMetadata(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord); + } else invRender = 0.0875f; + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + GL11.glPushMatrix(); + GL11.glEnable(32826); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslated(x - invRender, y, z); + GL11.glTranslatef(0.5f, 1.5f, 0.5f); + GL11.glRotatef(180.0f, 1.0f, 0.0f, 1.0f); + GL11.glRotatef(90.0f * meta, 0.0f, 1.0f, 0.0f); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + model.renderBottom(); + GL11.glTranslatef(0.0f, indetY, 0.0f); + model.renderTop(); + GL11.glEnable(32826); + GL11.glPopMatrix(); + if (entityList == null) { + List list = new ArrayList(); + for (int i = 0; i < tile.getSizeInventory(); i++) { + list.add(new EntityItem(tile.getWorldObj(), tile.xCoord, tile.yCoord, tile.zCoord)); + } + entityList = list; + } + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5f, y + 0.675f - indetY, z + 0.5f); + GL11.glScalef(0.2F, 0.225F, 0.225F); + for (int i = 1; i < entityList.size(); i++) { + GL11.glPushMatrix(); + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + switch (i) { + case 1: + GL11.glTranslated(0.15f, 0.0f, 0.0f); + break; + case 2: + GL11.glTranslated(-0.15f, 0.0f, -0.15f); + break; + case 3: + GL11.glTranslated(-0.15f, 0.0f, 0.15f); + break; + } + entityList.get(i).setEntityItemStack(stack); + entityList.get(i).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(i), 0.0D, 0.0D, 0.0D, 1.0F, f); + } + GL11.glPopMatrix(); + } + GL11.glPopMatrix(); + if (tile.getStackInSlot(0) != null) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.915f - indetY, z + 0.5); + GL11.glScalef(0.45f, 0.45f, 0.45f); + entityList.get(0).setEntityItemStack(tile.getStackInSlot(0)); + entityList.get(0).age = ClientTickHandler.ticksInGame; + ((Render) RenderManager.instance.entityRenderMap.get(EntityItem.class)) + .doRender((Entity) entityList.get(0), 0.0D, 0.0D, 0.0D, 1.0F, f); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/ab/common/block/BlockFountainAlchemy.java b/src/main/java/ab/common/block/BlockFountainAlchemy.java new file mode 100644 index 0000000..1667b1e --- /dev/null +++ b/src/main/java/ab/common/block/BlockFountainAlchemy.java @@ -0,0 +1,161 @@ +package ab.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import vazkii.botania.api.lexicon.ILexiconable; +import vazkii.botania.api.lexicon.LexiconEntry; +import vazkii.botania.common.block.ModBlocks; +import ab.AdvancedBotany; +import ab.common.block.tile.TileFountainAlchemy; +import ab.common.block.tile.TileInventory; +import ab.common.lib.register.BlockListAB; +import ab.common.lib.register.RecipeListAB; + +public class BlockFountainAlchemy extends BlockContainer implements ILexiconable { + + public BlockFountainAlchemy() { + super(Material.iron); + this.setCreativeTab(AdvancedBotany.tabAB); + this.setHardness(3.0F); + this.setResistance(10.0F); + this.setStepSound(soundTypeMetal); + this.setBlockName("ABAlchemy"); + } + + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + float f = 0.1875F; + float f1 = 0.0625F; + switch (world.getBlockMetadata(x, y, z)) { + case 0: + this.setBlockBounds(f, 0.0F, f1, 1.0F - f, 0.75F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 0.0F, f, 1.0F - f1, 0.75F, 1.0F - f); + break; + case 2: + this.setBlockBounds(f, 0.0F, 0.0F, 1.0F - f, 0.75F, 1.0F - f1); + break; + case 3: + this.setBlockBounds(f1, 0.0F, f, 1.0F, 0.75F, 1.0F - f); + break; + default: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase liv, ItemStack stack) { + int meta = MathHelper.floor_double((double) (liv.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockMetadataWithNotify(x, y, z, meta, 3); + } + + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + TileFountainAlchemy tile = (TileFountainAlchemy) world.getTileEntity(x, y, z); + if (player.isSneaking()) { + if (tile.getStackInSlot(0) != null) { + ItemStack copy = tile.getStackInSlot(0).copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(0, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + for (int i = tile.getSizeInventory() - 1; i > 0; i--) { + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + ItemStack copy = stack.copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(i, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + } + } + return false; + } + + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + if (!world.isRemote) { + TileInventory inv = (TileInventory) world.getTileEntity(x, y, z); + if (inv != null) { + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + float f = world.rand.nextFloat() * 0.8F + 0.1F; + float f1 = world.rand.nextFloat() * 0.8F + 0.1F; + float f2 = world.rand.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem = new EntityItem(world, (x + f), (y + f1), (z + f2), stack.copy()); + float f3 = 0.05F; + entityitem.motionX = ((float) world.rand.nextGaussian() * f3); + entityitem.motionY = ((float) world.rand.nextGaussian() * f3 + 0.2F); + entityitem.motionZ = ((float) world.rand.nextGaussian() * f3); + if (stack.hasTagCompound()) + entityitem.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy()); + world.spawnEntityInWorld(entityitem); + } + } + } + } + super.breakBlock(world, x, y, z, block, meta); + } + + public int getRenderType() { + return BlockListAB.blockABAlchemyRI; + } + + public IIcon getIcon(int par1, int par2) { + return ModBlocks.storage.getIcon(0, 0); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) { + return false; + } + + public TileEntity createNewTileEntity(World world, int meta) { + return new TileFountainAlchemy(); + } + + public LexiconEntry getEntry(World arg0, int arg1, int arg2, int arg3, EntityPlayer arg4, ItemStack arg5) { + return RecipeListAB.FountainAlchemy; + } +} diff --git a/src/main/java/ab/common/block/BlockFountainConjuration.java b/src/main/java/ab/common/block/BlockFountainConjuration.java new file mode 100644 index 0000000..b79e347 --- /dev/null +++ b/src/main/java/ab/common/block/BlockFountainConjuration.java @@ -0,0 +1,161 @@ +package ab.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import vazkii.botania.api.lexicon.ILexiconable; +import vazkii.botania.api.lexicon.LexiconEntry; +import vazkii.botania.common.block.ModBlocks; +import ab.AdvancedBotany; +import ab.common.block.tile.TileFountainConjuration; +import ab.common.block.tile.TileInventory; +import ab.common.lib.register.BlockListAB; +import ab.common.lib.register.RecipeListAB; + +public class BlockFountainConjuration extends BlockContainer implements ILexiconable { + + public BlockFountainConjuration() { + super(Material.iron); + this.setCreativeTab(AdvancedBotany.tabAB); + this.setHardness(3.0F); + this.setResistance(10.0F); + this.setStepSound(soundTypeMetal); + this.setBlockName("ABConjuration"); + } + + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + float f = 0.1875F; + float f1 = 0.0625F; + switch (world.getBlockMetadata(x, y, z)) { + case 0: + this.setBlockBounds(f, 0.0F, f1, 1.0F - f, 0.75F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 0.0F, f, 1.0F - f1, 0.75F, 1.0F - f); + break; + case 2: + this.setBlockBounds(f, 0.0F, 0.0F, 1.0F - f, 0.75F, 1.0F - f1); + break; + case 3: + this.setBlockBounds(f1, 0.0F, f, 1.0F, 0.75F, 1.0F - f); + break; + default: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase liv, ItemStack stack) { + int meta = MathHelper.floor_double((double) (liv.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockMetadataWithNotify(x, y, z, meta, 3); + } + + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + TileFountainConjuration tile = (TileFountainConjuration) world.getTileEntity(x, y, z); + if (player.isSneaking()) { + if (tile.getStackInSlot(0) != null) { + ItemStack copy = tile.getStackInSlot(0).copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(0, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + for (int i = tile.getSizeInventory() - 1; i > 0; i--) { + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + ItemStack copy = stack.copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(i, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + } + } + return false; + } + + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + if (!world.isRemote) { + TileInventory inv = (TileInventory) world.getTileEntity(x, y, z); + if (inv != null) { + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + float f = world.rand.nextFloat() * 0.8F + 0.1F; + float f1 = world.rand.nextFloat() * 0.8F + 0.1F; + float f2 = world.rand.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem = new EntityItem(world, (x + f), (y + f1), (z + f2), stack.copy()); + float f3 = 0.05F; + entityitem.motionX = ((float) world.rand.nextGaussian() * f3); + entityitem.motionY = ((float) world.rand.nextGaussian() * f3 + 0.2F); + entityitem.motionZ = ((float) world.rand.nextGaussian() * f3); + if (stack.hasTagCompound()) + entityitem.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy()); + world.spawnEntityInWorld(entityitem); + } + } + } + } + super.breakBlock(world, x, y, z, block, meta); + } + + public int getRenderType() { + return BlockListAB.blockABConjurationRI; + } + + public IIcon getIcon(int par1, int par2) { + return ModBlocks.storage.getIcon(0, 0); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) { + return false; + } + + public TileEntity createNewTileEntity(World world, int meta) { + return new TileFountainConjuration(); + } + + public LexiconEntry getEntry(World arg0, int arg1, int arg2, int arg3, EntityPlayer arg4, ItemStack arg5) { + return RecipeListAB.FountainConjuration; + } +} diff --git a/src/main/java/ab/common/block/BlockFountainMana.java b/src/main/java/ab/common/block/BlockFountainMana.java new file mode 100644 index 0000000..86f1973 --- /dev/null +++ b/src/main/java/ab/common/block/BlockFountainMana.java @@ -0,0 +1,161 @@ +package ab.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import vazkii.botania.api.lexicon.ILexiconable; +import vazkii.botania.api.lexicon.LexiconEntry; +import vazkii.botania.common.block.ModBlocks; +import ab.AdvancedBotany; +import ab.common.block.tile.TileFountainMana; +import ab.common.block.tile.TileInventory; +import ab.common.lib.register.BlockListAB; +import ab.common.lib.register.RecipeListAB; + +public class BlockFountainMana extends BlockContainer implements ILexiconable { + + public BlockFountainMana() { + super(Material.iron); + this.setCreativeTab(AdvancedBotany.tabAB); + this.setHardness(3.0F); + this.setResistance(10.0F); + this.setStepSound(soundTypeMetal); + this.setBlockName("ABFountain"); + } + + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + float f = 0.1875F; + float f1 = 0.0625F; + switch (world.getBlockMetadata(x, y, z)) { + case 0: + this.setBlockBounds(f, 0.0F, f1, 1.0F - f, 0.75F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 0.0F, f, 1.0F - f1, 0.75F, 1.0F - f); + break; + case 2: + this.setBlockBounds(f, 0.0F, 0.0F, 1.0F - f, 0.75F, 1.0F - f1); + break; + case 3: + this.setBlockBounds(f1, 0.0F, f, 1.0F, 0.75F, 1.0F - f); + break; + default: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase liv, ItemStack stack) { + int meta = MathHelper.floor_double((double) (liv.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockMetadataWithNotify(x, y, z, meta, 3); + } + + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + TileFountainMana tile = (TileFountainMana) world.getTileEntity(x, y, z); + if (player.isSneaking()) { + if (tile.getStackInSlot(0) != null) { + ItemStack copy = tile.getStackInSlot(0).copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(0, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + for (int i = tile.getSizeInventory() - 1; i > 0; i--) { + ItemStack stack = tile.getStackInSlot(i); + if (stack != null) { + ItemStack copy = stack.copy(); + if (!world.isRemote) { + Vec3 vec3 = player.getLook(1.0F).normalize(); + EntityItem entityitem = new EntityItem( + world, + player.posX + vec3.xCoord, + player.posY + 1.2f, + player.posZ + vec3.zCoord, + copy); + world.spawnEntityInWorld(entityitem); + tile.requestUpdate = true; + } + tile.setInventorySlotContents(i, null); + world.func_147453_f(x, y, z, (Block) this); + return true; + } + } + } + return false; + } + + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + if (!world.isRemote) { + TileInventory inv = (TileInventory) world.getTileEntity(x, y, z); + if (inv != null) { + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + float f = world.rand.nextFloat() * 0.8F + 0.1F; + float f1 = world.rand.nextFloat() * 0.8F + 0.1F; + float f2 = world.rand.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem = new EntityItem(world, (x + f), (y + f1), (z + f2), stack.copy()); + float f3 = 0.05F; + entityitem.motionX = ((float) world.rand.nextGaussian() * f3); + entityitem.motionY = ((float) world.rand.nextGaussian() * f3 + 0.2F); + entityitem.motionZ = ((float) world.rand.nextGaussian() * f3); + if (stack.hasTagCompound()) + entityitem.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy()); + world.spawnEntityInWorld(entityitem); + } + } + } + } + super.breakBlock(world, x, y, z, block, meta); + } + + public int getRenderType() { + return BlockListAB.blockABFountainRI; + } + + public IIcon getIcon(int par1, int par2) { + return ModBlocks.storage.getIcon(0, 0); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) { + return false; + } + + public TileEntity createNewTileEntity(World world, int meta) { + return new TileFountainMana(); + } + + public LexiconEntry getEntry(World arg0, int arg1, int arg2, int arg3, EntityPlayer arg4, ItemStack arg5) { + return RecipeListAB.FountainMana; + } +} diff --git a/src/main/java/ab/common/block/tile/TileFountainAlchemy.java b/src/main/java/ab/common/block/tile/TileFountainAlchemy.java new file mode 100644 index 0000000..57344f5 --- /dev/null +++ b/src/main/java/ab/common/block/tile/TileFountainAlchemy.java @@ -0,0 +1,292 @@ +package ab.common.block.tile; + +import java.awt.Color; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; + +import vazkii.botania.api.internal.VanillaPacketDispatcher; +import vazkii.botania.api.mana.IManaPool; +import vazkii.botania.api.mana.spark.ISparkAttachable; +import vazkii.botania.api.mana.spark.ISparkEntity; +import vazkii.botania.api.mana.spark.SparkHelper; +import vazkii.botania.client.core.handler.ClientTickHandler; +import vazkii.botania.common.Botania; +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainAlchemy; + +public class TileFountainAlchemy extends TileInventory implements ISparkAttachable, ISidedInventory { + + private int mana; + public int manaToGet; + private RecipeFountainAlchemy currentRecipe; + private int recipeID; + public boolean requestUpdate; + + public void updateEntity() { + if (!this.worldObj.isRemote) updateServer(); + else updateClient(); + ISparkEntity spark = getAttachedSpark(); + if (spark != null) { + List sparkEntities = SparkHelper + .getSparksAround(this.worldObj, this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D); + for (ISparkEntity otherSpark : sparkEntities) { + if (spark == otherSpark) continue; + else if (otherSpark.getAttachedTile() != null && otherSpark.getAttachedTile() instanceof IManaPool) + otherSpark.registerTransfer(spark); + } + } + } + + private void updateServer() { + if (requestUpdate) + VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + boolean hasUpdate = false; + List items = this.worldObj.getEntitiesWithinAABB( + EntityItem.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + this.yCoord, + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 1), + (this.zCoord + 1))); + for (EntityItem item : items) { + if (item.getEntityItem() != null && !item.isDead) { + ItemStack stack = item.getEntityItem(); + int splitCount = addItemStack(stack); + stack.stackSize -= splitCount; + if (stack.stackSize <= 0) item.setDead(); + if (splitCount > 0) hasUpdate = true; + break; + } + } + int wasManaToGet = this.manaToGet; + boolean hasCraft = false; + int recipeID = 0; + for (RecipeFountainAlchemy recipe : AdvancedBotanyAPI.FountainAlchemyRecipes) { + if (recipe.matches(this)) { + this.recipeID = recipeID; + if (this.mana > 0 && this.isFull()) { + ItemStack output = recipe.getOutput().copy(); + this.recieveMana(-recipe.getManaUsage()); + this.manaToGet = 0; + for (int i = 1; i < this.getSizeInventory(); i++) { + if (this.getStackInSlot(i).stackSize > 1) --this.getStackInSlot(i).stackSize; + else this.setInventorySlotContents(i, null); + } + if (this.getStackInSlot(0) != null) ++this.getStackInSlot(0).stackSize; + else this.setInventorySlotContents(0, output); + hasUpdate = true; + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "botania:terrasteelCraft", 1.0F, 2.0F); + break; + } else { + if (this.getStackInSlot(0) == null) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } else if (isItemEqual(recipe.getOutput(), getStackInSlot(0)) + && getStackInSlot(0).stackSize < recipe.getOutput().getMaxStackSize()) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } + } + } + recipeID++; + } + if (!hasCraft) { + currentRecipe = null; + this.mana = 0; + this.manaToGet = 0; + } + if (this.manaToGet != wasManaToGet) hasUpdate = true; + requestUpdate = hasUpdate; + } + + private void updateClient() { + if (this.mana > 0) { + double worldTime = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks; + worldTime += (new Random((this.xCoord ^ this.yCoord ^ this.zCoord))).nextInt(360); + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + float ticks = 100.0F * getCurrentMana() / this.manaToGet; + int totalSpiritCount = 3; + double tickIncrement = 360.0D / totalSpiritCount; + int speed = 5; + double wticks = (ticks * speed) - tickIncrement; + double r = Math.sin((ticks - 100) / 10.0D) * 0.5D; + double g = Math.sin(wticks * Math.PI / 180.0D * 0.55D); + float size = 0.4f; + for (int i = 0; i < totalSpiritCount; i++) { + double x = this.xCoord + Math.sin(wticks * Math.PI / 180.0D) * r + 0.5D; + double y = this.yCoord - indetY + 0.85D + Math.abs(r) * 0.7D; + double z = this.zCoord + Math.cos(wticks * Math.PI / 180.0D) * r + 0.5D; + wticks += tickIncrement; + int color = 0x24cce0; + if (currentRecipe != null) color = currentRecipe.getColor(); + float hsb[] = Color.RGBtoHSB(color & 255, color >> 8 & 255, color >> 16 & 255, null); + int color1 = Color.HSBtoRGB(hsb[0], hsb[1], ticks / 100.0F); + float[] colorsfx = { (color1 & 255) / 255.0f, (color1 >> 8 & 255) / 255.0f, + (color1 >> 16 & 255) / 255.0f }; + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + 0.85F * size, + (float) g * 0.05F, + 0.25F); + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.1F + 0.1F * size, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + 0.9F); + if (ticks == 100) for (int j = 0; j < 12; j++) Botania.proxy.wispFX( + this.worldObj, + this.xCoord + 0.5D, + this.yCoord + 1.1D - indetY, + this.zCoord + 0.5D, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.15F + 0.15F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + 0.8f); + } + } + } + + public static boolean isItemEqual(ItemStack stack, ItemStack stack1) { + return stack.isItemEqual(stack1) && ItemStack.areItemStackTagsEqual(stack, stack1); + } + + private int addItemStack(ItemStack stack) { + for (int i = 1; i < getSizeInventory(); i++) { + if (getStackInSlot(i) == null) { + ItemStack stackToAdd = stack.copy(); + setInventorySlotContents(i, stackToAdd); + return stack.stackSize; + } else if (isItemEqual(stack, getStackInSlot(i))) { + if (getStackInSlot(i).stackSize < stack.getMaxStackSize()) { + int count = Math.min(stack.stackSize, stack.getMaxStackSize() - getStackInSlot(i).stackSize); + getStackInSlot(i).stackSize += count; + return count; + } + } + } + return 0; + } + + public void writeCustomNBT(NBTTagCompound cmp) { + super.writeCustomNBT(cmp); + cmp.setInteger("mana", mana); + cmp.setInteger("manaToGet", manaToGet); + cmp.setBoolean("requestUpdate", requestUpdate); + cmp.setInteger("recipeID", currentRecipe == null ? -1 : recipeID); + } + + public void readCustomNBT(NBTTagCompound cmp) { + super.readCustomNBT(cmp); + this.mana = cmp.getInteger("mana"); + this.manaToGet = cmp.getInteger("manaToGet"); + this.requestUpdate = cmp.getBoolean("requestUpdate"); + int recipeID = cmp.getInteger("recipeID"); + if (recipeID == -1) this.currentRecipe = null; + else this.currentRecipe = AdvancedBotanyAPI.FountainAlchemyRecipes.get(recipeID); + } + + public int getSizeInventory() { + // return 4; + return 2; + } + + public String getInventoryName() { + return "tileFountainAlchemy"; + } + + public int getCurrentMana() { + return this.mana; + } + + public boolean isFull() { + return this.mana >= this.manaToGet; + } + + public void recieveMana(final int mana) { + this.mana = Math.min(this.mana + mana, this.manaToGet); + } + + public boolean canRecieveManaFromBursts() { + return !this.isFull(); + } + + public boolean canAttachSpark(ItemStack stack) { + return true; + } + + public void attachSpark(ISparkEntity entity) {} + + public ISparkEntity getAttachedSpark() { + List sparks = this.worldObj.getEntitiesWithinAABB( + ISparkEntity.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + (this.yCoord + 1), + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 2), + (this.zCoord + 1))); + if (sparks.size() == 1) { + Entity e = (Entity) sparks.get(0); + return (ISparkEntity) e; + } + return null; + } + + public boolean areIncomingTranfersDone() { + return this.isFull(); + } + + public int getAvailableSpaceForMana() { + return Math.max(0, this.manaToGet - getCurrentMana()); + } + + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0, 1 }; + } + + public boolean canInsertItem(int slot, ItemStack stack, int side) { + for (int i = 1; i < getSizeInventory(); i++) { + ItemStack slotStack = getStackInSlot(i); + if (slotStack != null && slotStack.stackSize == slotStack.getMaxStackSize() + && isItemEqual(stack, slotStack)) + return false; + } + return side == 1 && slot != 0; + } + + public boolean canExtractItem(int slot, ItemStack stack, int side) { + return (side == 0 && slot == 0) || (side != 0 && side != 1 && slot != 0); + } +} diff --git a/src/main/java/ab/common/block/tile/TileFountainConjuration.java b/src/main/java/ab/common/block/tile/TileFountainConjuration.java new file mode 100644 index 0000000..613f3e4 --- /dev/null +++ b/src/main/java/ab/common/block/tile/TileFountainConjuration.java @@ -0,0 +1,292 @@ +package ab.common.block.tile; + +import java.awt.Color; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; + +import vazkii.botania.api.internal.VanillaPacketDispatcher; +import vazkii.botania.api.mana.IManaPool; +import vazkii.botania.api.mana.spark.ISparkAttachable; +import vazkii.botania.api.mana.spark.ISparkEntity; +import vazkii.botania.api.mana.spark.SparkHelper; +import vazkii.botania.client.core.handler.ClientTickHandler; +import vazkii.botania.common.Botania; +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainConjuration; + +public class TileFountainConjuration extends TileInventory implements ISparkAttachable, ISidedInventory { + + private int mana; + public int manaToGet; + private RecipeFountainConjuration currentRecipe; + private int recipeID; + public boolean requestUpdate; + + public void updateEntity() { + if (!this.worldObj.isRemote) updateServer(); + else updateClient(); + ISparkEntity spark = getAttachedSpark(); + if (spark != null) { + List sparkEntities = SparkHelper + .getSparksAround(this.worldObj, this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D); + for (ISparkEntity otherSpark : sparkEntities) { + if (spark == otherSpark) continue; + else if (otherSpark.getAttachedTile() != null && otherSpark.getAttachedTile() instanceof IManaPool) + otherSpark.registerTransfer(spark); + } + } + } + + private void updateServer() { + if (requestUpdate) + VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + boolean hasUpdate = false; + List items = this.worldObj.getEntitiesWithinAABB( + EntityItem.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + this.yCoord, + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 1), + (this.zCoord + 1))); + for (EntityItem item : items) { + if (item.getEntityItem() != null && !item.isDead) { + ItemStack stack = item.getEntityItem(); + int splitCount = addItemStack(stack); + stack.stackSize -= splitCount; + if (stack.stackSize <= 0) item.setDead(); + if (splitCount > 0) hasUpdate = true; + break; + } + } + int wasManaToGet = this.manaToGet; + boolean hasCraft = false; + int recipeID = 0; + for (RecipeFountainConjuration recipe : AdvancedBotanyAPI.FountainConjurationRecipes) { + if (recipe.matches(this)) { + this.recipeID = recipeID; + if (this.mana > 0 && this.isFull()) { + ItemStack output = recipe.getOutput().copy(); + this.recieveMana(-recipe.getManaUsage()); + this.manaToGet = 0; + for (int i = 1; i < this.getSizeInventory(); i++) { + if (this.getStackInSlot(i).stackSize > 1) --this.getStackInSlot(i).stackSize; + else this.setInventorySlotContents(i, null); + } + if (this.getStackInSlot(0) != null) ++this.getStackInSlot(0).stackSize; + else this.setInventorySlotContents(0, output); + hasUpdate = true; + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "botania:terrasteelCraft", 1.0F, 2.0F); + break; + } else { + if (this.getStackInSlot(0) == null) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } else if (isItemEqual(recipe.getOutput(), getStackInSlot(0)) + && getStackInSlot(0).stackSize < recipe.getOutput().getMaxStackSize()) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } + } + } + recipeID++; + } + if (!hasCraft) { + currentRecipe = null; + this.mana = 0; + this.manaToGet = 0; + } + if (this.manaToGet != wasManaToGet) hasUpdate = true; + requestUpdate = hasUpdate; + } + + private void updateClient() { + if (this.mana > 0) { + double worldTime = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks; + worldTime += (new Random((this.xCoord ^ this.yCoord ^ this.zCoord))).nextInt(360); + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + float ticks = 100.0F * getCurrentMana() / this.manaToGet; + int totalSpiritCount = 3; + double tickIncrement = 360.0D / totalSpiritCount; + int speed = 5; + double wticks = (ticks * speed) - tickIncrement; + double r = Math.sin((ticks - 100) / 10.0D) * 0.5D; + double g = Math.sin(wticks * Math.PI / 180.0D * 0.55D); + float size = 0.4f; + for (int i = 0; i < totalSpiritCount; i++) { + double x = this.xCoord + Math.sin(wticks * Math.PI / 180.0D) * r + 0.5D; + double y = this.yCoord - indetY + 0.85D + Math.abs(r) * 0.7D; + double z = this.zCoord + Math.cos(wticks * Math.PI / 180.0D) * r + 0.5D; + wticks += tickIncrement; + int color = 0x24cce0; + if (currentRecipe != null) color = currentRecipe.getColor(); + float hsb[] = Color.RGBtoHSB(color & 255, color >> 8 & 255, color >> 16 & 255, null); + int color1 = Color.HSBtoRGB(hsb[0], hsb[1], ticks / 100.0F); + float[] colorsfx = { (color1 & 255) / 255.0f, (color1 >> 8 & 255) / 255.0f, + (color1 >> 16 & 255) / 255.0f }; + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + 0.85F * size, + (float) g * 0.05F, + 0.25F); + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.1F + 0.1F * size, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + 0.9F); + if (ticks == 100) for (int j = 0; j < 12; j++) Botania.proxy.wispFX( + this.worldObj, + this.xCoord + 0.5D, + this.yCoord + 1.1D - indetY, + this.zCoord + 0.5D, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.15F + 0.15F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + 0.8f); + } + } + } + + public static boolean isItemEqual(ItemStack stack, ItemStack stack1) { + return stack.isItemEqual(stack1) && ItemStack.areItemStackTagsEqual(stack, stack1); + } + + private int addItemStack(ItemStack stack) { + for (int i = 1; i < getSizeInventory(); i++) { + if (getStackInSlot(i) == null) { + ItemStack stackToAdd = stack.copy(); + setInventorySlotContents(i, stackToAdd); + return stack.stackSize; + } else if (isItemEqual(stack, getStackInSlot(i))) { + if (getStackInSlot(i).stackSize < stack.getMaxStackSize()) { + int count = Math.min(stack.stackSize, stack.getMaxStackSize() - getStackInSlot(i).stackSize); + getStackInSlot(i).stackSize += count; + return count; + } + } + } + return 0; + } + + public void writeCustomNBT(NBTTagCompound cmp) { + super.writeCustomNBT(cmp); + cmp.setInteger("mana", mana); + cmp.setInteger("manaToGet", manaToGet); + cmp.setBoolean("requestUpdate", requestUpdate); + cmp.setInteger("recipeID", currentRecipe == null ? -1 : recipeID); + } + + public void readCustomNBT(NBTTagCompound cmp) { + super.readCustomNBT(cmp); + this.mana = cmp.getInteger("mana"); + this.manaToGet = cmp.getInteger("manaToGet"); + this.requestUpdate = cmp.getBoolean("requestUpdate"); + int recipeID = cmp.getInteger("recipeID"); + if (recipeID == -1) this.currentRecipe = null; + else this.currentRecipe = AdvancedBotanyAPI.FountainConjurationRecipes.get(recipeID); + } + + public int getSizeInventory() { + // return 4; + return 2; + } + + public String getInventoryName() { + return "tileFountainConjuration"; + } + + public int getCurrentMana() { + return this.mana; + } + + public boolean isFull() { + return this.mana >= this.manaToGet; + } + + public void recieveMana(final int mana) { + this.mana = Math.min(this.mana + mana, this.manaToGet); + } + + public boolean canRecieveManaFromBursts() { + return !this.isFull(); + } + + public boolean canAttachSpark(ItemStack stack) { + return true; + } + + public void attachSpark(ISparkEntity entity) {} + + public ISparkEntity getAttachedSpark() { + List sparks = this.worldObj.getEntitiesWithinAABB( + ISparkEntity.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + (this.yCoord + 1), + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 2), + (this.zCoord + 1))); + if (sparks.size() == 1) { + Entity e = (Entity) sparks.get(0); + return (ISparkEntity) e; + } + return null; + } + + public boolean areIncomingTranfersDone() { + return this.isFull(); + } + + public int getAvailableSpaceForMana() { + return Math.max(0, this.manaToGet - getCurrentMana()); + } + + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0, 1 }; + } + + public boolean canInsertItem(int slot, ItemStack stack, int side) { + for (int i = 1; i < getSizeInventory(); i++) { + ItemStack slotStack = getStackInSlot(i); + if (slotStack != null && slotStack.stackSize == slotStack.getMaxStackSize() + && isItemEqual(stack, slotStack)) + return false; + } + return side == 1 && slot != 0; + } + + public boolean canExtractItem(int slot, ItemStack stack, int side) { + return (side == 0 && slot == 0) || (side != 0 && side != 1 && slot != 0); + } +} diff --git a/src/main/java/ab/common/block/tile/TileFountainMana.java b/src/main/java/ab/common/block/tile/TileFountainMana.java new file mode 100644 index 0000000..5ff3c3b --- /dev/null +++ b/src/main/java/ab/common/block/tile/TileFountainMana.java @@ -0,0 +1,293 @@ +package ab.common.block.tile; + +import java.awt.Color; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; + +import vazkii.botania.api.internal.VanillaPacketDispatcher; +import vazkii.botania.api.mana.IManaPool; +import vazkii.botania.api.mana.spark.ISparkAttachable; +import vazkii.botania.api.mana.spark.ISparkEntity; +import vazkii.botania.api.mana.spark.SparkHelper; +import vazkii.botania.client.core.handler.ClientTickHandler; +import vazkii.botania.common.Botania; +import ab.api.AdvancedBotanyAPI; +import ab.api.recipe.RecipeFountainMana; + +public class TileFountainMana extends TileInventory implements ISparkAttachable, ISidedInventory { + + private int mana; + public int manaToGet; + private RecipeFountainMana currentRecipe; + private int recipeID; + public boolean requestUpdate; + + public void updateEntity() { + if (!this.worldObj.isRemote) updateServer(); + else updateClient(); + ISparkEntity spark = getAttachedSpark(); + if (spark != null) { + List sparkEntities = SparkHelper + .getSparksAround(this.worldObj, this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D); + for (ISparkEntity otherSpark : sparkEntities) { + if (spark == otherSpark) continue; + else if (otherSpark.getAttachedTile() != null && otherSpark.getAttachedTile() instanceof IManaPool) + otherSpark.registerTransfer(spark); + } + } + } + + private void updateServer() { + if (requestUpdate) + VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + boolean hasUpdate = false; + List items = this.worldObj.getEntitiesWithinAABB( + EntityItem.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + this.yCoord, + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 1), + (this.zCoord + 1))); + for (EntityItem item : items) { + if (item.getEntityItem() != null && !item.isDead) { + ItemStack stack = item.getEntityItem(); + int splitCount = addItemStack(stack); + stack.stackSize -= splitCount; + if (stack.stackSize <= 0) item.setDead(); + if (splitCount > 0) hasUpdate = true; + break; + } + } + int wasManaToGet = this.manaToGet; + boolean hasCraft = false; + int recipeID = 0; + for (RecipeFountainMana recipe : AdvancedBotanyAPI.FountainManaRecipes) { + if (recipe.matches(this)) { + this.recipeID = recipeID; + if (this.mana > 0 && this.isFull()) { + ItemStack output = recipe.getOutput().copy(); + this.recieveMana(-recipe.getManaUsage()); + this.manaToGet = 0; + for (int i = 1; i < this.getSizeInventory(); i++) { + if (this.getStackInSlot(i).stackSize > 1) --this.getStackInSlot(i).stackSize; + else this.setInventorySlotContents(i, null); + } + if (this.getStackInSlot(0) != null) ++this.getStackInSlot(0).stackSize; + else this.setInventorySlotContents(0, output); + hasUpdate = true; + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "botania:terrasteelCraft", 1.0F, 2.0F); + break; + } else { + if (this.getStackInSlot(0) == null) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } else if (isItemEqual(recipe.getOutput(), getStackInSlot(0)) + && getStackInSlot(0).stackSize < recipe.getOutput().getMaxStackSize()) { + this.manaToGet = recipe.getManaUsage(); + currentRecipe = recipe; + hasCraft = true; + break; + } + } + } + recipeID++; + } + if (!hasCraft) { + currentRecipe = null; + this.mana = 0; + this.manaToGet = 0; + } + if (this.manaToGet != wasManaToGet) hasUpdate = true; + requestUpdate = hasUpdate; + } + + private void updateClient() { + if (this.mana > 0) { + double worldTime = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks; + worldTime += (new Random((this.xCoord ^ this.yCoord ^ this.zCoord))).nextInt(360); + float indetY = (float) (Math.sin(worldTime / 18.0D) / 24.0D); + float ticks = 100.0F * getCurrentMana() / this.manaToGet; + int totalSpiritCount = 3; + double tickIncrement = 360.0D / totalSpiritCount; + int speed = 5; + double wticks = (ticks * speed) - tickIncrement; + double r = Math.sin((ticks - 100) / 10.0D) * 0.5D; + double g = Math.sin(wticks * Math.PI / 180.0D * 0.55D); + float size = 0.4f; + for (int i = 0; i < totalSpiritCount; i++) { + double x = this.xCoord + Math.sin(wticks * Math.PI / 180.0D) * r + 0.5D; + double y = this.yCoord - indetY + 0.85D + Math.abs(r) * 0.7D; + double z = this.zCoord + Math.cos(wticks * Math.PI / 180.0D) * r + 0.5D; + wticks += tickIncrement; + int color = 0x24cce0; + if (currentRecipe != null) color = currentRecipe.getColor(); + float hsb[] = Color.RGBtoHSB(color & 255, color >> 8 & 255, color >> 16 & 255, null); + int color1 = Color.HSBtoRGB(hsb[0], hsb[1], ticks / 100.0F); + float[] colorsfx = { (color1 & 255) / 255.0f, (color1 >> 8 & 255) / 255.0f, + (color1 >> 16 & 255) / 255.0f }; + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + 0.85F * size, + (float) g * 0.05F, + 0.25F); + Botania.proxy.wispFX( + this.worldObj, + x, + y, + z, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.1F + 0.1F * size, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + (float) (Math.random() - 0.5D) * 0.05F, + 0.9F); + if (ticks == 100) for (int j = 0; j < 12; j++) Botania.proxy.wispFX( + this.worldObj, + this.xCoord + 0.5D, + this.yCoord + 1.1D - indetY, + this.zCoord + 0.5D, + colorsfx[0], + colorsfx[1], + colorsfx[2], + (float) Math.random() * 0.15F + 0.15F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + (float) (Math.random() - 0.5D) * 0.125F * size, + 0.8f); + } + } + } + + public static boolean isItemEqual(ItemStack stack, ItemStack stack1) { + return stack.isItemEqual(stack1) && ItemStack.areItemStackTagsEqual(stack, stack1); + } + + private int addItemStack(ItemStack stack) { + for (int i = 1; i < getSizeInventory(); i++) { + if (getStackInSlot(i) == null) { + ItemStack stackToAdd = stack.copy(); + setInventorySlotContents(i, stackToAdd); + return stack.stackSize; + } else if (isItemEqual(stack, getStackInSlot(i))) { + if (getStackInSlot(i).stackSize < stack.getMaxStackSize()) { + int count = Math.min(stack.stackSize, stack.getMaxStackSize() - getStackInSlot(i).stackSize); + getStackInSlot(i).stackSize += count; + return count; + } + } + } + return 0; + } + + public void writeCustomNBT(NBTTagCompound cmp) { + super.writeCustomNBT(cmp); + cmp.setInteger("mana", mana); + cmp.setInteger("manaToGet", manaToGet); + cmp.setBoolean("requestUpdate", requestUpdate); + cmp.setInteger("recipeID", currentRecipe == null ? -1 : recipeID); + } + + public void readCustomNBT(NBTTagCompound cmp) { + super.readCustomNBT(cmp); + this.mana = cmp.getInteger("mana"); + this.manaToGet = cmp.getInteger("manaToGet"); + this.requestUpdate = cmp.getBoolean("requestUpdate"); + int recipeID = cmp.getInteger("recipeID"); + if (recipeID == -1) this.currentRecipe = null; + else this.currentRecipe = AdvancedBotanyAPI.FountainManaRecipes.get(recipeID); + } + + public int getSizeInventory() { + // return 4; + return 2; + } + + public String getInventoryName() { + return "tileFountainMana"; + } + + public int getCurrentMana() { + return this.mana; + } + + public boolean isFull() { + return this.mana >= this.manaToGet; + } + + public void recieveMana(final int mana) { + this.mana = Math.min(this.mana + mana, this.manaToGet); + } + + public boolean canRecieveManaFromBursts() { + return !this.isFull(); + } + + public boolean canAttachSpark(ItemStack stack) { + return true; + } + + public void attachSpark(ISparkEntity entity) {} + + public ISparkEntity getAttachedSpark() { + List sparks = this.worldObj.getEntitiesWithinAABB( + ISparkEntity.class, + AxisAlignedBB.getBoundingBox( + this.xCoord, + (this.yCoord + 1), + this.zCoord, + (this.xCoord + 1), + (this.yCoord + 2), + (this.zCoord + 1))); + if (sparks.size() == 1) { + Entity e = (Entity) sparks.get(0); + return (ISparkEntity) e; + } + return null; + } + + public boolean areIncomingTranfersDone() { + return this.isFull(); + } + + public int getAvailableSpaceForMana() { + return Math.max(0, this.manaToGet - getCurrentMana()); + } + + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0, 1 }; + // return new int[] { 0, 1, 2, 3 }; + } + + public boolean canInsertItem(int slot, ItemStack stack, int side) { + for (int i = 1; i < getSizeInventory(); i++) { + ItemStack slotStack = getStackInSlot(i); + if (slotStack != null && slotStack.stackSize == slotStack.getMaxStackSize() + && isItemEqual(stack, slotStack)) + return false; + } + return side == 1 && slot != 0; + } + + public boolean canExtractItem(int slot, ItemStack stack, int side) { + return (side == 0 && slot == 0) || (side != 0 && side != 1 && slot != 0); + } +} diff --git a/src/main/java/ab/common/lib/register/BlockListAB.java b/src/main/java/ab/common/lib/register/BlockListAB.java index 4d183d4..d3f0409 100644 --- a/src/main/java/ab/common/lib/register/BlockListAB.java +++ b/src/main/java/ab/common/lib/register/BlockListAB.java @@ -8,6 +8,9 @@ import ab.common.block.BlockAntigravitation; import ab.common.block.BlockBoardFate; import ab.common.block.BlockEngineerHopper; +import ab.common.block.BlockFountainAlchemy; +import ab.common.block.BlockFountainConjuration; +import ab.common.block.BlockFountainMana; import ab.common.block.BlockFreyrLiana; import ab.common.block.BlockLebethronWood; import ab.common.block.BlockLuminousFreyrLiana; @@ -20,6 +23,9 @@ import ab.common.block.tile.TileABSpreader; import ab.common.block.tile.TileBoardFate; import ab.common.block.tile.TileEngineerHopper; +import ab.common.block.tile.TileFountainAlchemy; +import ab.common.block.tile.TileFountainConjuration; +import ab.common.block.tile.TileFountainMana; import ab.common.block.tile.TileGameBoard; import ab.common.block.tile.TileLebethronCore; import ab.common.block.tile.TileMagicCraftCrate; @@ -36,6 +42,9 @@ public class BlockListAB { public static Block blockABSpreader; public static Block blockABPlate; + public static Block blockABFountain; + public static Block blockABAlchemy; + public static Block blockABConjuration; public static Block blockLebethron; public static Block blockManaContainer; public static Block blockABStorage; @@ -55,6 +64,9 @@ public class BlockListAB { public static int blockManaChargerRI; public static int blockEngineerHopperRI; public static int blockABPlateRI; + public static int blockABFountainRI; + public static int blockABAlchemyRI; + public static int blockABConjurationRI; public static void init() { initializeBlocks(); @@ -65,6 +77,9 @@ public static void init() { private static void initializeBlocks() { BlockListAB.blockABSpreader = new BlockABSpreader(); BlockListAB.blockABPlate = new BlockNidavellirForge(); + BlockListAB.blockABFountain = new BlockFountainMana(); + BlockListAB.blockABAlchemy = new BlockFountainAlchemy(); + BlockListAB.blockABConjuration = new BlockFountainConjuration(); BlockListAB.blockLebethron = new BlockLebethronWood(); BlockListAB.blockManaContainer = new BlockManaContainer(); BlockListAB.blockABStorage = new BlockABStorage(); @@ -83,6 +98,9 @@ private static void initializeBlocks() { private static void registerBlocks() { GameRegistry.registerBlock(BlockListAB.blockABSpreader, "blockABSpreader"); GameRegistry.registerBlock(BlockListAB.blockABPlate, "blockABPlate"); + GameRegistry.registerBlock(BlockListAB.blockABFountain, "blockABFountain"); + GameRegistry.registerBlock(BlockListAB.blockABAlchemy, "blockABAlchemy"); + GameRegistry.registerBlock(BlockListAB.blockABConjuration, "blockABConjuration"); GameRegistry.registerBlock(BlockListAB.blockManaContainer, ItemBlockBase.class, "blockManaContainer"); GameRegistry.registerBlock(BlockListAB.blockLebethron, ItemBlockBase.class, "blockLebethron"); GameRegistry.registerBlock(BlockListAB.blockABStorage, ItemBlockBase.class, "blockABStorage"); @@ -99,6 +117,9 @@ private static void registerBlocks() { private static void registerTileEntities() { GameRegistry.registerTileEntity(TileABSpreader.class, "tileABSpreader"); GameRegistry.registerTileEntity(TileNidavellirForge.class, "tileAgglomerationPlate"); + GameRegistry.registerTileEntity(TileFountainMana.class, "tileFountainMana"); + GameRegistry.registerTileEntity(TileFountainAlchemy.class, "tileFountainAlchemy"); + GameRegistry.registerTileEntity(TileFountainConjuration.class, "tileFountainConjuration"); GameRegistry.registerTileEntity(TileLebethronCore.class, "tileLebethronCore"); GameRegistry.registerTileEntity(TileManaContainer.class, "tileManaContainer"); GameRegistry.registerTileEntity(TileManaCrystalCube.class, "tileManaCrystalCube"); @@ -117,5 +138,8 @@ private static void registerTileEntities() { BlockListAB.blockManaChargerRI = -1; BlockListAB.blockEngineerHopperRI = -1; BlockListAB.blockABPlateRI = -1; + BlockListAB.blockABFountainRI = -1; + BlockListAB.blockABAlchemyRI = -1; + BlockListAB.blockABConjurationRI = -1; } } diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 24d3e7f..e6c65c4 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -1,8 +1,12 @@ package ab.common.lib.register; +import static net.fuzzycraft.botanichorizons.util.Constants.*; + import java.util.ArrayList; import java.util.List; +import net.fuzzycraft.botanichorizons.util.OreDict; +import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -44,6 +48,9 @@ import ab.api.AdvancedBotanyAPI; import ab.api.recipe.RecipeAdvancedPlate; import ab.api.recipe.RecipeAncientAlphirine; +import ab.api.recipe.RecipeFountainAlchemy; +import ab.api.recipe.RecipeFountainConjuration; +import ab.api.recipe.RecipeFountainMana; import ab.api.recipe.lexicon.AdvancedPlateCraftPage; import ab.api.recipe.lexicon.AlphirineCraftPage; import ab.common.block.tile.TileLebethronCore; @@ -51,7 +58,6 @@ import ab.common.item.ItemCraftingPattern; import ab.utils.IModHelper; import ab.utils.LocalizationManager; -import ab.utils.OreDict; import cpw.mods.fml.common.registry.GameRegistry; public class RecipeListAB implements IModHelper { @@ -76,14 +82,78 @@ public class RecipeListAB implements IModHelper { public static RecipeAdvancedPlate ExquisiteManaDiamondRecipe; public static RecipeAdvancedPlate FlawlessDragonstoneRecipe; public static RecipeAdvancedPlate ExquisiteDragonstoneRecipe; + public static RecipeAdvancedPlate EnderAirRecipe; + + public static RecipeFountainMana manasteelRecipes; + public static RecipeFountainMana manaPowderRecipes; + public static RecipeFountainMana manaDiamondRecipes; + public static RecipeFountainMana grassSeedsRecipe; + public static RecipeFountainMana podzolSeedsRecipe; + public static RecipeFountainMana mycelSeedsRecipes; + public static RecipeFountainMana manaQuartzRecipe; + public static RecipeFountainMana managlassRecipe; + public static RecipeFountainMana manaStringRecipe; + public static RecipeFountainMana manaBottleRecipe; + public static RecipeFountainMana manaPearlRecipe; + public static RecipeFountainMana pistonRelayRecipe; + public static RecipeFountainMana manaCookieRecipe; + public static RecipeFountainMana tinyPotatoRecipe; + public static RecipeFountainMana manaweaveClothRecipe; + public static RecipeFountainMana wandCoresRecipes; + public static RecipeFountainMana wandCapRecipe; + public static RecipeFountainMana Bee1Recipe; + + public static RecipeFountainAlchemy leatherRecipe; + public static RecipeFountainAlchemy woodRecipes; + public static RecipeFountainAlchemy saplingRecipes; + public static RecipeFountainAlchemy glowstoneDustRecipe; + public static RecipeFountainAlchemy quartzRecipes; + public static RecipeFountainAlchemy chiseledBrickRecipe; + public static RecipeFountainAlchemy iceRecipe; + public static RecipeFountainAlchemy swampFolliageRecipes; + public static RecipeFountainAlchemy fishRecipes; + public static RecipeFountainAlchemy cropRecipes; + public static RecipeFountainAlchemy potatoRecipe; + public static RecipeFountainAlchemy netherWartRecipe; + public static RecipeFountainAlchemy gunpowderAndFlintRecipes; + public static RecipeFountainAlchemy nameTagRecipe; + public static RecipeFountainAlchemy stringRecipes; + public static RecipeFountainAlchemy slimeballCactusRecipes; + public static RecipeFountainAlchemy enderPearlRecipe; + public static RecipeFountainAlchemy redstoneToGlowstoneRecipes; + public static RecipeFountainAlchemy sandRecipe; + public static RecipeFountainAlchemy redSandRecipe; + public static RecipeFountainAlchemy clayBreakdownRecipes; + public static RecipeFountainAlchemy coarseDirtRecipe; + public static RecipeFountainAlchemy prismarineRecipe; + public static RecipeFountainAlchemy stoneRecipes; + public static RecipeFountainAlchemy tallgrassRecipes; + public static RecipeFountainAlchemy flowersRecipes; + public static RecipeFountainAlchemy petiteRecipes; + public static RecipeFountainAlchemy Bee2Recipe; + + public static RecipeFountainConjuration redstoneRecipe; + public static RecipeFountainConjuration glowstoneRecipe; + public static RecipeFountainConjuration quartzRecipe; + public static RecipeFountainConjuration coalRecipe; + public static RecipeFountainConjuration snowballRecipe; + public static RecipeFountainConjuration netherrackRecipe; + public static RecipeFountainConjuration soulSandRecipe; + public static RecipeFountainConjuration gravelRecipe; + public static RecipeFountainConjuration leavesRecipes; + public static RecipeFountainConjuration grassRecipe; public static RecipePetals alphirineRecipe; + public static RecipePetals PrimalRecipe; public static RecipePetals dictariusRecipe; public static RecipePetals aspecolusRecipe; public static RecipePetals pureGladRecipe; public static RecipePetals azartFlowerRecipe; public static LexiconEntry advandedAgglomerationPlate; + public static LexiconEntry FountainMana; + public static LexiconEntry FountainAlchemy; + public static LexiconEntry FountainConjuration; public static LexiconEntry ancientAlphirine; public static LexiconEntry lebethronWood; public static LexiconEntry lebethronSpreader; @@ -124,6 +194,10 @@ public class RecipeListAB implements IModHelper { public static ResearchPage ForgePages; public static ResearchPage ManaChargerPages; public static ResearchPage NebulaPages; + public static ResearchPage FountainManaPages; + public static ResearchPage FountainManaPages2; + public static ResearchPage FountainAlchemyPages; + public static ResearchPage FountainConjurationPages; public static KnowledgeType forgotten; @@ -150,6 +224,9 @@ public void postInit() { public static InfusionRecipe NebulaChest; public static InfusionRecipe NebulaLegs; public static InfusionRecipe NebulaBoots; + public static InfusionRecipe FountainManaB; + public static InfusionRecipe FountainAlchemyB; + public static InfusionRecipe FountainConjurationB; public static void setupCrafting() { @@ -187,6 +264,7 @@ public static void setupCrafting() { 60); ///////////////////////////////////////////////////////////////////////////////////////// Forge of Nidavellir + ///////////////////////////////////////////////////////////////////////////////////////// and fountains ///////////////////////////////////////////////////////////////////////////////////////// Recipes mithrillRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( @@ -252,16 +330,774 @@ public static void setupCrafting() { new ItemStack(ModItems.manaResource, 1, 9), 300000, 0xd6259d); + EnderAirRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( + new ItemStack(ModItems.manaResource, 16, 15), + new ItemStack(ModBlocks.endStoneBrick, 1, 2), + new ItemStack(ModItems.manaBottle), + new ItemStack((Item) Item.itemRegistry.getObject("ThaumicTinkerer:fireAir")), + 500, + 0x29de20); + //////////////////////////////////////////////////////////////////////////////////////// + + // Stone age -- diluted pool, max 10K + + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotSteel").get(0), + 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotSteel").get(1), + 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotSteel").get(2), + 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotSteel").get(3), + 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotThaumium").get(0), + 1500, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), + OreDictionary.getOres("ingotThaumium").get(1), + 1500, + 0x25d6b7)); + + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockSteel").get(0), + 9 * 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockSteel").get(1), + 9 * 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockSteel").get(2), + 9 * 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockSteel").get(3), + 9 * 3000, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockThaumium").get(0), + 9 * 1500, + 0x25d6b7)); + manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), + OreDictionary.getOres("blockThaumium").get(1), + 9 * 1500, + 0x25d6b7)); + + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + new ItemStack(Items.gunpowder), + 1000, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + new ItemStack(Items.redstone), + 1000, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + new ItemStack(Items.glowstone_dust), + 750, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + new ItemStack(Items.sugar), + 2000, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + OreDictionary.getOres("dustThaumium").get(0), + 250, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + OreDictionary.getOres("dustVinteum").get(0), + 150, + 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + OreDictionary.getOres("dustDraconium").get(0), + 50, + 0x25d6b7)); + for (int i = 0; i < 16; i++) manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), + new ItemStack(ModItems.dye, 1, i), + 1500, + 0x25d6b7)); + + // only the exquisite diamond is good enough for a diluted pool + + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), + new ItemStack((Item) Item.itemRegistry.getObject("miscutils:IndustrialDiamondExquisite")), + 10000 * 1, + 0x25d6b7)); + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), + OreDictionary.getOres("gemExquisiteDiamond").get(0), + 10000 * 1, + 0x25d6b7)); + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), + OreDictionary.getOres("gemFlawlessDiamond").get(0), + 10000 * 2, + 0x25d6b7)); + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), + OreDictionary.getOres("gemDiamond").get(0), + 10000 * 2, + 0x25d6b7)); + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), + new ItemStack(Items.diamond), + 10000 * 4, + 0x25d6b7)); + manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.storage, 1, STORAGE_META_DIAMONDBLOCK), + new ItemStack(Blocks.diamond_block), + 10000 * 4 * 9, + 0x25d6b7)); + + grassSeedsRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_GRASS), + new ItemStack(Blocks.tallgrass, 1, 1), + 2500, + 0x25d6b7); + podzolSeedsRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_PODZOL), + new ItemStack(Blocks.deadbush), + 2500, + 0x25d6b7); + mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), + new ItemStack(ModBlocks.mushroom, 1, Short.MAX_VALUE), + 6500, + 0x25d6b7)); + + mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), + new ItemStack(Blocks.red_mushroom), + 6500, + 0x25d6b7)); + mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), + new ItemStack(Blocks.brown_mushroom), + 6500, + 0x25d6b7)); + mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), + new ItemStack((Item) Item.itemRegistry.getObject("BiomesOPlenty:mushrooms"), 1, Short.MAX_VALUE), + 6500, + 0x25d6b7)); + mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), + new ItemStack((Item) Item.itemRegistry.getObject("harvestcraft:whitemushroomItem")), + 6500, + 0x25d6b7)); + + manaQuartzRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.quartz, 1, QUARTZ_META_MANA), + new ItemStack(Items.quartz), + 1000, + 0x25d6b7); + + managlassRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.manaGlass), + new ItemStack((Item) Item.itemRegistry.getObject("minecraft:stained_glass"), 1, Short.MAX_VALUE), + 250, + 0x25d6b7); + managlassRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.manaGlass), + new ItemStack(Blocks.glass), + 250, + 0x25d6b7); + manaStringRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, 16), + new ItemStack(Items.string), + 5000, + 0x25d6b7); + + manaBottleRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaBottle), + new ItemStack(Items.glass_bottle), + 10000, + 0x25d6b7); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // MV -- regular pool, max 1M + manaPearlRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_PEARL), + new ItemStack(Items.ender_pearl), + 10000 * 3 / 2, + 0x25d6b7); + + pistonRelayRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.pistonRelay), + new ItemStack(Blocks.piston), + 15000, + 0x25d6b7); + manaCookieRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaCookie), + new ItemStack(Items.cookie), + 20000, + 0x25d6b7); + + tinyPotatoRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModBlocks.tinyPotato), + new ItemStack(Items.potato), + 31337, + 0x25d6b7); + + // Manaweave Cloth Recipe + manaweaveClothRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_CLOTH), + OreDictionary.getOres("materialCloth").get(0), + 15000, + 0x25d6b7); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + wandCapRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCaps"), 1, 3), + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCaps"), 1, 4), + 200, + 0x25d6b7); + + wandCoresRecipes = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCores"), 1, 11), + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCores"), 1, 12), + 2000, + 0x25d6b7); + + wandCoresRecipes = AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCores"), 1, 7), + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCores"), 1, 8), + 2000, + 0x25d6b7); + + // Bee1Recipe = AdvancedBotanyAPI.registerFountainManaRecipe( + // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotBotanic")), + // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotRooted")), + // 450000, + // 0x25d6b7); + // Alchemy crafting + // Bee2Recipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotVazbee")), + // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotFloral")), + // 450000, + // 0x25d6b7); + + leatherRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.leather), + new ItemStack(Items.rotten_flesh), + 600, + 0x25d6b7); + + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log, 1, 0), + new ItemStack(Blocks.log2, 1, 1), + 40, + 0x25d6b7)); + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log, 1, 1), + new ItemStack(Blocks.log, 1, 0), + 40, + 0x25d6b7)); + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log, 1, 2), + new ItemStack(Blocks.log, 1, 1), + 40, + 0x25d6b7)); + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log, 1, 3), + new ItemStack(Blocks.log, 1, 2), + 40, + 0x25d6b7)); + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log2, 1, 0), + new ItemStack(Blocks.log, 1, 3), + 40, + 0x25d6b7)); + woodRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.log2, 1, 1), + new ItemStack(Blocks.log2, 1, 0), + 40, + 0x25d6b7)); + + for (int i = 0; i < 6; i++) { + saplingRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.sapling, 1, i == 5 ? 0 : i + 1), + new ItemStack(Blocks.sapling, 1, i), + 120, + 0x25d6b7)); + } + + glowstoneDustRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.glowstone_dust, 4), + new ItemStack(Blocks.glowstone), + 25, + 0x25d6b7); + + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.quartz, 4), + new ItemStack(Blocks.quartz_block, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 0), + new ItemStack(ModFluffBlocks.darkQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 1), + new ItemStack(ModFluffBlocks.manaQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 2), + new ItemStack(ModFluffBlocks.blazeQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 3), + new ItemStack(ModFluffBlocks.lavenderQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 4), + new ItemStack(ModFluffBlocks.redQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + quartzRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.quartz, 4, 5), + new ItemStack(ModFluffBlocks.elfQuartz, 1, Short.MAX_VALUE), + 25, + 0x25d6b7)); + + chiseledBrickRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.stonebrick, 1, 3), + new ItemStack(Blocks.stonebrick), + 150, + 0x25d6b7); + iceRecipe = AdvancedBotanyAPI + .registerFountainAlchemyRecipe(new ItemStack(Blocks.ice), new ItemStack(Blocks.snow), 2250, 0x25d6b7); + + swampFolliageRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.waterlily), + new ItemStack(Blocks.vine), + 320, + 0x25d6b7)); + swampFolliageRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.vine), + new ItemStack(Blocks.waterlily), + 320, + 0x25d6b7)); + + for (int i = 0; i < 4; i++) { + fishRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.fish, 1, i == 3 ? 0 : i + 1), + new ItemStack(Items.fish, 1, i), + 200, + 0x25d6b7)); + } + + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.wheat_seeds), + new ItemStack(Items.dye, 1, 3), + 6000, + 0x25d6b7)); + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.potato), + new ItemStack(Items.wheat), + 6000, + 0x25d6b7)); + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.carrot), + new ItemStack(Items.potato), + 6000, + 0x25d6b7)); + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.melon_seeds), + new ItemStack(Items.carrot), + 6000, + 0x25d6b7)); + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.pumpkin_seeds), + new ItemStack(Items.melon_seeds), + 6000, + 0x25d6b7)); + cropRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.dye, 1, 3), + new ItemStack(Items.pumpkin_seeds), + 6000, + 0x25d6b7)); + + potatoRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.potato), + new ItemStack(Items.poisonous_potato), + 1200, + 0x25d6b7); + netherWartRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.nether_wart), + new ItemStack(Items.blaze_rod), + 4000, + 0x25d6b7); + + gunpowderAndFlintRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.flint), + new ItemStack(Items.gunpowder), + 200, + 0x25d6b7)); + gunpowderAndFlintRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.gunpowder), + new ItemStack(Items.flint), + 4000, + 0x25d6b7)); + + nameTagRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.name_tag), + new ItemStack(Items.writable_book), + 16000, + 0x25d6b7); + + for (int i = 0; i < 16; i++) { + stringRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.string, 3), + new ItemStack(Blocks.wool, 1, i), + 100, + 0x25d6b7)); + } + + slimeballCactusRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.slime_ball), + new ItemStack(Blocks.cactus), + 1200, + 0x25d6b7)); + slimeballCactusRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.cactus), + new ItemStack(Items.slime_ball), + 1200, + 0x25d6b7)); + + enderPearlRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.ender_pearl), + new ItemStack(Items.ghast_tear), + 28000, + 0x25d6b7); + + redstoneToGlowstoneRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.redstone), + new ItemStack(Items.glowstone_dust), + 300, + 0x25d6b7)); + redstoneToGlowstoneRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.glowstone_dust), + new ItemStack(Items.redstone), + 300, + 0x25d6b7)); + + sandRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Block.getBlockFromName("sand")), + new ItemStack(Blocks.cobblestone), + 50, + 0x25d6b7); + redSandRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Block.getBlockFromName("sand"), 1, 1), + new ItemStack(Blocks.hardened_clay), + 50, + 0x25d6b7); + + clayBreakdownRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.clay_ball, 4), + new ItemStack(Blocks.clay), + 25, + 0x25d6b7)); + clayBreakdownRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Items.brick, 4), + new ItemStack(Blocks.brick_block), + 25, + 0x25d6b7)); + + coarseDirtRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.dirt, 1, 1), + new ItemStack(Blocks.dirt), + 120, + 0x25d6b7); + + prismarineRecipe = AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_PRISMARINE), + new ItemStack(Items.quartz), + 200, + 0x25d6b7); + + stoneRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModFluffBlocks.stone), + OreDictionary.getOres("stone").get(0), + 200, + 0x25d6b7)); + for (int i = 0; i < 4; i++) { + stoneRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ModFluffBlocks.stone, 1, i), + new ItemStack(ModFluffBlocks.stone, 1, i == 0 ? 3 : i - 1), + 200, + 0x25d6b7)); + } + + tallgrassRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.deadbush), + new ItemStack(Blocks.tallgrass, 1, 2), + 500, + 0x25d6b7)); + tallgrassRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.tallgrass, 1, 1), + new ItemStack(Blocks.deadbush), + 500, + 0x25d6b7)); + tallgrassRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.tallgrass, 1, 2), + new ItemStack(Blocks.tallgrass, 1, 1), + 500, + 0x25d6b7)); + + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower), + new ItemStack(Blocks.yellow_flower), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 1), + new ItemStack(Blocks.red_flower), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 2), + new ItemStack(Blocks.red_flower, 1, 1), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 3), + new ItemStack(Blocks.red_flower, 1, 2), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 4), + new ItemStack(Blocks.red_flower, 1, 3), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 5), + new ItemStack(Blocks.red_flower, 1, 4), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 6), + new ItemStack(Blocks.red_flower, 1, 5), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 7), + new ItemStack(Blocks.red_flower, 1, 6), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.red_flower, 1, 8), + new ItemStack(Blocks.red_flower, 1, 7), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.double_plant), + new ItemStack(Blocks.red_flower, 1, 8), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.double_plant, 1, 1), + new ItemStack(Blocks.double_plant), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.double_plant, 1, 4), + new ItemStack(Blocks.double_plant, 1, 1), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.double_plant, 1, 5), + new ItemStack(Blocks.double_plant, 1, 4), + 400, + 0x25d6b7)); + flowersRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(Blocks.yellow_flower), + new ItemStack(Blocks.double_plant, 1, 5), + 400, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("solegnoliaChibi"), + ItemBlockSpecialFlower.ofType("solegnolia"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("bubbellChibi"), + ItemBlockSpecialFlower.ofType("bubbell"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("marimorphosisChibi"), + ItemBlockSpecialFlower.ofType("marimorphosis"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("rannuncarpusChibi"), + ItemBlockSpecialFlower.ofType("rannuncarpus"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("clayconiaChibi"), + ItemBlockSpecialFlower.ofType("clayconia"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("agricarnationChibi"), + ItemBlockSpecialFlower.ofType("agricarnation"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("hopperhockChibi"), + ItemBlockSpecialFlower.ofType("hopperhock"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("nightshadeDecor"), + ItemBlockSpecialFlower.ofType("nightshade"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("bellethornChibi"), + ItemBlockSpecialFlower.ofType("bellethorn"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("daybloomDecor"), + ItemBlockSpecialFlower.ofType("daybloom"), + 30, + 0x25d6b7)); + petiteRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + ItemBlockSpecialFlower.ofType("hydroangeasDecor"), + ItemBlockSpecialFlower.ofType("hydroangeas"), + 30, + 0x25d6b7)); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Conjuration catalyst + + redstoneRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Items.redstone, 2), + new ItemStack(Items.redstone), + 5000, + 0x25d6b7); + glowstoneRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Items.glowstone_dust, 2), + new ItemStack(Items.glowstone_dust), + 5000, + 0x25d6b7); + quartzRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Items.quartz, 2), + new ItemStack(Items.quartz), + 7500, + 0x25d6b7); + coalRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Items.coal, 2), + new ItemStack(Items.coal), + 7500, + 0x25d6b7); + snowballRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Items.snowball, 2), + new ItemStack(Items.snowball), + 200, + 0x25d6b7); + netherrackRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Blocks.netherrack, 2), + new ItemStack(Blocks.netherrack), + 200, + 0x25d6b7); + soulSandRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Blocks.soul_sand, 2), + new ItemStack(Blocks.soul_sand), + 4500, + 0x25d6b7); + gravelRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Block.getBlockFromName("gravel"), 2), + new ItemStack(Block.getBlockFromName("gravel")), + 720, + 0x25d6b7); + + for (int i = 0; i < 4; i++) leavesRecipes = (AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Blocks.leaves, 2, i), + new ItemStack(Blocks.leaves, 1, i), + 2000, + 0x25d6b7)); + for (int i = 0; i < 2; i++) leavesRecipes = (AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Blocks.leaves2, 2, i), + new ItemStack(Blocks.leaves2, 1, i), + 2000, + 0x25d6b7)); + + grassRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( + new ItemStack(Blocks.tallgrass, 2, 1), + new ItemStack(Blocks.tallgrass, 1, 1), + 2000, + 0x25d6b7); + ///////////////////////////////////////////////////////////////////////////////////////// Shaped Recipes + PrimalRecipe = BotaniaAPI.registerPetalRecipe( + ItemBlockSpecialFlower.ofType("daybloomPrime"), + ItemBlockSpecialFlower.ofType("daybloomDecor"), + new ItemStack(ModItems.overgrowthSeed), + new ItemStack(ItemListAB.itemManaFlower), + new ItemStack(ModItems.petal, 1, 1), + new ItemStack(ModItems.petal, 1, 4), + new ItemStack(ModItems.petal, 1, 3)); + + PrimalRecipe = BotaniaAPI.registerPetalRecipe( + ItemBlockSpecialFlower.ofType("nightshadePrime"), + ItemBlockSpecialFlower.ofType("nightshadeDecor"), + new ItemStack(ModItems.overgrowthSeed), + new ItemStack(ItemListAB.itemManaFlower), + new ItemStack(ModItems.petal, 1, 10), + new ItemStack(ModItems.petal, 1, 7), + new ItemStack(ModItems.petal, 1, 15) + ); // Ancient alphirine recipe ancientAlphirine = new BLexiconEntry("ancientAlphirine", categoryForgotten); alphirineRecipe = BotaniaAPI.registerPetalRecipe( ItemBlockSpecialFlower.ofType("ancientAlphirine"), - new ItemStack(ModItems.manaResource, 1, 5), - new ItemStack(ModItems.manaResource, 1, 5), - new ItemStack(ModItems.manaResource, 1, 5), - new ItemStack(ModItems.manaResource, 1, 5), + new ItemStack(ModBlocks.storage, 1, 1), + new ItemStack(ModItems.quartz, 1, 2), + new ItemStack(ModItems.quartz, 1, 0), + new ItemStack(ModItems.quartz, 1, 3), + new ItemStack(ModItems.quartz, 1, 1), + new ItemStack(ModItems.quartz, 1, 4), + new ItemStack(ModItems.quartz, 1, 6), + new ItemStack(ModItems.quartz, 1, 5), + new ItemStack(ModBlocks.storage, 1, 1), new ItemStack(ModItems.rune, 1, 8), new ItemStack(ModItems.rune, 1, 4), new ItemStack(ModItems.rune, 1, 5), @@ -404,6 +1240,23 @@ public static void setupCrafting() { // Advanced mana containers recipe + GameRegistry.addRecipe( + new ShapedOreRecipe( + new ItemStack(BlockListAB.blockManaContainer, 1, 1), + "M5M", + "LPL", + "MAM", + 'M', + new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCaps"), 1, 3), + '5', + new ItemStack(ModItems.rune, 1, 15), + 'L', + new ItemStack(ModBlocks.pool, 1, 2), + 'P', + new ItemStack(ModBlocks.pylon), + 'A', + new ItemStack(ItemListAB.itemAntigravityCharm))); + GameRegistry.addRecipe( new ShapedOreRecipe( new ItemStack(BlockListAB.blockManaContainer), @@ -745,6 +1598,65 @@ public static void setupCrafting() { hornPlenty = new RLexiconEntry("hornPlenty", BotaniaAPI.categoryAlfhomancy, AchievementRegister.hornPlenty); hornPlenty.setLexiconPages(new LexiconPage[] { new PageText("0") }); + GameRegistry.addRecipe( + new ShapedOreRecipe( + new ItemStack(ItemListAB.itemAdvancedSpark), + "PDP", + "PSP", + "PLP", + 'D', + new ItemStack(ModItems.sparkUpgrade, 1, 1), + 'S', + new ItemStack(ModItems.spark), + 'L', + new ItemStack(BlockListAB.blockLebethron, 1, 3), + 'P', + "plateTerrasteel")); + + GameRegistry.addRecipe( + new ShapedOreRecipe( + new ItemStack(BlockListAB.blockEngineerHopper), + "DEO", + "SRS", + "BHB", + 'E', + "pipeLargeElectrum", + 'D', + new ItemStack(Blocks.dispenser), + 'O', + new ItemStack(Blocks.dropper), + 'S', + "springRoseGold", + 'R', + new ItemStack(ModItems.rainbowRod), + 'B', + new ItemStack(ModBlocks.bifrostPerm), + 'H', + new ItemStack(Blocks.hopper) + + )); + + GameRegistry.addRecipe( + new ShapedOreRecipe( + new ItemStack(ItemListAB.itemABResource, 1, 3), + "BLB", + "EAN", + "BMB", + 'B', + new ItemStack(ModBlocks.bifrostPerm), + 'L', + new ItemStack(BlockListAB.blockLebethron, 1, 3), + 'E', + new ItemStack(Blocks.end_stone), + 'N', + new ItemStack(Blocks.netherrack), + 'A', + new ItemStack(ModItems.manaResource, 1, 15), + 'M', + new ItemStack(ModBlocks.storage, 1, 2) + + )); + // Rod of sprawl recipe GameRegistry.addRecipe( @@ -874,8 +1786,7 @@ public static void setupCrafting() { .add(Aspect.MAGIC, 32).add(Aspect.ELDRITCH, 32).add(Aspect.BEAST, 16).add(Aspect.HUNGER, 16), new ItemStack(ItemListAB.itemAquaSword), new ItemStack[] { new ItemStack(ModItems.rainbowRod), new ItemStack(ItemListAB.itemABResource, 1, 0), - new ItemStack( - (Item) Item.itemRegistry.getObject("dreamcraft:item.MysteriousCrystalGemFlawless")), + OreDictionary.getOres("gemExquisiteManaDiamond").get(0), new ItemStack(ItemListAB.itemABResource, 1, 0), new ItemStack(ItemListAB.itemNebulaRod), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ModBlocks.livingwood, 1, 5), @@ -883,7 +1794,7 @@ public static void setupCrafting() { new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ItemListAB.itemNebulaRod), new ItemStack(ItemListAB.itemABResource, 1, 0), - OreDictionary.getOres("gemFlawlessAmethyst").get(0), + OreDictionary.getOres("gemExquisiteAmethyst").get(0), new ItemStack(ItemListAB.itemABResource, 1, 0) }); Forge = ThaumcraftApi.addInfusionCraftingRecipe( @@ -1011,6 +1922,58 @@ public static void setupCrafting() { }); + FountainManaB = ThaumcraftApi.addInfusionCraftingRecipe( + "FountainMana", + + new ItemStack(BlockListAB.blockABFountain), + 12, + new AspectList().add(Aspect.MAGIC, 180).add(Aspect.WATER, 100).add(Aspect.EARTH, 100) + .add(Aspect.CRYSTAL, 80).add(Aspect.ORDER, 40).add(Aspect.EXCHANGE, 20), + new ItemStack(ModBlocks.pool), + new ItemStack[] { new ItemStack(BlockListAB.blockManaCharger), new ItemStack(ModBlocks.pylon), + new ItemStack(ModItems.lens, 1, 2), new ItemStack(ModBlocks.pool, 1, 2), + new ItemStack(ModBlocks.pump), new ItemStack(ModBlocks.pool, 1, 2), + new ItemStack(ModItems.lens, 1, 4), new ItemStack(ModItems.rune, 1, 8), + new ItemStack(BlockListAB.blockABPlate), new ItemStack(ModItems.rune, 1, 8), + new ItemStack(ModItems.lens, 1, 3), new ItemStack(ModBlocks.pool, 1, 2), + new ItemStack(ModBlocks.pump), new ItemStack(ModBlocks.pool, 1, 2), + new ItemStack(ModItems.lens, 1, 1), new ItemStack(ModBlocks.pylon), + + }); + + FountainAlchemyB = ThaumcraftApi.addInfusionCraftingRecipe( + "FountainAlchemy", + + new ItemStack(BlockListAB.blockABAlchemy), + 12, + new AspectList().add(Aspect.MAGIC, 180).add(Aspect.WATER, 100).add(Aspect.EARTH, 100) + .add(Aspect.VOID, 80).add(Aspect.ORDER, 40).add(Aspect.EXCHANGE, 20), + new ItemStack(BlockListAB.blockABFountain), + new ItemStack[] { new ItemStack(ModBlocks.alchemyCatalyst), new ItemStack(ModBlocks.livingwood, 1, 5), + new ItemStack(ModBlocks.livingwood, 1, 5), + OreDictionary.getOres("gemExquisiteManaDiamond").get(0), new ItemStack(ModBlocks.brewery), + OreDictionary.getOres("gemExquisiteManaDiamond").get(0), + new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ModBlocks.livingwood, 1, 5), + + }); + + FountainConjurationB = ThaumcraftApi.addInfusionCraftingRecipe( + "FountainConjuration", + + new ItemStack(BlockListAB.blockABConjuration), + 12, + new AspectList().add(Aspect.MAGIC, 380).add(Aspect.FIRE, 200).add(Aspect.EARTH, 127) + .add(Aspect.CRYSTAL, 80).add(Aspect.ORDER, 40).add(Aspect.EXCHANGE, 200), + new ItemStack(BlockListAB.blockABAlchemy), + new ItemStack[] { new ItemStack(ModBlocks.conjurationCatalyst), + new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), + OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.pylon, 1, 1), + OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), + + }); + } // Aspecolus recipe @@ -1201,6 +2164,19 @@ public static void setupResearch() { ResearchPage infNebulaLegs; ResearchPage infNebulaBoots; + ResearchItem FountainManaPage; + ResearchPage FountainManaPages; + ResearchPage FountainManaPages2; + ResearchPage infFountainManaPages; + + ResearchItem FountainAlchemyPage; + ResearchPage FountainAlchemyPages; + ResearchPage infFountainAlchemyPages; + + ResearchItem FountainConjurationPage; + ResearchPage FountainConjurationPages; + ResearchPage infFountainConjurationPages; + TerraHoePage = new ResearchItem( "TerraHoe", category, @@ -1295,6 +2271,46 @@ public static void setupResearch() { infNebulaLegs = new ResearchPage(NebulaLegs); infNebulaBoots = new ResearchPage(NebulaBoots); + FountainManaPage = new ResearchItem( + "FountainMana", + category, + new AspectList().add(Aspect.MAGIC, 18).add(Aspect.WATER, 10).add(Aspect.EARTH, 10) + .add(Aspect.CRYSTAL, 8).add(Aspect.ORDER, 4).add(Aspect.EXCHANGE, 2), + 8, + 9, + 0, + new ItemStack(BlockListAB.blockABFountain)); + + FountainManaPages = new ResearchPage("FountainManaPages"); + FountainManaPages2 = new ResearchPage("FountainManaPages2"); + infFountainManaPages = new ResearchPage(FountainManaB); + + FountainAlchemyPage = new ResearchItem( + "FountainAlchemy", + category, + new AspectList().add(Aspect.MAGIC, 18).add(Aspect.WATER, 10).add(Aspect.EARTH, 10).add(Aspect.VOID, 8) + .add(Aspect.ORDER, 4).add(Aspect.EXCHANGE, 2), + 8, + 10, + 0, + new ItemStack(BlockListAB.blockABAlchemy)); + + FountainAlchemyPages = new ResearchPage("FountainAlchemyPages"); + infFountainAlchemyPages = new ResearchPage(FountainAlchemyB); + + FountainConjurationPage = new ResearchItem( + "FountainConjuration", + category, + new AspectList().add(Aspect.MAGIC, 18).add(Aspect.FIRE, 10).add(Aspect.EARTH, 10).add(Aspect.CRYSTAL, 8) + .add(Aspect.ORDER, 4).add(Aspect.EXCHANGE, 2), + 8, + 11, + 0, + new ItemStack(BlockListAB.blockABConjuration)); + + FountainConjurationPages = new ResearchPage("FountainConjurationPages"); + infFountainConjurationPages = new ResearchPage(FountainConjurationB); + TerraHoePage.setPages(TerraHoePages, infTerraHoePages); AquaSwordPage.setPages(AquaSwordPages, infAquaSwordPages); ManaChargerPage.setPages(ManaChargerPages, infManaChargerPages); @@ -1302,6 +2318,9 @@ public static void setupResearch() { ForgePage.setPages(ForgePages, infForgePages); DestroyerPage.setPages(DestroyerPages, infDestroyerPages); NebulaPage.setPages(NebulaPages, infNebulaHelm, infNebulaChest, infNebulaLegs, infNebulaBoots); + FountainManaPage.setPages(FountainManaPages, FountainManaPages2, infFountainManaPages); + FountainAlchemyPage.setPages(FountainAlchemyPages, infFountainAlchemyPages); + FountainConjurationPage.setPages(FountainConjurationPages, infFountainConjurationPages); TerraHoePage.setParents("ELEMENTALHOE"); AquaSwordPage.setParents("Nebula"); @@ -1310,8 +2329,12 @@ public static void setupResearch() { ForgePage.setParents("ManaCharger"); DestroyerPage.setParents("TerraHoe", "Nebula"); NebulaPage.setParents("Forge"); + FountainManaPage.setParents("Nebula"); + FountainAlchemyPage.setParents("FountainMana"); + FountainConjurationPage.setParents("FountainAlchemy"); ThaumcraftApi.addWarpToResearch("Nebula", 8); + ThaumcraftApi.addWarpToResearch("FountainMana", 8); ResearchCategories.addResearch(TerraHoePage); ResearchCategories.addResearch(AquaSwordPage); @@ -1320,6 +2343,9 @@ public static void setupResearch() { ResearchCategories.addResearch(ForgePage); ResearchCategories.addResearch(DestroyerPage); ResearchCategories.addResearch(NebulaPage); + ResearchCategories.addResearch(FountainManaPage); + ResearchCategories.addResearch(FountainAlchemyPage); + ResearchCategories.addResearch(FountainConjurationPage); } public static ResearchPage getResearchPage(String ident) { diff --git a/src/main/java/ab/nei/IMCForNEI.java b/src/main/java/ab/nei/IMCForNEI.java index 016db2f..4285968 100644 --- a/src/main/java/ab/nei/IMCForNEI.java +++ b/src/main/java/ab/nei/IMCForNEI.java @@ -13,6 +13,15 @@ public static void IMCSender() { sendHandler("ab.client.nei.RecipeHandlerAdvancedPlate", "AdvancedBotany:blockABPlate"); sendCatalyst("ab.client.nei.RecipeHandlerAdvancedPlate", "AdvancedBotany:blockABPlate"); + sendHandler("ab.client.nei.RecipeHandlerFountainMana", "AdvancedBotany:blockABFountain"); + sendCatalyst("ab.client.nei.RecipeHandlerFountainMana", "AdvancedBotany:blockABFountain"); + + sendHandler("ab.client.nei.RecipeHandlerFountainAlchemy", "AdvancedBotany:blockABAlchemy"); + sendCatalyst("ab.client.nei.RecipeHandlerFountainAlchemy", "AdvancedBotany:blockABAlchemy"); + + sendHandler("ab.client.nei.RecipeHandlerFountainConjuration", "AdvancedBotany:blockABConjuration"); + sendCatalyst("ab.client.nei.RecipeHandlerFountainConjuration", "AdvancedBotany:blockABConjuration"); + } private static void sendHandler(String aName, String aBlock) { diff --git a/src/main/java/ab/utils/Compats.java b/src/main/java/ab/utils/Compats.java new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/assets/ab/lang/en_US.lang b/src/main/resources/assets/ab/lang/en_US.lang index e92c338..1b9bd9c 100644 --- a/src/main/resources/assets/ab/lang/en_US.lang +++ b/src/main/resources/assets/ab/lang/en_US.lang @@ -13,6 +13,9 @@ ab.flower.pureGladiolus.name=Pure Gladiolus ab.flower.ardentAzarcissus.name=Ardent Azarcissus tile.advancedSpreader.name=Natural Mana Spreader tile.ABPlate.name=Forge of Nidavellir +tile.ABFountain.name=Fountain of Mana +tile.ABAlchemy.name=Fountain of Alchemy +tile.ABConjuration.name=Fountain of Conjuration tile.lebethronWood.0.name=Lebethron Wood tile.lebethronWood.1.name=Lebethron Wood Planks tile.lebethronWood.2.name=Mossy Lebethron Wood Planks @@ -94,6 +97,9 @@ ab.nebulaHelm.mask=A natural look is included botania.category.forgotten=Connecting with the past ab.nei.alphirine=Ancient Alphirine ab.nei.advancedPlate=Forge of Nidavellir +ab.nei.FountainMana=Fountain of Mana +ab.nei.FountainAlchemy=Fountain of Alchemy +ab.nei.FountainConjuration=Fountain of Conjuration ab.manaCrystalCube.hud=Amount of mana in the network ab.manaCharger.wandHud=Mana Charger ab.manaContainer.0.hud=Mana Container @@ -131,6 +137,9 @@ tc.research_name.MithrillSword=Blade of Space tc.research_name.Forge=Forge of Nidavellir tc.research_name.Destroyer=Material Destroyer tc.research_name.Nebula=Nebula Fragments +tc.research_name.FountainMana= Fountain of Mana +tc.research_name.FountainAlchemy= Fountain of Alchemy +tc.research_name.FountainConjuration= Fountain of Conjuration TerraHoePages=The standard way of harvesting is getting boring over time. Terrahoe, or rather its unique ability to transform the soil into a more fertile and automated soil, can help with this very problem.
The harvest in the new soil gathers itself after a certain period of time! DestroyerPages=A harsh tool based on a global catastrophe in the past.
He is perfectly capable of breaking any block almost instantly. His speed is so high that it was necessary to create a *Fuse* in him - that is, to turn him off/on. @@ -139,8 +148,8 @@ AquaSwordPages=A mystical melee weapon imbued with the powers of the seas!
An ForgePages=A really powerful Dwarf invention for fusing different materials into one whole, the main thing is to know the proportions!
This forge was given to the Elves, that is, it came to our land at the time of "Destruction," but... Not for long - it was soon destroyed. ManaChargerPages=The mana charger is a device that allows you to charge up to 4 portable mana sources at once, as well as to discharge one of them.
To start the charger, you must bind a mana source to it, such as a Mana Pool or Mana Container NebulaPages=A nebula fragment is a material filled with part of the power of space. It allows you to create instruments and weapons that are unearthly in power. - - +FountainManaPages=You know, you always felt throwing things directly into the pool felt sort of... primitive?

You always felt like surely there had to be a better way to automate these resources, despite the reassurances of the elder druids.

You remembered your studies into thaumaturgy, those mechanic crucibles of essentia and fire, the knowledge of the thaumaturgists, and attempted to apply those brutal mechanisms to your mana pool... to no avail... +FountainManaPages2=But within your failures, you realized something, some miniscule cosmic truth to the matter: of course it wouldn't work. They're missing that intrinsic core component to the ways of the wild.

They have no connections to the natural magicks! Their forges sow no seeds in the ground! Their crucibles fail to nurture the very earth in which they walk! In their hubris they forgot to just take a moment, relax, calm down, and embrace those very magicks that bear them life!

You can't force that! You have to carefully coax it out! Nurture it! Tend to it's delicate seedlings and gently watch it blossom! //ACHIEVEMENT From 1fcd23e071d6c3b5eae62daedd1211e0f629619c Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 7 Jun 2023 22:34:04 +0200 Subject: [PATCH 04/16] Update RecipeListAB.java --- src/main/java/ab/common/lib/register/RecipeListAB.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index e6c65c4..832d25d 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -593,7 +593,7 @@ public static void setupCrafting() { new ItemStack((Item) Item.itemRegistry.getObject("ForbiddenMagic:WandCores"), 1, 8), 2000, 0x25d6b7); - + // Bee1Recipe = AdvancedBotanyAPI.registerFountainManaRecipe( // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotBotanic")), // new ItemStack((Item) Item.itemRegistry.getObject("magicbees.speciesBotRooted")), From 1ff8b93acc6462a10faf564423608e7320be9e97 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 7 Jun 2023 22:50:00 +0200 Subject: [PATCH 05/16] Delete OreDict.java --- src/main/java/ab/utils/OreDict.java | 44 ----------------------------- 1 file changed, 44 deletions(-) delete mode 100644 src/main/java/ab/utils/OreDict.java diff --git a/src/main/java/ab/utils/OreDict.java b/src/main/java/ab/utils/OreDict.java deleted file mode 100644 index c8bb008..0000000 --- a/src/main/java/ab/utils/OreDict.java +++ /dev/null @@ -1,44 +0,0 @@ -package ab.utils; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import vazkii.botania.common.lib.LibOreDict; - -public class OreDict { - - public static final String[] FLOWER_INGREDIENT = new String[] { "flowerIngredientWhite", "flowerIngredientOrange", - "flowerIngredientMagenta", "flowerIngredientLightBlue", "flowerIngredientYellow", "flowerIngredientLime", - "flowerIngredientPink", "flowerIngredientGray", "flowerIngredientLightGray", "flowerIngredientCyan", - "flowerIngredientPurple", "flowerIngredientBlue", "flowerIngredientBrown", "flowerIngredientGreen", - "flowerIngredientRed", "flowerIngredientBlack" }; - - public static final String[] FLOWER_VANILLA = new String[] { "flowerWhite", "flowerOrange", "flowerMagenta", - "flowerLightBlue", "flowerYellow", "flowerLime", "flowerPink", "flowerGray", "flowerLightGray", - "flowerCyan", "flowerPurple", "flowerBlue", "flowerBrown", "flowerGreen", "flowerRed", "flowerBlack" }; - - public static final String GAIA_SPIRIT = LibOreDict.LIFE_ESSENCE; - - public static final String MUSHROOM = "listMagicMushroom"; - - public static final String FLOWER_NONMAGICAL = "flowerNonmagical"; - - // GT Material references - public static final String MANA_STEEL_PLATE = "plateManasteel"; - public static final String DENSE_MANA_STEEL_PLATE = "plateDenseManasteel"; - public static final String TERRA_STEEL_PLATE = "plateTerrasteel"; - public static final String DENSE_TERRA_STEEL_PLATE = "plateDenseTerrasteel"; - public static final String ELEMENTIUM_PLATE = "plateElvenElementium"; - public static final String DENSE_ELEMENTIUM_STEEL_PLATE = "plateDenseElvenElementium"; - - public static final ItemStack preference(String... oredictKeys) { - for (String key : oredictKeys) { - List ores = OreDictionary.getOres(key); - if (ores != null && ores.size() > 0) return ores.get(0); - } - throw new IllegalArgumentException("Can't find any oreDictionary entry among " + Arrays.toString(oredictKeys)); - } -} From a7d91e67c87cf7eccb8731f369e43fbdee7e87a9 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 7 Jun 2023 23:16:56 +0200 Subject: [PATCH 06/16] fix, maybe --- src/main/java/ab/common/lib/register/RecipeListAB.java | 6 +++--- src/main/java/ab/utils/ModHelperManager.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 832d25d..1dc7958 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -101,7 +101,7 @@ public class RecipeListAB implements IModHelper { public static RecipeFountainMana manaweaveClothRecipe; public static RecipeFountainMana wandCoresRecipes; public static RecipeFountainMana wandCapRecipe; - public static RecipeFountainMana Bee1Recipe; + // public static RecipeFountainMana Bee1Recipe; public static RecipeFountainAlchemy leatherRecipe; public static RecipeFountainAlchemy woodRecipes; @@ -130,7 +130,7 @@ public class RecipeListAB implements IModHelper { public static RecipeFountainAlchemy tallgrassRecipes; public static RecipeFountainAlchemy flowersRecipes; public static RecipeFountainAlchemy petiteRecipes; - public static RecipeFountainAlchemy Bee2Recipe; + // public static RecipeFountainAlchemy Bee2Recipe; public static RecipeFountainConjuration redstoneRecipe; public static RecipeFountainConjuration glowstoneRecipe; @@ -463,7 +463,7 @@ public static void setupCrafting() { 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), - OreDictionary.getOres("gemDiamond").get(0), + OreDictionary.getOres("craftingIndustrialDiamond").get(0), 10000 * 2, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( diff --git a/src/main/java/ab/utils/ModHelperManager.java b/src/main/java/ab/utils/ModHelperManager.java index f67f3a3..b4c0199 100644 --- a/src/main/java/ab/utils/ModHelperManager.java +++ b/src/main/java/ab/utils/ModHelperManager.java @@ -13,7 +13,7 @@ public static void preInit() { } public static void init() { - // helper.init(); + helper.init(); } public static void postInit() { From c455505218301d48ce2358c31c1cef15faf9ea3f Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Wed, 7 Jun 2023 23:36:51 +0200 Subject: [PATCH 07/16] Update RecipeListAB.java --- .../ab/common/lib/register/RecipeListAB.java | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 1dc7958..8fdf89e 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -341,26 +341,6 @@ public static void setupCrafting() { // Stone age -- diluted pool, max 10K - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), - OreDictionary.getOres("ingotSteel").get(0), - 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), - OreDictionary.getOres("ingotSteel").get(1), - 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), - OreDictionary.getOres("ingotSteel").get(2), - 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), - OreDictionary.getOres("ingotSteel").get(3), - 3000, - 0x25d6b7)); manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANASTEEL), OreDictionary.getOres("ingotThaumium").get(0), @@ -372,26 +352,6 @@ public static void setupCrafting() { 1500, 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockSteel").get(0), - 9 * 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockSteel").get(1), - 9 * 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockSteel").get(2), - 9 * 3000, - 0x25d6b7)); - manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockSteel").get(3), - 9 * 3000, - 0x25d6b7)); manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), OreDictionary.getOres("blockThaumium").get(0), From 2436e15519a3aee28cfc030bca0f2e2b1692c744 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 00:05:54 +0200 Subject: [PATCH 08/16] Update RecipeListAB.java --- src/main/java/ab/common/lib/register/RecipeListAB.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 8fdf89e..a3ac09b 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -354,12 +354,12 @@ public static void setupCrafting() { manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockThaumium").get(0), + new ItemStack((Item) Item.itemRegistry.getObject("gregtech:gt.blockmetal7"), 1, 4), 9 * 1500, 0x25d6b7)); manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), - OreDictionary.getOres("blockThaumium").get(1), + new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 4), 9 * 1500, 0x25d6b7)); From 27f461a36342823a04aef697543140ef6a8a7283 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 00:11:33 +0200 Subject: [PATCH 09/16] Update RecipeListAB.java --- src/main/java/ab/common/lib/register/RecipeListAB.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index a3ac09b..d295344 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -531,7 +531,7 @@ public static void setupCrafting() { // Manaweave Cloth Recipe manaweaveClothRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_CLOTH), - OreDictionary.getOres("materialCloth").get(0), + new ItemStack((Item) Item.itemRegistry.getObject("harvestcraft:wovencottonItem")), 15000, 0x25d6b7); From 32097791f39c088a9f2080845ae06b65cf8096bc Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 00:34:10 +0200 Subject: [PATCH 10/16] Update RecipeListAB.java --- .../java/ab/common/lib/register/RecipeListAB.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index d295344..8a717fd 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -83,6 +83,7 @@ public class RecipeListAB implements IModHelper { public static RecipeAdvancedPlate FlawlessDragonstoneRecipe; public static RecipeAdvancedPlate ExquisiteDragonstoneRecipe; public static RecipeAdvancedPlate EnderAirRecipe; + public static RecipeAdvancedPlate GrassRecipe; public static RecipeFountainMana manasteelRecipes; public static RecipeFountainMana manaPowderRecipes; @@ -337,6 +338,13 @@ public static void setupCrafting() { new ItemStack((Item) Item.itemRegistry.getObject("ThaumicTinkerer:fireAir")), 500, 0x29de20); + GrassRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( + new ItemStack(Blocks.tallgrass, 8, 1), + new ItemStack(Items.wheat), + new ItemStack(Items.wheat_seeds), + new ItemStack(ModItems.fertilizer), + 500, + 0x29de20); //////////////////////////////////////////////////////////////////////////////////////// // Stone age -- diluted pool, max 10K @@ -811,7 +819,7 @@ public static void setupCrafting() { stoneRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( new ItemStack(ModFluffBlocks.stone), - OreDictionary.getOres("stone").get(0), + new ItemStack(Blocks.stone), 200, 0x25d6b7)); for (int i = 0; i < 4; i++) { @@ -1003,8 +1011,8 @@ public static void setupCrafting() { 4500, 0x25d6b7); gravelRecipe = AdvancedBotanyAPI.registerFountainConjurationRecipe( - new ItemStack(Block.getBlockFromName("gravel"), 2), - new ItemStack(Block.getBlockFromName("gravel")), + new ItemStack(Blocks.gravel, 2, 0), + new ItemStack(Blocks.gravel), 720, 0x25d6b7); From 5c3821b9779afac2bac0fde206906fa04e89636f Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 01:45:57 +0200 Subject: [PATCH 11/16] Change nebula recipe Changed the rod ( non stackeable) for shimmerwood ( stackeable) making eassyer the automation of it, and buffing the cost since it will not cost a rod per craft --- src/main/java/ab/common/lib/register/RecipeListAB.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 8a717fd..4ff8f45 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -291,7 +291,7 @@ public static void setupCrafting() { 0x6bc9ec); nebulaRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( new ItemStack(ItemListAB.itemABResource, 1, 5), - new ItemStack(ModItems.rainbowRod), + new ItemStack(ModBlocks.shimmerwoodPlanks), OreDictionary.getOres("blockBotaniaDragonstone").get(0), new ItemStack(BlockListAB.blockABStorage, 1, 0), 25000000, From 3b39d1c6a1e28f28bcd69de19fb7687e1292ec8e Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 16:01:32 +0200 Subject: [PATCH 12/16] Upgraded lang and temp textures -Upgraded lang for researches -Color changed the temporal textures so if I or anybody is testing, can difference the blocks --- .../render/tile/RenderTileFountainAlchemy.java | 2 +- .../tile/RenderTileFountainConjuration.java | 2 +- .../render/tile/RenderTileFountainMana.java | 2 +- src/main/resources/assets/ab/lang/en_US.lang | 3 ++- .../assets/ab/textures/model/FountainAlchemy.png | Bin 0 -> 5067 bytes .../ab/textures/model/FountainConjuration.png | Bin 0 -> 5215 bytes .../assets/ab/textures/model/FountainMana.png | Bin 0 -> 5443 bytes 7 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/ab/textures/model/FountainAlchemy.png create mode 100644 src/main/resources/assets/ab/textures/model/FountainConjuration.png create mode 100644 src/main/resources/assets/ab/textures/model/FountainMana.png diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java b/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java index fd556aa..db8bd69 100644 --- a/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java +++ b/src/main/java/ab/client/render/tile/RenderTileFountainAlchemy.java @@ -23,7 +23,7 @@ public class RenderTileFountainAlchemy extends TileEntitySpecialRenderer { private List entityList = null; - private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/FountainAlchemy.png"); private static final ModelFountainAlchemy model = new ModelFountainAlchemy(); public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java b/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java index e4a71a1..d32267b 100644 --- a/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java +++ b/src/main/java/ab/client/render/tile/RenderTileFountainConjuration.java @@ -23,7 +23,7 @@ public class RenderTileFountainConjuration extends TileEntitySpecialRenderer { private List entityList = null; - private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/FountainConjuration.png"); private static final ModelFountainConjuration model = new ModelFountainConjuration(); public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { diff --git a/src/main/java/ab/client/render/tile/RenderTileFountainMana.java b/src/main/java/ab/client/render/tile/RenderTileFountainMana.java index c3a50ac..909dd6c 100644 --- a/src/main/java/ab/client/render/tile/RenderTileFountainMana.java +++ b/src/main/java/ab/client/render/tile/RenderTileFountainMana.java @@ -23,7 +23,7 @@ public class RenderTileFountainMana extends TileEntitySpecialRenderer { private List entityList = null; - private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/nidavellirForge.png"); + private static final ResourceLocation texture = new ResourceLocation("ab:textures/model/FountainMana.png"); private static final ModelFountainMana model = new ModelFountainMana(); public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { diff --git a/src/main/resources/assets/ab/lang/en_US.lang b/src/main/resources/assets/ab/lang/en_US.lang index 1b9bd9c..d62b8e9 100644 --- a/src/main/resources/assets/ab/lang/en_US.lang +++ b/src/main/resources/assets/ab/lang/en_US.lang @@ -150,7 +150,8 @@ ManaChargerPages=The mana charger is a device that allows you to charge up to 4 NebulaPages=A nebula fragment is a material filled with part of the power of space. It allows you to create instruments and weapons that are unearthly in power. FountainManaPages=You know, you always felt throwing things directly into the pool felt sort of... primitive?

You always felt like surely there had to be a better way to automate these resources, despite the reassurances of the elder druids.

You remembered your studies into thaumaturgy, those mechanic crucibles of essentia and fire, the knowledge of the thaumaturgists, and attempted to apply those brutal mechanisms to your mana pool... to no avail... FountainManaPages2=But within your failures, you realized something, some miniscule cosmic truth to the matter: of course it wouldn't work. They're missing that intrinsic core component to the ways of the wild.

They have no connections to the natural magicks! Their forges sow no seeds in the ground! Their crucibles fail to nurture the very earth in which they walk! In their hubris they forgot to just take a moment, relax, calm down, and embrace those very magicks that bear them life!

You can't force that! You have to carefully coax it out! Nurture it! Tend to it's delicate seedlings and gently watch it blossom! - +FountainAlchemyPages=The catalysts whisper to you, alchemy needs easier refinement, and you may have stumbled upon the perfect solution. +FountainConjurationPages=And if we take all this to an extreme and try to duplicate? We no longer have to waste our precious mana on infinite powders... //ACHIEVEMENT diff --git a/src/main/resources/assets/ab/textures/model/FountainAlchemy.png b/src/main/resources/assets/ab/textures/model/FountainAlchemy.png new file mode 100644 index 0000000000000000000000000000000000000000..28684a15786c8815301593fb70b4bef05818674a GIT binary patch literal 5067 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ab/textures/model/FountainMana.png b/src/main/resources/assets/ab/textures/model/FountainMana.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9ca7faf106ed332132413bb94fc578e517ff95 GIT binary patch literal 5443 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 literal 0 HcmV?d00001 From a3db17600c1239478636435f601a49b06820126d Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 16:59:46 +0200 Subject: [PATCH 13/16] Mithril changes - Added conversion recipe for gregtech mithril and ab one - Changed ingot with mithril plates - Now you dont need gaia for mithril tier! - Now you dont need gaia for some nebula recipes tier! --- .../ab/common/lib/register/RecipeListAB.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index 4ff8f45..d483327 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -131,6 +131,7 @@ public class RecipeListAB implements IModHelper { public static RecipeFountainAlchemy tallgrassRecipes; public static RecipeFountainAlchemy flowersRecipes; public static RecipeFountainAlchemy petiteRecipes; + public static RecipeFountainAlchemy conversionRecipes; // public static RecipeFountainAlchemy Bee2Recipe; public static RecipeFountainConjuration redstoneRecipe; @@ -972,6 +973,16 @@ public static void setupCrafting() { 30, 0x25d6b7)); + conversionRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + OreDictionary.getOres("ingotMithril").get(0), + new ItemStack(ItemListAB.itemABResource), + 25000, + 0x25d6b7)); + conversionRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( + new ItemStack(ItemListAB.itemABResource, 1, 1), + OreDictionary.getOres("ingotMithril").get(0), + 25000, + 0x25d6b7)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Conjuration catalyst @@ -1232,7 +1243,7 @@ public static void setupCrafting() { "LPL", "M3M", 'M', - new ItemStack(ItemListAB.itemABResource), + "plateMithril", 'G', new ItemStack(ModItems.rune, 1, 15), 'L', @@ -1271,7 +1282,7 @@ public static void setupCrafting() { "LPL", "M3M", 'M', - new ItemStack(ItemListAB.itemABResource), + "plateMithril", 'G', new ItemStack(ModItems.rune, 1, 15), 'L', @@ -1337,7 +1348,7 @@ public static void setupCrafting() { 'L', new ItemStack(ItemListAB.itemABResource, 1, 1), 'M', - new ItemStack(ItemListAB.itemABResource), + "plateMithril", 'R', new ItemStack(ModItems.manaRingGreater) From 6c6f30b1189f348a6be5b088780da2230669b9ef Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Thu, 8 Jun 2023 21:56:22 +0200 Subject: [PATCH 14/16] some fixes - delete compat file - fix mana recipes - add recipe for Lebethron blocks without chance --- .../ab/common/lib/register/RecipeListAB.java | 30 ++++++++++++------- src/main/java/ab/utils/Compats.java | 0 2 files changed, 19 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/ab/utils/Compats.java diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index d483327..d797061 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -84,6 +84,7 @@ public class RecipeListAB implements IModHelper { public static RecipeAdvancedPlate ExquisiteDragonstoneRecipe; public static RecipeAdvancedPlate EnderAirRecipe; public static RecipeAdvancedPlate GrassRecipe; + public static RecipeAdvancedPlate LebWoodRecipe; public static RecipeFountainMana manasteelRecipes; public static RecipeFountainMana manaPowderRecipes; @@ -292,7 +293,7 @@ public static void setupCrafting() { 0x6bc9ec); nebulaRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( new ItemStack(ItemListAB.itemABResource, 1, 5), - new ItemStack(ModBlocks.shimmerwoodPlanks), + new ItemStack(BlockListAB.blockLebethron, 1, 4), OreDictionary.getOres("blockBotaniaDragonstone").get(0), new ItemStack(BlockListAB.blockABStorage, 1, 0), 25000000, @@ -346,6 +347,13 @@ public static void setupCrafting() { new ItemStack(ModItems.fertilizer), 500, 0x29de20); + LebWoodRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( + new ItemStack(BlockListAB.blockLebethron), + new ItemStack(ModBlocks.shimmerrock), + new ItemStack(ModItems.keepIvy), + new ItemStack(ModBlocks.shimmerwoodPlanks), + 30000, + 0x29de20); //////////////////////////////////////////////////////////////////////////////////////// // Stone age -- diluted pool, max 10K @@ -364,12 +372,12 @@ public static void setupCrafting() { manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), new ItemStack((Item) Item.itemRegistry.getObject("gregtech:gt.blockmetal7"), 1, 4), - 9 * 1500, + 11500, 0x25d6b7)); manasteelRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_MANASTEELBLOCK), new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 4), - 9 * 1500, + 11500, 0x25d6b7)); manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( @@ -418,32 +426,32 @@ public static void setupCrafting() { manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), new ItemStack((Item) Item.itemRegistry.getObject("miscutils:IndustrialDiamondExquisite")), - 10000 * 1, + 10000, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), OreDictionary.getOres("gemExquisiteDiamond").get(0), - 10000 * 1, + 10000, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), OreDictionary.getOres("gemFlawlessDiamond").get(0), - 10000 * 2, + 20000, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), OreDictionary.getOres("craftingIndustrialDiamond").get(0), - 10000 * 2, + 20000, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), new ItemStack(Items.diamond), - 10000 * 4, + 40000, 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModBlocks.storage, 1, STORAGE_META_DIAMONDBLOCK), new ItemStack(Blocks.diamond_block), - 10000 * 4 * 9, + 360000, 0x25d6b7)); grassSeedsRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( @@ -517,7 +525,7 @@ public static void setupCrafting() { manaPearlRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_PEARL), new ItemStack(Items.ender_pearl), - 10000 * 3 / 2, + 15000, 0x25d6b7); pistonRelayRecipe = AdvancedBotanyAPI.registerFountainManaRecipe( @@ -1617,7 +1625,7 @@ public static void setupCrafting() { GameRegistry.addRecipe( new ShapedOreRecipe( - new ItemStack(ItemListAB.itemABResource, 1, 3), + new ItemStack(ItemListAB.itemABResource, 8, 3), "BLB", "EAN", "BMB", diff --git a/src/main/java/ab/utils/Compats.java b/src/main/java/ab/utils/Compats.java deleted file mode 100644 index e69de29..0000000 From 3afac35d8a64cb8e4d9bf70efcb42a5adf8d9e73 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Mon, 21 Oct 2024 16:24:14 +0200 Subject: [PATCH 15/16] first commit --- README.md | Bin 0 -> 56 bytes dependencies.gradle | 1 - .../ab/client/model/ModelFountainMana.java | 74 +++++++---- .../ab/common/lib/register/RecipeListAB.java | 125 +++++------------- .../assets/ab/textures/model/FountainMana.png | Bin 5443 -> 18975 bytes .../ab/textures/model/FountainMana1.png | Bin 0 -> 5443 bytes 6 files changed, 84 insertions(+), 116 deletions(-) create mode 100644 README.md create mode 100644 src/main/resources/assets/ab/textures/model/FountainMana1.png diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3267ef2a5e0a76898bfd108ce992e387b5036f39 GIT binary patch literal 56 zcmezWPnki1!I2?_p^PDsA&()MAr;7WV#sGG0rM*vbQyAiycC8^hBP1s$?`IAF#rH` Cn+r(* literal 0 HcmV?d00001 diff --git a/dependencies.gradle b/dependencies.gradle index 6ca945a..9cc700b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,6 +1,5 @@ dependencies { api('com.github.GTNewHorizons:Botania:1.9.16-GTNH:dev') - api('com.github.GTNewHorizons:Botanic-horizons:1.0.15-GTNH:dev') api('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') api('com.github.GTNewHorizons:Baubles:1.0.1.16:dev') compileOnly("com.github.GTNewHorizons:CodeChickenLib:1.1.8:dev") diff --git a/src/main/java/ab/client/model/ModelFountainMana.java b/src/main/java/ab/client/model/ModelFountainMana.java index 069e601..3a2c3a5 100644 --- a/src/main/java/ab/client/model/ModelFountainMana.java +++ b/src/main/java/ab/client/model/ModelFountainMana.java @@ -4,39 +4,55 @@ import net.minecraft.client.model.ModelBox; import net.minecraft.client.model.ModelRenderer; -public class ModelFountainMana extends ModelBase { +public class ModelFountainMana extends ModelBase { - private final ModelRenderer bottomAnvil; - private final ModelRenderer topAnvil; + private final ModelRenderer bone; + private final ModelRenderer bb_main; public ModelFountainMana() { - textureWidth = 48; - textureHeight = 48; - - bottomAnvil = new ModelRenderer(this); - bottomAnvil.setRotationPoint(0.0F, 24.0F, 0.0F); - bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 26, -3.0F, -1.0F, -4.0F, 6, 1, 1, 0.0F)); - bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 31, -5.0F, -1.0F, -3.0F, 12, 1, 6, 0.0F)); - bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 17, -2.0F, -3.0F, -2.0F, 4, 1, 4, 0.0F)); - bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 0, 8, -4.0F, -2.0F, -3.0F, 8, 1, 6, 0.0F)); - bottomAnvil.cubeList.add(new ModelBox(bottomAnvil, 32, 23, -3.0F, -1.0F, 3.0F, 6, 1, 1, 0.0F)); - - topAnvil = new ModelRenderer(this); - topAnvil.setRotationPoint(0.0F, 26.0F, 0.0F); - topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 23, -6.5F, -11.0F, -3.0F, 12, 2, 6, 0.0F)); - topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 38, -5.5F, -12.0F, -4.0F, 13, 2, 8, 0.0F)); - topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 15, -5.5F, -9.0F, -3.0F, 9, 2, 6, 0.0F)); - topAnvil.cubeList.add(new ModelBox(topAnvil, 17, 0, -4.5F, -11.0F, 2.5F, 7, 3, 1, 0.0F)); - topAnvil.cubeList.add(new ModelBox(topAnvil, 0, 0, -4.5F, -11.0F, -3.5F, 7, 3, 1, 0.0F)); - topAnvil.cubeList.add(new ModelBox(topAnvil, 30, 12, -2.5F, -7.0F, -2.0F, 5, 1, 4, 0.0F)); - } + textureWidth = 16; + textureHeight = 16; + + bone = new ModelRenderer(this); + bone.setRotationPoint(0.0F, 24.0F, 0.0F); + bone.cubeList.add(new ModelBox(bone, 0, 0, -1.0F, -11.0F, 2.0F, 2, 1, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -1.0F, -11.0F, -3.0F, 2, 1, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 2.0F, -11.0F, -1.0F, 1, 1, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -3.0F, -11.0F, -1.0F, 1, 1, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 1.0F, -12.0F, 1.0F, 1, 2, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 2.0F, -12.0F, 1.0F, 1, 2, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -2.0F, -12.0F, 1.0F, 1, 2, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -2.0F, -12.0F, -3.0F, 1, 2, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 1.0F, -12.0F, -3.0F, 1, 2, 2, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 2.0F, -12.0F, -2.0F, 1, 2, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -3.0F, -12.0F, 1.0F, 1, 2, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, -3.0F, -12.0F, -2.0F, 1, 2, 1, 0.0F)); + bone.cubeList.add(new ModelBox(bone, 0, 0, 2.0F, -11.0F, -2.0F, 4, 3, 4, 0.0F)); + // PartPose.offset(0.0F, 24.0F, 0.0F); + + bb_main = new ModelRenderer(this); + bb_main.setRotationPoint(0.0F, 24.0F, 0.0F); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 3, -7.0F, -1.0F, -6.0F, 14, 1, 12, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, -10, -11, -8.0F, -5.0F, -6.0F, 1, 5, 12, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, -11, -11, 7.0F, -5.0F, -6.0F, 1, 5, 12, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -6.0F, -5.0F, -8.0F, 12, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -6.0F, -5.0F, 7.0F, 12, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, 6.0F, -5.0F, -7.0F, 1, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, 6.0F, -5.0F, 6.0F, 1, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -7.0F, -5.0F, 6.0F, 1, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -7.0F, -5.0F, -7.0F, 1, 5, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -6.0F, -1.0F, 6.0F, 12, 1, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -6.0F, -1.0F, -7.0F, 12, 1, 1, 0.0F)); + bb_main.cubeList.add(new ModelBox(bb_main, 0, 0, -2.0F, -8.0F, -2.0F, 4, 7, 4, 0.0F)); - public void renderBottom() { - bottomAnvil.render(0.0625f); } public void renderTop() { - topAnvil.render(0.0625f); + bone.render(0.0625f); + } + + public void renderBottom() { + bb_main.render(0.0625f); } public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { @@ -44,4 +60,10 @@ public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, floa modelRenderer.rotateAngleY = y; modelRenderer.rotateAngleZ = z; } + + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, + float red, float green, float blue, float alpha) { + bone.render(packedLight); + bb_main.render(packedLight); + } } diff --git a/src/main/java/ab/common/lib/register/RecipeListAB.java b/src/main/java/ab/common/lib/register/RecipeListAB.java index d797061..51c3cc9 100644 --- a/src/main/java/ab/common/lib/register/RecipeListAB.java +++ b/src/main/java/ab/common/lib/register/RecipeListAB.java @@ -305,34 +305,6 @@ public static void setupCrafting() { OreDictionary.getOres("blockManaDiamond").get(0), 4500000, 0x29de21); - FlawlessManaDiamondRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( - OreDictionary.getOres("gemFlawlessManaDiamond").get(0), - new ItemStack(ModItems.manaResource, 1, 2), - new ItemStack(ModItems.manaResource, 1, 2), - new ItemStack(ModItems.manaResource, 1, 2), - 250000, - 0x1dab92); - ExquisiteManaDiamondRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), - OreDictionary.getOres("gemFlawlessManaDiamond").get(0), - OreDictionary.getOres("gemFlawlessManaDiamond").get(0), - new ItemStack(ModItems.manaResource, 1, 2), - 250000, - 0x1dab92); - FlawlessDragonstoneRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( - OreDictionary.getOres("gemFlawlessBotaniaDragonstone").get(0), - new ItemStack(ModItems.manaResource, 1, 9), - new ItemStack(ModItems.manaResource, 1, 9), - new ItemStack(ModItems.manaResource, 1, 9), - 300000, - 0xd6259d); - ExquisiteDragonstoneRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), - OreDictionary.getOres("gemFlawlessBotaniaDragonstone").get(0), - OreDictionary.getOres("gemFlawlessBotaniaDragonstone").get(0), - new ItemStack(ModItems.manaResource, 1, 9), - 300000, - 0xd6259d); EnderAirRecipe = AdvancedBotanyAPI.registerAdvancedPlateRecipe( new ItemStack(ModItems.manaResource, 16, 15), new ItemStack(ModBlocks.endStoneBrick, 1, 2), @@ -415,6 +387,11 @@ public static void setupCrafting() { OreDictionary.getOres("dustDraconium").get(0), 50, 0x25d6b7)); + manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( + new ItemStack((Item) Item.itemRegistry.getObject("witchery:ingredient"), 1, 12), + new ItemStack(Items.flint), + 50, + 0x25d6b7)); for (int i = 0; i < 16; i++) manaPowderRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_MANAPOWDER), new ItemStack(ModItems.dye, 1, i), @@ -423,21 +400,6 @@ public static void setupCrafting() { // only the exquisite diamond is good enough for a diluted pool - manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), - new ItemStack((Item) Item.itemRegistry.getObject("miscutils:IndustrialDiamondExquisite")), - 10000, - 0x25d6b7)); - manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), - OreDictionary.getOres("gemExquisiteDiamond").get(0), - 10000, - 0x25d6b7)); - manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), - OreDictionary.getOres("gemFlawlessDiamond").get(0), - 20000, - 0x25d6b7)); manaDiamondRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.manaResource, 1, MANARESOURCE_META_DIAMOND), OreDictionary.getOres("craftingIndustrialDiamond").get(0), @@ -480,11 +442,6 @@ public static void setupCrafting() { new ItemStack(Blocks.brown_mushroom), 6500, 0x25d6b7)); - mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( - new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), - new ItemStack((Item) Item.itemRegistry.getObject("BiomesOPlenty:mushrooms"), 1, Short.MAX_VALUE), - 6500, - 0x25d6b7)); mycelSeedsRecipes = (AdvancedBotanyAPI.registerFountainManaRecipe( new ItemStack(ModItems.grassSeeds, 1, SEEDS_META_MYCELIUM), new ItemStack((Item) Item.itemRegistry.getObject("harvestcraft:whitemushroomItem")), @@ -981,16 +938,6 @@ public static void setupCrafting() { 30, 0x25d6b7)); - conversionRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( - OreDictionary.getOres("ingotMithril").get(0), - new ItemStack(ItemListAB.itemABResource), - 25000, - 0x25d6b7)); - conversionRecipes = (AdvancedBotanyAPI.registerFountainAlchemyRecipe( - new ItemStack(ItemListAB.itemABResource, 1, 1), - OreDictionary.getOres("ingotMithril").get(0), - 25000, - 0x25d6b7)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Conjuration catalyst @@ -1251,7 +1198,7 @@ public static void setupCrafting() { "LPL", "M3M", 'M', - "plateMithril", + new ItemStack(ItemListAB.itemABResource), 'G', new ItemStack(ModItems.rune, 1, 15), 'L', @@ -1290,7 +1237,7 @@ public static void setupCrafting() { "LPL", "M3M", 'M', - "plateMithril", + new ItemStack(ItemListAB.itemABResource), 'G', new ItemStack(ModItems.rune, 1, 15), 'L', @@ -1356,7 +1303,7 @@ public static void setupCrafting() { 'L', new ItemStack(ItemListAB.itemABResource, 1, 1), 'M', - "plateMithril", + new ItemStack(ItemListAB.itemABResource), 'R', new ItemStack(ModItems.manaRingGreater) @@ -1425,7 +1372,7 @@ public static void setupCrafting() { "DHD", " E ", 'E', - "plateElvenElementium", + new ItemStack(ModBlocks.pylon,1,2), 'D', new ItemStack(ModItems.blackHoleTalisman), 'H', @@ -1451,7 +1398,7 @@ public static void setupCrafting() { 'D', new ItemStack(ModBlocks.floatingFlower, 1, 32767), 'E', - "plateElvenElementium", + new ItemStack(ModBlocks.pylon,1,2), 'R', new ItemStack(ModItems.rune, 1, 3) @@ -1545,7 +1492,7 @@ public static void setupCrafting() { 'D', new ItemStack(ModItems.manaResource, 1, 2), 'M', - "plateTerrasteel", + new ItemStack(ModBlocks.pylon,1,1), 'P', new ItemStack(ModItems.manaResource, 1, 23) @@ -1598,7 +1545,7 @@ public static void setupCrafting() { 'L', new ItemStack(BlockListAB.blockLebethron, 1, 3), 'P', - "plateTerrasteel")); + new ItemStack(ModBlocks.pylon,1,1))); GameRegistry.addRecipe( new ShapedOreRecipe( @@ -1715,18 +1662,18 @@ public static void setupCrafting() { new AspectList().add(Aspect.EARTH, 32).add(Aspect.MAGIC, 16).add(Aspect.HARVEST, 48) .add(Aspect.CROP, 16), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemHoeElemental")), - new ItemStack[] { OreDictionary.getOres("gemFlawlessGreenSapphire").get(0), + new ItemStack[] { OreDictionary.getOres("blockPeridot").get(0), new ItemStack(ModItems.manaResource, 1, 3), - OreDict.preference("plateTerrasteel", LibOreDict.TERRA_STEEL), + new ItemStack(ModBlocks.pylon,1,1), new ItemStack(ModItems.rune, 1, 2), new ItemStack(ModItems.fertilizer), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:blockCrystal"), 1, 3), - OreDict.preference("plateTerrasteel", LibOreDict.TERRA_STEEL), - new ItemStack(ModItems.manaResource, 1, 3), OreDictionary.getOres("gemFlawlessOlivine").get(0), + new ItemStack(ModBlocks.pylon,1,1), + new ItemStack(ModItems.manaResource, 1, 3), OreDictionary.getOres("blockEmerald").get(0), new ItemStack(ModItems.manaResource, 1, 3), - OreDict.preference("plateTerrasteel", LibOreDict.TERRA_STEEL), + new ItemStack(ModBlocks.pylon,1,1), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:blockCrystal"), 1, 3), new ItemStack(ModItems.fertilizer), new ItemStack(ModItems.rune, 1, 2), - OreDict.preference("plateTerrasteel", LibOreDict.TERRA_STEEL), + new ItemStack(ModBlocks.pylon,1,1), new ItemStack(ModItems.manaResource, 1, 3) }); AquaSword = ThaumcraftApi.addInfusionCraftingRecipe( @@ -1773,7 +1720,7 @@ public static void setupCrafting() { .add(Aspect.MAGIC, 32).add(Aspect.ELDRITCH, 32).add(Aspect.BEAST, 16).add(Aspect.HUNGER, 16), new ItemStack(ItemListAB.itemAquaSword), new ItemStack[] { new ItemStack(ModItems.rainbowRod), new ItemStack(ItemListAB.itemABResource, 1, 0), - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), + new ItemStack(ModBlocks.storage,1,3), new ItemStack(ItemListAB.itemABResource, 1, 0), new ItemStack(ItemListAB.itemNebulaRod), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ModBlocks.livingwood, 1, 5), @@ -1781,7 +1728,7 @@ public static void setupCrafting() { new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ItemListAB.itemNebulaRod), new ItemStack(ItemListAB.itemABResource, 1, 0), - OreDictionary.getOres("gemExquisiteAmethyst").get(0), + OreDictionary.getOres("BlockCrystalFlux").get(0), new ItemStack(ItemListAB.itemABResource, 1, 0) }); Forge = ThaumcraftApi.addInfusionCraftingRecipe( @@ -1794,16 +1741,16 @@ public static void setupCrafting() { new ItemStack((Item) Item.itemRegistry.getObject("thaumicbases:voidAnvil")), new ItemStack[] { new ItemStack(ModBlocks.terraPlate), new ItemStack(ModItems.rune, 1, 2), OreDictionary.getOres("blockTerrasteel").get(0), - new ItemStack((Item) Item.itemRegistry.getObject("dreamcraft:item.DiamondCoreChip")), + new ItemStack((Item) Item.itemRegistry.getObject("gendustry:GeneticsProcessor")), new ItemStack(ModBlocks.terraPlate), new ItemStack(ModItems.rune, 1, 3), OreDictionary.getOres("blockManasteel").get(0), - new ItemStack((Item) Item.itemRegistry.getObject("dreamcraft:item.EssentiaCircuit")), + new ItemStack((Item) Item.itemRegistry.getObject("thaumicenergistics:material"),1,0), new ItemStack(ModBlocks.terraPlate), new ItemStack(ModItems.rune, 1, 2), OreDictionary.getOres("blockTerrasteel").get(0), - new ItemStack((Item) Item.itemRegistry.getObject("dreamcraft:item.DiamondCoreChip")), + new ItemStack((Item) Item.itemRegistry.getObject("gendustry:EnvProcessor")), new ItemStack(ModBlocks.terraPlate), new ItemStack(ModItems.rune, 1, 3), OreDictionary.getOres("blockManasteel").get(0), - new ItemStack((Item) Item.itemRegistry.getObject("dreamcraft:item.EssentiaCircuit")), }); + new ItemStack((Item) Item.itemRegistry.getObject("thaumicenergistics:material"),1,1), }); Destroyer = ThaumcraftApi.addInfusionCraftingRecipe( "Destroyer", @@ -1814,14 +1761,14 @@ public static void setupCrafting() { .add(Aspect.CROP, 32).add(Aspect.HARVEST, 32).add(Aspect.TREE, 32), new ItemStack(ItemListAB.itemABResource, 1, 2), new ItemStack[] { new ItemStack(ModItems.terraAxe), new ItemStack(BlockListAB.blockABStorage, 1, 0), - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), + new ItemStack(ModBlocks.storage,1,3), new ItemStack(BlockListAB.blockABStorage, 1, 0), new ItemStack(ModItems.terraPick, 1, 0), // nbt(2147483646), - new ItemStack(ModBlocks.livingwood, 1, 5), OreDictionary.getOres("gemFlawlessAmber").get(0), + new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:blockCosmeticOpaque"), 1, 1), new ItemStack(BlockListAB.blockLebethron, 1, 4), new ItemStack(ModItems.temperanceStone, 1, 0), new ItemStack(BlockListAB.blockLebethron, 1, 4), - OreDictionary.getOres("gemFlawlessAmber").get(0), new ItemStack(ModBlocks.livingwood, 1, 5), + new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:blockCosmeticOpaque"), 1, 1), new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ItemListAB.itemTerraHoe), new ItemStack(BlockListAB.blockABStorage, 1, 0), - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), + new ItemStack(ModBlocks.storage,1,3), new ItemStack(BlockListAB.blockABStorage, 1, 0) }); NebulaHelm = ThaumcraftApi.addInfusionCraftingRecipe( @@ -1833,7 +1780,7 @@ public static void setupCrafting() { .add(Aspect.METAL, 20).add(Aspect.SENSES, 20).add(Aspect.ELDRITCH, 20), new ItemStack(ModItems.gaiaHead), new ItemStack[] { new ItemStack(ModItems.elementiumHelm), new ItemStack(ModItems.laputaShard, 1, 15), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ItemListAB.itemNebulaRing), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 3), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemAmuletRunic"), 1, 1), @@ -1841,7 +1788,7 @@ public static void setupCrafting() { new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemAmuletRunic"), 1, 1), new ItemStack(ItemListAB.itemABResource, 1, 3), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ItemListAB.itemNebulaRing), new ItemStack(ItemListAB.itemABResource, 1, 5), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ModItems.laputaShard, 1, 15), }); NebulaChest = ThaumcraftApi.addInfusionCraftingRecipe( @@ -1875,7 +1822,7 @@ public static void setupCrafting() { .add(Aspect.METAL, 20).add(Aspect.SENSES, 20).add(Aspect.BEAST, 20), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemGirdleRunic"), 1, 1), new ItemStack[] { new ItemStack(ModItems.elementiumLegs), new ItemStack(ModItems.laputaShard, 1, 15), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ItemListAB.itemNebulaRing), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ModBlocks.manaBeacon, 1, 5), new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemAmuletRunic"), 1, 1), @@ -1883,7 +1830,7 @@ public static void setupCrafting() { new ItemStack((Item) Item.itemRegistry.getObject("Thaumcraft:ItemAmuletRunic"), 1, 1), new ItemStack(ModBlocks.manaBeacon, 1, 5), new ItemStack(ItemListAB.itemABResource, 1, 5), new ItemStack(ItemListAB.itemNebulaRing), new ItemStack(ItemListAB.itemABResource, 1, 5), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ModItems.laputaShard, 1, 15), }); @@ -1938,8 +1885,8 @@ public static void setupCrafting() { new ItemStack(BlockListAB.blockABFountain), new ItemStack[] { new ItemStack(ModBlocks.alchemyCatalyst), new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ModBlocks.livingwood, 1, 5), - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), new ItemStack(ModBlocks.brewery), - OreDictionary.getOres("gemExquisiteManaDiamond").get(0), + new ItemStack(ModBlocks.storage,1,3), new ItemStack(ModBlocks.brewery), + new ItemStack(ModBlocks.storage,1,3), new ItemStack(ModBlocks.livingwood, 1, 5), new ItemStack(ModBlocks.livingwood, 1, 5), }); @@ -1954,9 +1901,9 @@ public static void setupCrafting() { new ItemStack(BlockListAB.blockABAlchemy), new ItemStack[] { new ItemStack(ModBlocks.conjurationCatalyst), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ModBlocks.pylon, 1, 1), - OreDictionary.getOres("gemExquisiteBotaniaDragonstone").get(0), + new ItemStack(ModBlocks.storage,1,4), new ItemStack(ModBlocks.dreamwood, 1, 5), new ItemStack(ModBlocks.dreamwood, 1, 5), }); diff --git a/src/main/resources/assets/ab/textures/model/FountainMana.png b/src/main/resources/assets/ab/textures/model/FountainMana.png index 5f9ca7faf106ed332132413bb94fc578e517ff95..c998acd5a088c1405e7e19e126cf776be2ea0ff4 100644 GIT binary patch literal 18975 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�V2RrvN)U63H@Gjl#~SiE`ZSQB}qW;cjRe!I6K?hSh)VX zF#i!K|1Y?|+5aOb|4-(Bhy7(O;pFV|lC;+DDqfENrThN`_!ons4cNlb&FR1D`rjdc z$?~^-=cUho)xGRzFWV#AKljIfgvIa7`M>!3N4Wi8^zcIcKTiHz`u>kx|0CCbOM(9u z_zb?j9QDA|8)ee%Sno9T5ohMuf|)f zh;3e9wx2(Wq_=x`Ou4Ik{y>QF%3d!HDHK&bXB0ms7D@rCxYw=t3G)ffXDgNtM@%R! zguTTyVsLPfmYpDx;+4wF%jDGe;<5Wyp9y23HmjMqZ8e5}R$Hz_qpVW<{Y}lyW8|-& zIwm($CT-H|I@B)8@eq$YylXxSy3L{QFhiD;lZ&CH%nYk=t&yVcWIHyFY)d8-Un$f? zEP!dC^#R!MMq}(yWcZ^`S>p7{ahFZ0mLHl2)4A2ZNfxnqj;u2KMSEe{P+O=`ZFG7K zSRH5ZUT#w03+wR=EuziP7q)Dj2i~TE@&cP$&0fnz)e-A2?Zy_e5Leogqp>89Me>bS zoM8KsXlcyM!*sujR8$5jFR%7YI<1fAo&ZD`O)MDI@#M`vz!00Aq6u(dtuiCA7mLYa z!FH+}MJx>A|1x}l*GD{=c<0_YV9FwqAKCtH5>0X@l$-=8p5%17yGmpb8bik*Z}037 z6-h!b#oO!ek~cMsOwn6tV?UvcHv__bzd=F3_^Ek_o2!4uLh~&0kp-ISs;l^wesu(U z)J*n$(xZ~X8bfuMPB{L3s4uQStR_0HLbql>f{D^)qSJYZGpdK20c%CI*zh}9HlXdh zB#I3&t<+`XS-l`ms;`NI`avKH&m$Y(yWNY2BAGRjgJo{j_eOcSYlSVrF#NZ)WSVpMS!(fRmE@0E~uV5YGAH}9r&q`(VRMk!G3n1 z>1QO(6xB%Tb*smknD*uvlx>PNO$Ecdhx{<~*+IdhgRr|fLthCfaHI^_<)rDEyq#}X z&n^rpMoZltl<0inaWZ+lk1I}yLZMlvecGqk1*Hiv0#hjN_c+J*-+i}?qmq(EK>y?! zi$_Fi^>lI4RsVcdd=h~_CGqphZCnQ9W^U$}6hrJK>KBiv^a+n;Kn&}}yzmoW8~i{~ z{B_gVYV{&_R~VnRH%LmaAbSY2#-O01DX;W8ZI#!APSF)l#;NJ!Ei)og@A0+6totYW z_`BZoO-nz&Y(5f~)2)Quz(Lrv^YiW00tVX?*U80wg*~}QETk^t@(w7Y7XSHYe!+C( z{7VDn0|aWHxUX9^RC3V%Se*0Wl~wifJ7JWHbScq<&#qD#%848KQ4&9b)9JrJ+ai`d zR-8k@AQpT2&f>Uo|jaY`s5{O&3(uu@RYnBsoqC_x81 z8SnCwxhVa|6lZ%5S)z*iJM#fsJ<4jBl0;f+IdG@nml#H9Dr*kSH{BgqukNLuCnroi&HT*&J&{7eouEVBfyYo#|8PL?(>o>O3cWS}_rb zqa$F`OIHYWP`wVVHJoLNUJM6B%_MmU*E2BAGQWPTw=kfUqzb9CJE^o3A~M^Jj%jv~ zAvut2fZp8wg4UDMBYg=SnsQg*6C4BYeW}_Y%@Zt33{6^3pLR%yyD?+XcRdheJ4Xq~ zDLRJ#zylfxETb8Rna0X2d!%0_my`iz~|1*X8vpkA}Oq{#0UBH~TTIpxnAWywcI;5&o1#f^NFD$arno15K%I``b|lwQL^- z&M8O*GO%-b_p`>==^6|8O^l$I! zRGQV0A8HFK^i?s_n_D7Bs1`jW*kF87jS>6Z#jRMPS7K_<**L$DP9XMUc6CKeV|UyC z_$71!f!!8w3qt=!* z;TbIomm?W*4VZjM>q5O^66Eb;g052)AWy;$-vGxHUiyVE&zjLk$At{|g+8Y+MwP`2;YbJ=TLM%?QdR7bZoa(E#1psaXo!|c)RlyxP;|^I!E3oI6^iWe>HZb zM7yF#G{@cx3+2`G+;a5VtS|>eN|h=R2|PseTvpYSz>v-7n!nV*stL zHW3q+1D(1vJTxV&Geoil`ed9Rz`)?-Y~IL^Ww$UJgRq>%9xVEBh)_1Uz)Y6UmXpV4 zIGr@n>V;9ZU|+JL(coLTgN=aA;&R*}tL0xaNp>2Y%@Z9@OBbDREei zMGaA3>+(PmURf_>7RYH~5AHq{LkzEk@Dc+VEkC&7+REOr@a!j<5zto>x}+t<(0!mC zgdlA+qfTNHiV@Ivo<{8ib}4kAI)t1XoJ|*&9Hu_NSWVSnO|#uF`Q6^X-^I9DIr?Q5 zk)|4fO1qPJN(Egs+C>)!?hMqMYixB3Dab2|n8ajIGT~tl-Yp^=CJ@IoUki+fRnK`- zSII039mE}M`nG@3Tl^4hc#vSG=^9Eeha8jn0A)|Ls1Vbm1s)bT-eCz5`-bq|%Nv(- zy-jj%(f%EOo}6+btu&$v5MI+FEbSfNE3Vd{X}g@jVuN~*d*R|G6LJ6DUr$jO5XG*X z?QyubH$^>@D#G4jLd0Bon-r+TKX<;q-Q$`$wLg%NotbS5`jz_gY)+~Fz>c6KvWSEf z{)nC;PG(T9-)Uod)9u$3EiZwRXQFyAFtGSSFb4~%MY48>r=*8f zn$Hh5v@xs@X_vded-H8oatm_bWL#f9z zim9HaZ?=wbC}7nR@>2`(Nu}vQ+yxur3f5J)Z|2Mkfi-9z8e96YiNWoLKm?5#xrFW^ z4B>3^fy1RKw~ue4$Dg5E_AP3^82B%f%=%`Kl455?P9hyN@!O$!wgS3M?USgn|=bYrYM&hW?gVxzG_z` zXINagMSuB1QrslNXgA``WBNpuijeh(CerRYGM55vc@RbPK7|@HhnVk$cu%`muPMtL zlODSeOQX8B##9s3EcfU}hp1yjuUc}dkz4^{(1T#eutZA9=BYRj(A`09$wr+;O&^OW zY*2Vd9F>NXfMPJPS>;mP*habt)xi&oyU_KWw|^{~2p>4sMAoU0_Ogg6-MwbOM#>3J zTCf@yXa9kW*Sc_e+8`p0$Vr0ooPnps`(|<|zrmO)mNMmQ0g7p430s1yhlNEi>}YMc-ajhx)>hyhc^m`D%R1#{vQTPm~`|eb+!Zy zA^c5QKcot|pxlLq-TPaWn~dV$y;c0r({tvVWqR zw|kPh!|Gx0ej{SdjP>k1{c=MTz48w7A@&=*%gv9?JM!fs>u9>2?^EfQyBc4!RX(4x zt%~~X!~~dqCn4kJ4QM5NHfx>6A1CYZUZphlW5j>xCVZ~^$qwid^6kBxtbK3wjcojM zgMo6D<0v#fY|}Ra<(yNgl5X+{<4in&9#K)62|ko%iYx07T)DvTy_9lAz8>bA!?mn* z&uW-4f7@rPGOzotA+3OO*L#&+ah2qmU+qs;hYwE*$;AFP_r`#q&p)y@Mb@_G?pd@g zpbSeGEmii#cYe+o1aJt_Mv6lV_b<|<=XDLcwwbqOg0G)2enE*8{K^$2-1voV{|s-U zCW_QMvTlM+P5i|oD9Yg<>`o1p4B&niTInFvFxLQqPny_o!Xc06MhL51$~_# zhs$;(Co8d!&ogW0^Us(`D1E4nX{OmZI5oK)H$)#JPu-obP~c!c<8uwFCd4!!cfIXIiDEzOd!HTJ-S^$@Q>Cz1LFJ7*)1xl_ z!}4SmANQM=Y0%V9y6lc-4HXn31{D_J!)yFFyD;V_1}(9{PuxriN1%WfR!!(W{TLfw z%_t~(zix(zrD;7nfJz4|jU>=c_73H^sKe=+6rXaV)Ho->TPnxO8ccwI)LrA_+-SPo z^O;&P+QJy4CMMh<0(MAlZ6p|$TZ5q+4aI<~c( z&eDhdV9O%{723U(jDdR!vp2zuP?S-aMibL{ZK}C6NB+^>$@HtLwMkcTA4F}DfCL1 z>S~ycO7S9mtrA*nh|hsU`&+g<>|z!~v9zFI=9sZ&)|=UAGJ&ZhS1nGaEI0gj56DLH z?_A?9L6pjBpJp+b+7~HP#Xliip=3p{7E7s^f|3|#xO{R8Dwh3ts74!6@MobA zMyyyt0oTtUk8wv!pmBl7Z8X`hSl=#)zzWT$pT|b!UZg{oN>dtyV52`4NYd-?1GASb0PSu1WD{Qm%)hnu(n literal 5443 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 diff --git a/src/main/resources/assets/ab/textures/model/FountainMana1.png b/src/main/resources/assets/ab/textures/model/FountainMana1.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9ca7faf106ed332132413bb94fc578e517ff95 GIT binary patch literal 5443 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 literal 0 HcmV?d00001 From 63159bacb2be54e8ba29bde34ace526bcb703c63 Mon Sep 17 00:00:00 2001 From: EnderProyects Date: Mon, 21 Oct 2024 16:26:00 +0200 Subject: [PATCH 16/16] first commit --- README.md | Bin 56 -> 110 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/README.md b/README.md index 3267ef2a5e0a76898bfd108ce992e387b5036f39..a7e778b0dec99dce345d536f8f3270e6a221413a 100644 GIT binary patch delta 7 OcmcD>n_w}K$qWDqzyde` delta 4 Lcmd0^m|y__1H1um