- Added the Furnace Array (name pending), which takes health from nearby players to power adjacent furnaces. Not covered by standard medical insurance.
This commit is contained in:
parent
bf2fe1166e
commit
57c25f0064
5 changed files with 231 additions and 49 deletions
|
@ -0,0 +1,138 @@
|
|||
package WayofTime.bloodmagic.alchemyArray;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockFurnace;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.FurnaceRecipes;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityFurnace;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import WayofTime.bloodmagic.util.PleaseStopUsingMe;
|
||||
|
||||
public class AlchemyArrayEffectFurnaceFuel extends AlchemyArrayEffect
|
||||
{
|
||||
static double radius = 10;
|
||||
static int burnTicksAdded = 201; //Set to +1 more than it needs to be due to a hacky method - basically done so that the array doesn't double dip your health if you only add one item.
|
||||
|
||||
public AlchemyArrayEffectFurnaceFuel(String key)
|
||||
{
|
||||
super(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(TileEntity tile, int ticksActive)
|
||||
{
|
||||
BlockPos pos = tile.getPos();
|
||||
World world = tile.getWorld();
|
||||
EntityPlayer sacrifice = null;
|
||||
|
||||
for (EnumFacing face : EnumFacing.VALUES)
|
||||
{
|
||||
BlockPos furnacePos = pos.offset(face);
|
||||
Block block = world.getBlockState(furnacePos).getBlock();
|
||||
if (block != Blocks.FURNACE) //This will only work vanilla furnaces. No others!
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
TileEntity bottomTile = world.getTileEntity(furnacePos);
|
||||
if (bottomTile instanceof TileEntityFurnace)
|
||||
{
|
||||
TileEntityFurnace furnaceTile = (TileEntityFurnace) bottomTile;
|
||||
if (canFurnaceSmelt(furnaceTile) && !furnaceTile.isBurning())
|
||||
{
|
||||
if (sacrifice == null || sacrifice.isDead)
|
||||
{
|
||||
AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius);
|
||||
List<EntityPlayer> playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb);
|
||||
for (EntityPlayer player : playerList)
|
||||
{
|
||||
if (!player.isDead)
|
||||
{
|
||||
sacrifice = player;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addFuelTime(furnaceTile, world, furnacePos, burnTicksAdded))
|
||||
{
|
||||
if (!sacrifice.capabilities.isCreativeMode)
|
||||
{
|
||||
sacrifice.hurtResistantTime = 0;
|
||||
sacrifice.attackEntityFrom(PleaseStopUsingMe.damageSource, 1.0F); //No.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean addFuelTime(TileEntityFurnace furnaceTile, World world, BlockPos furnacePos, int cookTime)
|
||||
{
|
||||
furnaceTile.setField(0, cookTime);
|
||||
BlockFurnace.setState(true, world, furnacePos);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean canFurnaceSmelt(TileEntityFurnace furnaceTile)
|
||||
{
|
||||
ItemStack burnStack = furnaceTile.getStackInSlot(0);
|
||||
if (burnStack.isEmpty())
|
||||
{
|
||||
return false;
|
||||
} else
|
||||
{
|
||||
ItemStack resultStack = FurnaceRecipes.instance().getSmeltingResult(burnStack);
|
||||
|
||||
if (resultStack.isEmpty())
|
||||
{
|
||||
return false;
|
||||
} else
|
||||
{
|
||||
ItemStack finishStack = furnaceTile.getStackInSlot(2);
|
||||
|
||||
if (finishStack.isEmpty())
|
||||
{
|
||||
return true;
|
||||
} else if (!finishStack.isItemEqual(resultStack))
|
||||
{
|
||||
return false;
|
||||
} else if (finishStack.getCount() + resultStack.getCount() <= furnaceTile.getInventoryStackLimit() && finishStack.getCount() + resultStack.getCount() <= finishStack.getMaxStackSize()) // Forge fix: make furnace respect stack sizes in furnace recipes
|
||||
{
|
||||
return true;
|
||||
} else
|
||||
{
|
||||
return finishStack.getCount() + resultStack.getCount() <= resultStack.getMaxStackSize(); // Forge fix: make furnace respect stack sizes in furnace recipes
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlchemyArrayEffect getNewCopy()
|
||||
{
|
||||
return new AlchemyArrayEffectFurnaceFuel(key);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue