mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 23:28:35 +01:00
Miner Functionality
This commit is contained in:
parent
2cac51952b
commit
99d0a413e9
2 changed files with 57 additions and 6 deletions
|
@ -18,9 +18,11 @@ import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.EnumRarity;
|
import net.minecraft.item.EnumRarity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
import net.minecraft.util.IIcon;
|
import net.minecraft.util.IIcon;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
@ -73,4 +75,17 @@ public class BlockMiner extends BlockContainerBase{
|
||||||
this.dropInventory(world, x, y, z);
|
this.dropInventory(world, x, y, z);
|
||||||
super.breakBlock(world, x, y, z, block, par6);
|
super.breakBlock(world, x, y, z, block, par6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){
|
||||||
|
if(!world.isRemote){
|
||||||
|
TileEntity tile = world.getTileEntity(x, y, z);
|
||||||
|
if(tile != null && tile instanceof TileEntityMiner){
|
||||||
|
player.addChatComponentMessage(new ChatComponentText(((TileEntityMiner)tile).storage.getEnergyStored()+"/"+((TileEntityMiner)tile).storage.getMaxEnergyStored()+" RF"));
|
||||||
|
player.addChatComponentMessage(new ChatComponentText("Mining at Y "+((TileEntityMiner)tile).layerAt+"."));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -12,52 +12,88 @@ package ellpeck.actuallyadditions.tile;
|
||||||
|
|
||||||
import cofh.api.energy.EnergyStorage;
|
import cofh.api.energy.EnergyStorage;
|
||||||
import cofh.api.energy.IEnergyReceiver;
|
import cofh.api.energy.IEnergyReceiver;
|
||||||
|
import ellpeck.actuallyadditions.util.WorldUtil;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.inventory.IInventory;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{
|
public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{
|
||||||
|
|
||||||
public EnergyStorage storage = new EnergyStorage(800000);
|
public EnergyStorage storage = new EnergyStorage(1000000);
|
||||||
|
public static final int ENERGY_USE_PER_BLOCK = 300;
|
||||||
|
|
||||||
|
public int layerAt;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity(){
|
public void updateEntity(){
|
||||||
super.updateEntity();
|
super.updateEntity();
|
||||||
if(!this.worldObj.isRemote){
|
if(!this.worldObj.isRemote){
|
||||||
this.mine(2);
|
if(this.ticksElapsed%350 == 0){
|
||||||
|
if(this.layerAt <= 0){
|
||||||
|
this.layerAt = this.yCoord-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mine(3)){
|
||||||
|
this.layerAt--;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mine(int range){
|
private boolean mine(int range){
|
||||||
|
TileEntity tileAbove = worldObj.getTileEntity(xCoord, yCoord+1, zCoord);
|
||||||
|
boolean mined = false;
|
||||||
for(int anX = -range; anX <= range; anX++){
|
for(int anX = -range; anX <= range; anX++){
|
||||||
for(int aZ = -range; aZ <= range; aZ++){
|
for(int aZ = -range; aZ <= range; aZ++){
|
||||||
for(int y = this.yCoord-1; y > 0; y--){
|
if(this.storage.getEnergyStored() >= ENERGY_USE_PER_BLOCK){
|
||||||
int x = this.xCoord+anX;
|
int x = this.xCoord+anX;
|
||||||
int z = this.zCoord+aZ;
|
int z = this.zCoord+aZ;
|
||||||
|
int y = this.layerAt;
|
||||||
|
|
||||||
Block block = this.worldObj.getBlock(x, y, z);
|
Block block = this.worldObj.getBlock(x, y, z);
|
||||||
int meta = this.worldObj.getBlockMetadata(x, y, z);
|
int meta = this.worldObj.getBlockMetadata(x, y, z);
|
||||||
if(block != null && !block.isAir(this.worldObj, x, y, z)){
|
if(block != null && !block.isAir(this.worldObj, x, y, z)){
|
||||||
if(block.getHarvestLevel(meta) <= 3){
|
if(block.getHarvestLevel(meta) <= 3F && block.getHarvestLevel(meta) >= 0F){
|
||||||
|
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
|
||||||
|
drops.addAll(block.getDrops(worldObj, x, y, z, meta, 0));
|
||||||
|
|
||||||
return;
|
if(tileAbove instanceof IInventory){
|
||||||
|
if(WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, false)){
|
||||||
|
worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block)+(meta << 12));
|
||||||
|
worldObj.setBlockToAir(x, y, z);
|
||||||
|
|
||||||
|
WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, true);
|
||||||
|
tileAbove.markDirty();
|
||||||
|
|
||||||
|
this.storage.extractEnergy(ENERGY_USE_PER_BLOCK, false);
|
||||||
|
mined = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return mined;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSyncableNBT(NBTTagCompound compound, boolean sync){
|
public void writeSyncableNBT(NBTTagCompound compound, boolean sync){
|
||||||
super.writeSyncableNBT(compound, sync);
|
super.writeSyncableNBT(compound, sync);
|
||||||
this.storage.writeToNBT(compound);
|
this.storage.writeToNBT(compound);
|
||||||
|
compound.setInteger("Layer", this.layerAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readSyncableNBT(NBTTagCompound compound, boolean sync){
|
public void readSyncableNBT(NBTTagCompound compound, boolean sync){
|
||||||
super.readSyncableNBT(compound, sync);
|
super.readSyncableNBT(compound, sync);
|
||||||
this.storage.readFromNBT(compound);
|
this.storage.readFromNBT(compound);
|
||||||
|
this.layerAt = compound.getInteger("Layer");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue