- Added the entries for the Skeleton Turret Array and the Updraft Array
- Added the Bounce Array
This commit is contained in:
parent
5cb5ec4264
commit
e3c55da214
|
@ -2,16 +2,17 @@
|
|||
Version 2.1.0-66
|
||||
------------------------------------------------------
|
||||
- Made it so that when you acquire a Living Armour Upgrade from a Tome, it raises the corresponding Stat Tracker up to that upgrade level.
|
||||
- Added a potion effect called "(-) Immunity", which allows the training of Living Armour Downgrades. This potion is crafted using a Draft of Angelus with a potion flask. Check the uses of the flask!
|
||||
- Added some more framework for the Living Armour Downgrades.
|
||||
- Modified the Grim Reaper's Sprint so it is better at later levels.
|
||||
- Added a Repairing Living Armour Upgrade (trained by damaging the chestplate of the Living Armour while you have a full set on - it repairs all of your armour pieces over time)
|
||||
- Modified the Dwarven Might skill to better change the mining speed when mining.
|
||||
- Added a Dig Slowdown armour downgrade called "Weakened Pick", trained by having weakness on while mining.
|
||||
- Added a Dig Slowdown armour downgrade called "Weakened Pick".
|
||||
- Added the framework for a ritual that grants downgrades (instead of the potion method).
|
||||
- Fixed the recipes for some of the Demon Will blocks
|
||||
- Added the Sigil of Elasticity, the Sigil of the Claw, and the Sigil of Winter's Breath.
|
||||
- Changed most of the BlockString blocks to a BlockEnum in order to solve a loading issue with schematics.
|
||||
- Added the entries for the Skeleton Turret Array and the Updraft Array
|
||||
- Added the Bounce Array
|
||||
|
||||
------------------------------------------------------
|
||||
Version 2.1.0-65
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package WayofTime.bloodmagic.alchemyArray;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
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 AlchemyArrayEffectBounce extends AlchemyArrayEffect
|
||||
{
|
||||
public AlchemyArrayEffectBounce(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)
|
||||
{
|
||||
if (entity.isSneaking())
|
||||
{
|
||||
return;
|
||||
} else if (entity.motionY < 0.0D)
|
||||
{
|
||||
entity.motionY = -entity.motionY;
|
||||
|
||||
if (!(entity instanceof EntityLivingBase))
|
||||
{
|
||||
entity.motionY *= 0.8D;
|
||||
}
|
||||
|
||||
entity.fallDistance = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlchemyArrayEffect getNewCopy()
|
||||
{
|
||||
return new AlchemyArrayEffectBounce(key);
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ import net.minecraft.block.BlockContainer;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
package WayofTime.bloodmagic.client.render.alchemyArray;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.VertexBuffer;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.tile.TileAlchemyArray;
|
||||
|
||||
public class SingleAlchemyCircleRenderer extends AlchemyCircleRenderer
|
||||
{
|
||||
public float offsetFromFace = -0.9f;
|
||||
|
||||
public SingleAlchemyCircleRenderer()
|
||||
{
|
||||
this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"));
|
||||
}
|
||||
|
||||
public SingleAlchemyCircleRenderer(ResourceLocation arrayResource)
|
||||
{
|
||||
super(arrayResource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getSizeModifier(float craftTime)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getRotation(float craftTime)
|
||||
{
|
||||
float offset = 2;
|
||||
if (craftTime >= offset)
|
||||
{
|
||||
float modifier = (craftTime - offset) * 2f;
|
||||
return modifier * 1f;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderAt(TileEntity tile, double x, double y, double z, float craftTime)
|
||||
{
|
||||
if (!(tile instanceof TileAlchemyArray))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
TileAlchemyArray tileArray = (TileAlchemyArray) tile;
|
||||
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
VertexBuffer wr = tessellator.getBuffer();
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
// float rot = (float)(this.worldObj.provider.getWorldTime() % (360 /
|
||||
// this.rotationspeed) * this.rotationspeed) + this.rotationspeed * f;
|
||||
float rot = getRotation(craftTime);
|
||||
|
||||
float size = 1.0F * getSizeModifier(craftTime);
|
||||
|
||||
GlStateManager.disableCull();
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(770, 1);
|
||||
|
||||
GlStateManager.translate(x, y, z);
|
||||
|
||||
// Specify which face this "circle" is located on
|
||||
EnumFacing sideHit = EnumFacing.UP;
|
||||
EnumFacing rotation = tileArray.getRotation();
|
||||
|
||||
GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace);
|
||||
|
||||
switch (sideHit)
|
||||
{
|
||||
case DOWN:
|
||||
GlStateManager.translate(0, 0, 1);
|
||||
GlStateManager.rotate(-90.0f, 1, 0, 0);
|
||||
break;
|
||||
case EAST:
|
||||
GlStateManager.rotate(-90.0f, 0, 1, 0);
|
||||
GlStateManager.translate(0, 0, -1);
|
||||
break;
|
||||
case NORTH:
|
||||
break;
|
||||
case SOUTH:
|
||||
GlStateManager.rotate(180.0f, 0, 1, 0);
|
||||
GlStateManager.translate(-1, 0, -1);
|
||||
break;
|
||||
case UP:
|
||||
GlStateManager.translate(0, 1, 0);
|
||||
GlStateManager.rotate(90.0f, 1, 0, 0);
|
||||
break;
|
||||
case WEST:
|
||||
GlStateManager.translate(0, 0, 1);
|
||||
GlStateManager.rotate(90.0f, 0, 1, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime));
|
||||
GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1);
|
||||
|
||||
// Bind the texture to the circle
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource);
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.rotate(rot, 0, 0, 1);
|
||||
double var31 = 0.0D;
|
||||
double var33 = 1.0D;
|
||||
double var35 = 0;
|
||||
double var37 = 1;
|
||||
|
||||
GlStateManager.color(1f, 1f, 1f, 1f);
|
||||
wr.begin(7, DefaultVertexFormats.POSITION_TEX);
|
||||
// wr.setBrightness(200);
|
||||
wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex();
|
||||
wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex();
|
||||
wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex();
|
||||
wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex();
|
||||
tessellator.draw();
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
|
||||
// GlStateManager.depthMask(true);
|
||||
GlStateManager.disableBlend();
|
||||
GlStateManager.enableCull();
|
||||
// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
|
@ -113,8 +113,7 @@ public class StaticAlchemyCircleRenderer extends AlchemyCircleRenderer
|
|||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.rotate(rot, 0, 1, 0);
|
||||
// GlStateManager.rotate(secondaryRot, 1, 0, 0);
|
||||
// GlStateManager.rotate(secondaryRot, 0, 1, 0);
|
||||
|
||||
double var31 = 0.0D;
|
||||
double var33 = 1.0D;
|
||||
double var35 = 0;
|
||||
|
|
|
@ -53,6 +53,16 @@ public class CategoryAlchemy
|
|||
speedPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "speed" + ".info"), 370));
|
||||
entries.put(new ResourceLocation(keyBase + "speed"), new EntryText(speedPages, TextHelper.localize(keyBase + "speed"), true));
|
||||
|
||||
List<IPage> updraftPages = new ArrayList<IPage>();
|
||||
|
||||
PageAlchemyArray updraftRecipePage = BookUtils.getAlchemyPage("updraft");
|
||||
if (updraftRecipePage != null)
|
||||
{
|
||||
updraftPages.add(updraftRecipePage);
|
||||
}
|
||||
updraftPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "updraft" + ".info"), 370));
|
||||
entries.put(new ResourceLocation(keyBase + "updraft"), new EntryText(updraftPages, TextHelper.localize(keyBase + "updraft"), true));
|
||||
|
||||
List<IPage> turretPages = new ArrayList<IPage>();
|
||||
|
||||
PageAlchemyArray turretRecipePage = BookUtils.getAlchemyPage("skeletonTurret");
|
||||
|
@ -63,6 +73,16 @@ public class CategoryAlchemy
|
|||
turretPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "turret" + ".info"), 370));
|
||||
entries.put(new ResourceLocation(keyBase + "turret"), new EntryText(turretPages, TextHelper.localize(keyBase + "turret"), true));
|
||||
|
||||
List<IPage> bouncePages = new ArrayList<IPage>();
|
||||
|
||||
PageAlchemyArray bounceRecipePage = BookUtils.getAlchemyPage("bounce");
|
||||
if (bounceRecipePage != null)
|
||||
{
|
||||
bouncePages.add(bounceRecipePage);
|
||||
}
|
||||
bouncePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bounce" + ".info"), 370));
|
||||
entries.put(new ResourceLocation(keyBase + "bounce"), new EntryText(bouncePages, TextHelper.localize(keyBase + "bounce"), true));
|
||||
|
||||
for (Entry<ResourceLocation, EntryAbstract> entry : entries.entrySet())
|
||||
{
|
||||
for (IPage page : entry.getValue().pageList)
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBounce;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret;
|
||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectUpdraft;
|
||||
|
@ -43,11 +44,11 @@ import WayofTime.bloodmagic.api.registry.LivingArmourDowngradeRecipeRegistry;
|
|||
import WayofTime.bloodmagic.api.registry.OrbRegistry;
|
||||
import WayofTime.bloodmagic.api.registry.TartaricForgeRecipeRegistry;
|
||||
import WayofTime.bloodmagic.api.ritual.EnumRuneType;
|
||||
import WayofTime.bloodmagic.block.BlockBloodRune;
|
||||
import WayofTime.bloodmagic.block.enums.EnumBloodRune;
|
||||
import WayofTime.bloodmagic.client.render.alchemyArray.AttractorAlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.client.render.alchemyArray.BindingAlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.client.render.alchemyArray.DualAlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.client.render.alchemyArray.SingleAlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.client.render.alchemyArray.StaticAlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.compress.AdvancedCompressionHandler;
|
||||
import WayofTime.bloodmagic.compress.BaseCompressionHandler;
|
||||
|
@ -296,6 +297,7 @@ 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.SLIME_BALL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectBounce("bounce"), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BounceArray.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")));
|
||||
}
|
||||
|
|
|
@ -177,6 +177,9 @@ guide.BloodMagic.entry.demon.gauge.info=In order to tell how much Will you have
|
|||
guide.BloodMagic.entry.alchemy.intro=Introduction
|
||||
guide.BloodMagic.entry.alchemy.ash=Arcane Ash
|
||||
guide.BloodMagic.entry.alchemy.speed=Movement Array
|
||||
guide.BloodMagic.entry.alchemy.updraft=Updraft Array
|
||||
guide.BloodMagic.entry.alchemy.bounce=Bouncing Array
|
||||
guide.BloodMagic.entry.alchemy.turret=Skeleton Turret Array
|
||||
|
||||
|
||||
|
||||
|
@ -185,4 +188,7 @@ guide.BloodMagic.entry.alchemy.speed=Movement Array
|
|||
guide.BloodMagic.entry.alchemy.intro.info=My name is Vlad Highborn, and I am a Blood Mage. I have studied the intricate workings of alchemy and the process of "Equivalent Exchange," which governs all aspects of magic. Basically, you cannot create something from nothing, although many have tried when searching for a particular stone. That obviously didn't end well, because people are clamoring for a fake variant even today. Of course simply saying that I am an alchemist isn't enough, because one of the main things I do is study Blood Magic with The Ritual Master and The Architect, both of whom have achieved those titles by their own merits. Magus and Tiberius have been busy recording their own works over the years, although I don't think Magus has everything written down in a book - I have yet to find any actual proof.\n\tMy book deals with all things alchemical in Blood Magic. From the uses of Arcane Ash to the intricate workings of the Alchemy Table, you will find everything you need to know about some of the more complex elements in the world. Not everything you need to know is in this book - for a full understanding about Blood Magic, you will need to read the other entries in this entire tome.\n\tBut for now, I hope you enjoy my research notes. You shan't find any lies between these covers.
|
||||
guide.BloodMagic.entry.alchemy.ash.info=Arcane Ash is necessary in order to create alchemy arrays, powerful circles that are able to provide various effects. This ash is crafted using the Hellfire Forge and Demon Will, so if you are new to this concept please consult the "Demon Kin." \n\tThe ash has a total of twenty uses before you need to craft another. When you right click on the ground (or a wall, though it will only render one direction), you will inscribe a simple circle out of ash. If you click on the ash again with an item, it will be "placed inside of the ash" - assuming that this item is valid, the circle will change shape to represent that it is ready for the next item. If it doesn't change shape, then you did something wrong.\n\tOnce it has changed shape, you can then place in the secondary item. If this item matches with the first item, the circle will start rotating and performing different actions depending on the recipe it is working on. \n\tEvery non-crafting effect that can be performed using these arrays can be found in this book, and even if the recipe changes through 3rd party means it will show updated here. The items shown are the order they need to be placed in.
|
||||
guide.BloodMagic.entry.alchemy.speed.info=The Movement Array creates a small vortex of air at its center and uses a small amount of energy to heat it up. After that, once an animal or any other type of entity walks into its area of effect, they will be launched forward in the direction that it was placed in by the force of the air. What is more, if fallen onto from a large height, the array will eliminate the fall damage that would have incurred. Just be prepared for some mild motion afterward. \n\tThe direction of motion is in the direction of the arrow on the array.\n\tIt should also be noted that you will gain a much greater distance if you fall or jump onto the array than if you simply walked into its area. This has to do with the turbulence from your movements causing a much greater reaction.
|
||||
guide.BloodMagic.entry.alchemy..info=
|
||||
guide.BloodMagic.entry.alchemy.updraft.info=Using the exact same principles as the Movement Array, this array launches the entity that steps on top of it vertically in the air. Naturally, any user would have to be careful because the way down may be a little arduous!
|
||||
guide.BloodMagic.entry.alchemy.bounce.info=By using a source of heat near its center that is pushed downward, the array attempts to soften the ground underneath it. After it has done this, it then converts carbon and hydrogen into a rubbery material inside of the earth. This combination causes any entity to impact the surface to bounce in the air and eliminating the fall damage that would otherwise be sustained. This bouncing can be stopped by simply shifting, and it will still cushion your fall.
|
||||
guide.BloodMagic.entry.alchemy.turret.info=By utilizing the Demon Will that is still controlling a mob, you can take over the mind of a skeleton in order to make it do your bidding. If a skeleton finds itself inside of the area of this array, it will act as a sentry and attack hostile monsters nearby. Unfortunately this array is still highly experimental, so it may not work very well or consistently.
|
||||
|
||||
|
|
Loading…
Reference in a new issue