- Added the entries for the Skeleton Turret Array and the Updraft Array

- Added the Bounce Array
This commit is contained in:
WayofTime 2016-10-16 15:19:57 -04:00
parent 5cb5ec4264
commit e3c55da214
8 changed files with 233 additions and 6 deletions

View file

@ -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

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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();
}
}

View file

@ -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;

View file

@ -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)

View file

@ -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")));
}

View file

@ -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.