Skip to content

Commit

Permalink
Implemented dispenser behavior for firing arrows.
Browse files Browse the repository at this point in the history
  • Loading branch information
max-te committed Sep 27, 2013
1 parent abdd27c commit d83785a
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/tconstruct/common/TContent.java
Expand Up @@ -1837,6 +1837,8 @@ public void oreRegistry()

BlockDispenser.dispenseBehaviorRegistry.putObject(titleIcon, new TDispenserBehaviorSpawnEgg());

BlockDispenser.dispenseBehaviorRegistry.putObject(arrow, new TDispenserBehaviorArrow());

//Vanilla stuff
OreDictionary.registerOre("slimeball", new ItemStack(Item.slimeBall));
OreDictionary.registerOre("slimeball", new ItemStack(strangeFood, 1, 0));
Expand Down
9 changes: 9 additions & 0 deletions src/tconstruct/entity/projectile/ArrowEntity.java
Expand Up @@ -52,6 +52,15 @@ public ArrowEntity(World world, EntityLivingBase living, float baseSpeed, ItemSt
this.baseDamage = toolTag.getInteger("Attack");
}

public ArrowEntity(World world, double x, double y, double z, ItemStack stack)
{
super(world, x, y, z);
this.returnStack = stack;
NBTTagCompound toolTag = stack.getTagCompound().getCompoundTag("InfiTool");
this.mass = toolTag.getFloat("Mass");
this.baseDamage = toolTag.getInteger("Attack");
}

@Override
public void onCollideWithPlayer (EntityPlayer par1EntityPlayer)
{
Expand Down
45 changes: 45 additions & 0 deletions src/tconstruct/util/TDispenserBehaviorArrow.java
@@ -0,0 +1,45 @@
package tconstruct.util;

import net.minecraft.block.BlockDispenser;
import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
import net.minecraft.dispenser.IBlockSource;
import net.minecraft.dispenser.IPosition;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import tconstruct.entity.projectile.ArrowEntity;

public class TDispenserBehaviorArrow extends BehaviorDefaultDispenseItem
{

public ItemStack dispenseStack(IBlockSource dispenser, ItemStack stack)
{
World world = dispenser.getWorld();
IPosition iposition = BlockDispenser.getIPositionFromBlockSource(dispenser);
EnumFacing enumfacing = BlockDispenser.getFacing(dispenser.getBlockMetadata());

ItemStack arrowItem = stack.splitStack(1);

ArrowEntity projectile = new ArrowEntity(world, iposition.getX(), iposition.getY(), iposition.getZ(), arrowItem);
projectile.canBePickedUp = 1;
projectile.setThrowableHeading((double)enumfacing.getFrontOffsetX(), (double)((float)enumfacing.getFrontOffsetY() + 0.1F), (double)enumfacing.getFrontOffsetZ(), this.func_82500_b(), this.func_82498_a());
world.spawnEntityInWorld(projectile);

return stack;
}

protected void playDispenseSound(IBlockSource dispenser)
{
dispenser.getWorld().playAuxSFX(1002, dispenser.getXInt(), dispenser.getYInt(), dispenser.getZInt(), 0);
}

protected float func_82498_a()
{
return 6.0F;
}

protected float func_82500_b()
{
return 1.1F;
}
}

0 comments on commit d83785a

Please sign in to comment.