Added the Updraft Array (feather + glowstone)
This commit is contained in:
parent
39d215887f
commit
b4ff6d5d2f
|
@ -1,3 +1,12 @@
|
|||
------------------------------------------------------
|
||||
Version 2.0.2-49
|
||||
------------------------------------------------------
|
||||
- All Alchemy Array recipes are WIP and are subject to change! ^.^ They are created using the Arcane Ash and are shown as first item + second item.
|
||||
- Added the Movement Array (feather + redstone)
|
||||
- Added the Mob Beacon Array (2x Zombie Flesh)
|
||||
- Added the Updraft Array (feather + glowstone)
|
||||
- Added the Skeleton Turret Array (Arrow + feather)
|
||||
|
||||
------------------------------------------------------
|
||||
Version 2.0.2-48
|
||||
------------------------------------------------------
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package WayofTime.bloodmagic.alchemyArray;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffect;
|
||||
import WayofTime.bloodmagic.api.iface.IAlchemyArray;
|
||||
|
||||
public class AlchemyArrayEffectUpdraft extends AlchemyArrayEffect
|
||||
{
|
||||
public AlchemyArrayEffectUpdraft(String key)
|
||||
{
|
||||
super(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(TileEntity tile, int ticksActive)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity)
|
||||
{
|
||||
double motionY = 1.5;
|
||||
|
||||
entity.fallDistance = 0;
|
||||
|
||||
entity.motionY = motionY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlchemyArrayEffect getNewCopy()
|
||||
{
|
||||
return new AlchemyArrayEffectUpdraft(key);
|
||||
}
|
||||
}
|
|
@ -60,7 +60,15 @@ public class AlchemyArrayRecipeRegistry
|
|||
{
|
||||
arrayRecipe.catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect);
|
||||
if (circleRenderer != null)
|
||||
arrayRecipe.circleRenderer = circleRenderer;
|
||||
{
|
||||
if (arrayRecipe.defaultCircleRenderer == null)
|
||||
{
|
||||
arrayRecipe.defaultCircleRenderer = circleRenderer;
|
||||
} else
|
||||
{
|
||||
arrayRecipe.circleMap.put(ItemStackWrapper.getHolder(catalystStack), circleRenderer);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -157,7 +165,7 @@ public class AlchemyArrayRecipeRegistry
|
|||
{
|
||||
AlchemyArrayRecipe arrayRecipe = entry.getValue();
|
||||
if (arrayRecipe.doesInputMatchRecipe(input))
|
||||
arrayRecipe.circleRenderer = circleRenderer;
|
||||
arrayRecipe.defaultCircleRenderer = circleRenderer;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,21 +216,23 @@ public class AlchemyArrayRecipeRegistry
|
|||
return getAlchemyArrayEffect(Collections.singletonList(input), catalystStack);
|
||||
}
|
||||
|
||||
public static AlchemyCircleRenderer getAlchemyCircleRenderer(List<ItemStack> input)
|
||||
public static AlchemyCircleRenderer getAlchemyCircleRenderer(List<ItemStack> input, @Nullable ItemStack catalystStack)
|
||||
{
|
||||
for (Entry<List<ItemStack>, AlchemyArrayRecipe> entry : recipes.entrySet())
|
||||
{
|
||||
AlchemyArrayRecipe arrayRecipe = entry.getValue();
|
||||
if (arrayRecipe.doesInputMatchRecipe(input))
|
||||
return arrayRecipe.circleRenderer;
|
||||
{
|
||||
return arrayRecipe.getAlchemyArrayRendererForCatalyst(catalystStack);
|
||||
}
|
||||
}
|
||||
|
||||
return defaultRenderer;
|
||||
}
|
||||
|
||||
public static AlchemyCircleRenderer getAlchemyCircleRenderer(ItemStack itemStack)
|
||||
public static AlchemyCircleRenderer getAlchemyCircleRenderer(ItemStack itemStack, @Nullable ItemStack catalystStack)
|
||||
{
|
||||
return getAlchemyCircleRenderer(Collections.singletonList(itemStack));
|
||||
return getAlchemyCircleRenderer(Collections.singletonList(itemStack), catalystStack);
|
||||
}
|
||||
|
||||
@Getter
|
||||
|
@ -230,9 +240,10 @@ public class AlchemyArrayRecipeRegistry
|
|||
@EqualsAndHashCode
|
||||
public static class AlchemyArrayRecipe
|
||||
{
|
||||
public AlchemyCircleRenderer circleRenderer;
|
||||
public AlchemyCircleRenderer defaultCircleRenderer;
|
||||
public final List<ItemStack> input;
|
||||
public final BiMap<ItemStackWrapper, AlchemyArrayEffect> catalystMap = HashBiMap.create();
|
||||
public final BiMap<ItemStackWrapper, AlchemyCircleRenderer> circleMap = HashBiMap.create();
|
||||
|
||||
private AlchemyArrayRecipe(List<ItemStack> input, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer, boolean useless)
|
||||
{
|
||||
|
@ -240,7 +251,7 @@ public class AlchemyArrayRecipeRegistry
|
|||
|
||||
catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect);
|
||||
|
||||
this.circleRenderer = circleRenderer;
|
||||
this.defaultCircleRenderer = circleRenderer;
|
||||
}
|
||||
|
||||
public AlchemyArrayRecipe(ItemStack inputStack, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer)
|
||||
|
@ -298,6 +309,25 @@ public class AlchemyArrayRecipeRegistry
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
public AlchemyCircleRenderer getAlchemyArrayRendererForCatalyst(@Nullable ItemStack comparedStack)
|
||||
{
|
||||
for (Entry<ItemStackWrapper, AlchemyCircleRenderer> entry : circleMap.entrySet())
|
||||
{
|
||||
ItemStack catalystStack = entry.getKey().toStack();
|
||||
|
||||
if (comparedStack == null && catalystStack == null)
|
||||
return entry.getValue();
|
||||
|
||||
if (comparedStack == null || catalystStack == null)
|
||||
continue;
|
||||
|
||||
if (catalystStack.isItemEqual(comparedStack))
|
||||
return entry.getValue();
|
||||
}
|
||||
|
||||
return defaultCircleRenderer;
|
||||
}
|
||||
}
|
||||
|
||||
public static BiMap<List<ItemStack>, AlchemyArrayRecipe> getRecipes()
|
||||
|
|
|
@ -12,8 +12,9 @@ public class RenderAlchemyArray extends TileEntitySpecialRenderer<TileAlchemyArr
|
|||
public void renderTileEntityAt(TileAlchemyArray alchemyArray, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
ItemStack inputStack = alchemyArray.getStackInSlot(0);
|
||||
ItemStack catalystStack = alchemyArray.getStackInSlot(1);
|
||||
int craftTime = alchemyArray.activeCounter;
|
||||
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack);
|
||||
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
|
||||
|
||||
renderer.renderAt(alchemyArray, x, y, z, (craftTime > 0 ? craftTime + partialTicks : 0));
|
||||
}
|
||||
|
|
|
@ -15,7 +15,12 @@ public class AttractorAlchemyCircleRenderer extends AlchemyCircleRenderer
|
|||
{
|
||||
public AttractorAlchemyCircleRenderer()
|
||||
{
|
||||
super(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ZombieBeacon.png"));
|
||||
this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ZombieBeacon.png"));
|
||||
}
|
||||
|
||||
public AttractorAlchemyCircleRenderer(ResourceLocation resourceLocation)
|
||||
{
|
||||
super(resourceLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -90,6 +90,15 @@ public class CategoryDemon
|
|||
reactionsPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "reactions" + ".info"), 270));
|
||||
entries.put(new ResourceLocation(keyBase + "reactions"), new EntryText(reactionsPages, TextHelper.localize(keyBase + "reactions"), false));
|
||||
|
||||
List<IPage> sentientGemPages = new ArrayList<IPage>();
|
||||
sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.1"), 270));
|
||||
sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.2"), 270));
|
||||
entries.put(new ResourceLocation(keyBase + "sentientGem"), new EntryText(sentientGemPages, TextHelper.localize(keyBase + "sentientGem"), false));
|
||||
|
||||
List<IPage> routingPages = new ArrayList<IPage>();
|
||||
routingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "routing" + ".info"), 270));
|
||||
entries.put(new ResourceLocation(keyBase + "routing"), new EntryText(routingPages, TextHelper.localize(keyBase + "routing"), false));
|
||||
|
||||
return entries;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor;
|
|||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectUpdraft;
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
|
||||
import WayofTime.bloodmagic.api.compress.CompressionRegistry;
|
||||
|
@ -232,6 +233,8 @@ public class ModRecipes
|
|||
|
||||
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer());
|
||||
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMovement("movement"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")));
|
||||
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.GLOWSTONE_DUST), new AlchemyArrayEffectUpdraft("updraft"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/UpdraftArray.png")));
|
||||
|
||||
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png")));
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
|
@ -46,6 +46,8 @@ guide.BloodMagic.entry.demon.petty=Petty Tartaric Gem
|
|||
guide.BloodMagic.entry.demon.sword=Sentient Sword
|
||||
guide.BloodMagic.entry.demon.lesser=Lesser Tartaric Gem
|
||||
guide.BloodMagic.entry.demon.reactions=Unexpected Reactions
|
||||
guide.BloodMagic.entry.demon.sentientGem=Sentient Armour
|
||||
guide.BloodMagic.entry.demon.routing=Item Routing
|
||||
|
||||
# Demon Kin Entry Texts
|
||||
guide.BloodMagic.entry.demon.intro.info=My name is Bella Highborn, and I am known as the Demon Kin. Several months ago my village was attacked by a wave of demons, killing all other people while destroying every single building. I don't remember much from the attack, other than the screams of pain as each and every person I knew left this world for a happier one. Thankfully the demons did not hear me as I cowered underneath the fruit baskets in the basement of the church of Intactilis, trying desperately to keep my screams from joining the chorus of other voices. \nThere was one horrible moment when I accidentally knocked down the incense altar of the church and a demon came bounding into the sanctuary, unperturbed by what we assumed was a sacred place. It was a huge four-legged monster, with curved tusks hanging past a jutting mouth, saliva dripping onto serrated swords taking the place of his claws. It took a look around the room and I swear it locked eyes with me for a solid second, but then it just simply left as if it neither heard nor saw anything. Everything afterwards was a blur. \nIt was a full day before anyone came to see what happened. A trading caravan saw the smoke in the distance and decided to take the long way around past the demons. Many of the traders didn't even want to look at me, fearing that because I alone managed to survive unscathed it was a bad omen. But two brothers decided to take pity on me and try to convince the rest of the caravan to consider having me ride along. It took me selling the priestess's wand and locket, but I managed to buy safe passage to a village far enough away from the demons' path of destruction.
|
||||
|
@ -60,4 +62,6 @@ guide.BloodMagic.entry.demon.sword.info.2=I infused the demon will-holding capab
|
|||
guide.BloodMagic.entry.demon.lesser.info.1=I was chatting with Tiberius today, discussing some of the projects that he is working on. I must say, when we start talking about his research it seems that he just keeps going on and on and on! Anyway, one of the recent inventions he wanted to talk about was his sigils: so far he managed to create a Water Sigil and a Lava Sigil, using the Hellfire Forge I finally constructed for him as a means to create them. I wasn't entirely sure how he actually made them - I knew he experimented by taking some ingredients and combining them inside of the forge using the tartaric gem as a catalyst, but I haven't actually seen him actively experimenting yet. Well, I got some insight finally as to what he uses that blasted ash for.\n\tLet's see if I can mimic what he said properly. Ahem. "By using the Demon Will contained inside of these gems to transmute the ingredients, a reaction occurs between things that normally don't do anything when combined. By harnessing this forced synergy, I am able to inscribe several arcane symbols in patterns that will direct the energy that I add myself to perform the desired task." Although it doesn't show well in writing, picture me saying this while pushing glasses up the bridge of my nose. I'm not sure if he's normally like this, but I swear he gets all... science-y when he explains things to me.\n\tAt any rate, he showed me how he created a Water Sigil by demonstrating it to me. After the, admittedly flashy, demonstration, he then got to the meat of the discussion. "When I try to replicate this process with some more advanced materials, it seems that the reagents tend to... explode when added to the alchemy array. They seem very unstable. My thinking is that the ingredients aren't getting properly fused together - perhaps there is not enough energy in the forge to fuse them properly."\n\tAfter thinking about this for a few minutes, I got to work - as I mentioned in a previous entry, I figured that a more powerful Tartaric gem would be required, but I still haven't figured out exactly how I could do this in an elegant way. So, I decided that a brute-force approach would be sufficient for this!
|
||||
guide.BloodMagic.entry.demon.lesser.info.2=I took a block of lapis, block of redstone, and a diamond as well as an empty petty Tartaric gem that I had lying around - part of a past experiment that... didn't exactly go very well. All I can say about it is that I am surprised Magus can make holes in a solid concrete wall simply disappear. I then combined these four items in the Hellfire forge with a filled petty Tartaric gem to act as a power source - a minimum of 60 Will seems to be needed. After a bit of effort trying to find an optimal arrangement, I then set them together and watched as the empty Tartaric gem started to grow inside of the forge.\n\tJust as a side note, I tried using a block of gold instead of a diamond to grow the gem, but it seems that having another crystal structure was more beneficial.\n\tThis new, "Lesser Tartaric gem" seems to have a much larger capacity, able to hold a total of 256 raw Will. Hopefully this is enough to sate Tiberius's need for large amounts of Will for a while. But alas it seems that I will need to fill up this gem. Another long night is ahead of me!
|
||||
guide.BloodMagic.entry.demon.reactions.info=I woke up in a hospital bed today, aching something fierce. I opened my eyes and saw the dull magenta that made up the ceiling of the "Intense Curse" wing of the hospital in Veteres, which is the closest major city to our village. I wasn't exactly worried by this information: it more so puzzled me that I somehow ended up here while seemingly only covered in scrapes and bruises, plus a simple cast on my left leg. Someone must have cast an "Ossa Fracta" curse on me or something, since all it could be was a simple broken bone! \n\tWhen Magus came in with one of the nurses with a solemn face, I knew it was something more drastic. Apparently, one of my experiments with the new Lesser Tartaric gem rebounded and created a small but forceful explosion. That much I could understand easily enough, but that wasn't it: the mixture of obsidian, iron and diamond that I used coated my lower left leg, forming into a rigid shell that couldn't be removed. The cast that I had on my leg wasn't actually a cast, but some form of runic matrix covering the light-blue shell. \n\tCalmly, I asked what Magus thought, even though I was pretty sure what had occurred. "I think," he said, giving a side-long glance towards the nurse that was listening intently before looking back at me, "that it is simply some sort of residue that is diamond-based, which is the main reason we can't remove it. It is also laced with a bit of... otherworldly energy, which is the main reason that you are here instead of a bed at the local clinic - the Conglomerate is rather stringent about unknown energy directly contacting people, ever since the Eldritch Incident, so we had to make sure that there wasn't any issues."\n\t"I see..." Normally Magus doesn't bother much with formalities such as making sure that the Conglomerate is informed about unknown energies - I've been experimenting with Demon Will for quite a while, and it isn't like the Conglomerate came knocking on our door to have this magic registered. I won't go into much detail here, since I am not well versed in politics, but I know that Magus partakes in it only sparingly. This meant that the power from this Will concerned Magus a lot, perhaps through some of his past dealings...?\n\t"Ah well, enough about that for now," Magus said, rolling up the sleeves of his robes. "I tried to break the shell when I first saw it, obviously after checking what it was. It didn't have an effect last time, but now..."\n\tThere was a searing heat on my left leg, accompanied by a blinding red light as Magus cupped his hands on top of the blue shell. After what felt like an eternity, but what must have been only a couple of seconds, the shell started to crack and fracture, falling apart. Honestly, it was kind of anticlimactic. \n\tI tried to get up, but Magus pushed me back into the bed with a small shove. "Bella, you need to stay and rest. You can work with your research on the gems later." I was initially annoyed, but that soon passed as I had a lot of time to think. The only reason that Magus wasn't able to do the exact same thing earlier was probably because I still had my Tartaric gem on my person after the explosion. So whatever happened to my leg had to be directly tied to the demon Will, and as soon as my gem was taken the shell was able to be removed. It got me thinking...
|
||||
|
||||
guide.BloodMagic.entry.demon.sentientGem.info.1=After a few days of some "well needed bed rest," prescribed and enforced by Magus, I decided to do a bit of research primarily on the sentient equipment that I have made so far. There is just so much that I do not know about the sentient sword as well as Demon Will in general. Sure, we know some of the theory, but considering that Magus and I were the ones that developed the theory in the first place it is hard to tell how accurate it is.\n\tFor this, I needed to get creative. Magus told me that whenever he takes an apprentice, he insists that they must learn another form of magic alongside the research that he is doing. Tiberius offered for me to learn Botany, but I scoffed at the idea - a bunch of flowers weren’t going to help me much when fighting demons!
|
||||
guide.BloodMagic.entry.demon.sentientGem.info.2=The Sentient Armour Gem is a toggleable item that is used to equip and unequip your Sentient Armour. When you right-click with the gem while you have a minimum of 16 Demon Will in your inventory, your armour will be replaced with a set of Sentient Armour that copies all of the enchants from the armour that you replaced - when you activate the gem again, your original armour is returned to you. This also works when you have no armour on at all to begin with.\n\tThe Sentient Armour initially acts as a simple set of iron armour, yielding no additional abilities besides protection. Similarly to other sentient tools, however, the armour provides more protection when you have more Demon Will in your possession. This makes the protection provided really powerful when you have a large quantity of Demon Will accumulated. The downside to this is that every hit you take will syphon a small bit of Demon Will from your Tartaric gems, and if you get too low your armour will revert back to its original form. Could be bad!
|
||||
guide.BloodMagic.entry.demon.routing.info=Item transport in Blood Magic comes from linking strands of Demonic Will between routing nodes, which act as conduits in order to transfer items from one inventory to another. To start off with, let us explain how each individual item works.\n\tEvery single routing system needs a Master Routing node, which acts as the brains of the system. An Input Routing node inputs items into your system, and an Output Routing node outputs items from your system, and a regular routing node doesn’t have any special function.\n\tTo form a network, you need to shift-click a node with your Node Router and then shift click another node that you want to connect. This links the two nodes together. As long as a node can trace some form of route to another node (and if it is connected to a Master Routing node) they can "talk" to each other.\n\tAs a rule of thumb, items are pulled from an inventory next to an input node and are pushed into an inventory next to an output node. In order to set what goes where, a filter should be used. By clicking on one of the buttons in the node’s interface you can select what goes into the inventory in the given direction (N indicates North, etc). If you place an Item Filter into the right-most slot of the node you can specify the quantities and types of items that the node may interact with based on the filter. If you set a filter on an input filter, you can only pull those types of items from the inventory (keeping at least the given amount if you specify a quantity). If you set a filter on an output filter, you can only push those types of items into the inventory, up to a max of the quantity specified.\n\tThere are four types of filters: \n\tPrecise - The item needs to be matched exactly, including NBT and metadata\n\tMod Item - The item matches if it is from one of the filered mods.\n\tIgnore NBT - The item filter does not take into account any NBT\n\tOre Dictionary - Any item that matches one of the ore dictionary references of the filters are allowed.\n\tIf you decrease the filter’s amount to 0, you can set so that the filter allows "Everything," as in any amount, for that particular filter.
|
Loading…
Reference in a new issue