Digital Miners now have much better redstone & ComputerCraft support that puts into account all bounding blocks
This commit is contained in:
parent
b51e4dfd9f
commit
7bf94fb4ef
5 changed files with 185 additions and 5 deletions
|
@ -9,12 +9,17 @@ import net.minecraft.inventory.ISidedInventory;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import buildcraft.api.power.IPowerReceptor;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import dan200.computer.api.IPeripheral;
|
||||
|
||||
public interface IAdvancedBoundingBlock extends IBoundingBlock, ISidedInventory, IEnergySink, IStrictEnergyAcceptor, IPowerReceptor, IEnergyTile, IStrictEnergyStorage, IEnergyHandler
|
||||
public interface IAdvancedBoundingBlock extends IBoundingBlock, ISidedInventory, IEnergySink, IStrictEnergyAcceptor, IPowerReceptor, IEnergyTile, IStrictEnergyStorage, IEnergyHandler, IPeripheral
|
||||
{
|
||||
public int[] getBoundSlots(Coord4D location, int side);
|
||||
|
||||
public boolean canBoundInsert(Coord4D location, int i, ItemStack itemstack);
|
||||
|
||||
public boolean canBoundExtract(Coord4D location, int i, ItemStack itemstack, int j);
|
||||
|
||||
public void onPower();
|
||||
|
||||
public void onNoPower();
|
||||
}
|
||||
|
|
|
@ -60,6 +60,16 @@ public class BlockBounding extends Block
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, int id)
|
||||
{
|
||||
try {
|
||||
TileEntityBoundingBlock tileEntity = (TileEntityBoundingBlock)world.getBlockTileEntity(x, y, z);
|
||||
tileEntity.onNeighborChange(id);
|
||||
Block.blocksList[world.getBlockId(tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ)].onNeighborBlockChange(world, tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ, id);
|
||||
} catch(Exception e) {}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random random)
|
||||
|
|
|
@ -17,8 +17,11 @@ import buildcraft.api.power.IPowerReceptor;
|
|||
import buildcraft.api.power.PowerHandler;
|
||||
import buildcraft.api.power.PowerHandler.PowerReceiver;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import dan200.computer.api.IComputerAccess;
|
||||
import dan200.computer.api.ILuaContext;
|
||||
import dan200.computer.api.IPeripheral;
|
||||
|
||||
public class TileEntityAdvancedBoundingBlock extends TileEntityBoundingBlock implements ISidedInventory, IEnergySink, IStrictEnergyAcceptor, IPowerReceptor, IEnergyTile, IStrictEnergyStorage, IEnergyHandler
|
||||
public class TileEntityAdvancedBoundingBlock extends TileEntityBoundingBlock implements ISidedInventory, IEnergySink, IStrictEnergyAcceptor, IPowerReceptor, IEnergyTile, IStrictEnergyStorage, IEnergyHandler, IPeripheral
|
||||
{
|
||||
@Override
|
||||
public int getSizeInventory()
|
||||
|
@ -379,4 +382,92 @@ public class TileEntityAdvancedBoundingBlock extends TileEntityBoundingBlock imp
|
|||
|
||||
return (IAdvancedBoundingBlock)new Coord4D(mainX, mainY, mainZ, worldObj.provider.dimensionId).getTileEntity(worldObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPower()
|
||||
{
|
||||
super.onPower();
|
||||
|
||||
if(getInv() != null)
|
||||
{
|
||||
getInv().onPower();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoPower()
|
||||
{
|
||||
super.onNoPower();
|
||||
|
||||
if(getInv() != null)
|
||||
{
|
||||
getInv().onNoPower();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType()
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return getInv().getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getMethodNames()
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return getInv().getMethodNames();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws Exception
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return getInv().callMethod(computer, context, method, arguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAttachToSide(int side)
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return getInv().canAttachToSide(side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attach(IComputerAccess computer)
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
getInv().attach(computer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach(IComputerAccess computer)
|
||||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
getInv().detach(computer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
public int mainX;
|
||||
public int mainY;
|
||||
public int mainZ;
|
||||
|
||||
public boolean prevPower;
|
||||
|
||||
public void setMainLocation(int x, int y, int z)
|
||||
{
|
||||
|
@ -47,6 +49,36 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onNeighborChange(int id)
|
||||
{
|
||||
TileEntity tile = worldObj.getBlockTileEntity(mainX, mainY, mainZ);
|
||||
|
||||
if(tile instanceof TileEntityBasicBlock)
|
||||
{
|
||||
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)tile;
|
||||
|
||||
boolean power = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
|
||||
|
||||
if(prevPower != power)
|
||||
{
|
||||
if(power)
|
||||
{
|
||||
onPower();
|
||||
}
|
||||
else {
|
||||
onNoPower();
|
||||
}
|
||||
|
||||
prevPower = power;
|
||||
PacketHandler.sendPacket(Transmission.CLIENTS_DIM, new PacketTileEntity().setParams(Coord4D.get(tileEntity), tileEntity.getNetworkedData(new ArrayList())), tileEntity.worldObj.provider.dimensionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onPower() {}
|
||||
|
||||
public void onNoPower() {}
|
||||
|
||||
@Override
|
||||
public void handlePacketData(ByteArrayDataInput dataStream)
|
||||
|
@ -54,6 +86,7 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
mainX = dataStream.readInt();
|
||||
mainY = dataStream.readInt();
|
||||
mainZ = dataStream.readInt();
|
||||
prevPower = dataStream.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -64,6 +97,7 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
mainX = nbtTags.getInteger("mainX");
|
||||
mainY = nbtTags.getInteger("mainY");
|
||||
mainZ = nbtTags.getInteger("mainZ");
|
||||
prevPower = nbtTags.getBoolean("prevPower");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -74,6 +108,7 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
nbtTags.setInteger("mainX", mainX);
|
||||
nbtTags.setInteger("mainY", mainY);
|
||||
nbtTags.setInteger("mainZ", mainZ);
|
||||
nbtTags.setBoolean("prevPower", prevPower);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -82,6 +117,7 @@ public class TileEntityBoundingBlock extends TileEntity implements ITileNetwork
|
|||
data.add(mainX);
|
||||
data.add(mainY);
|
||||
data.add(mainZ);
|
||||
data.add(prevPower);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -92,6 +92,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
public boolean initCalc = false;
|
||||
|
||||
public int numPowering;
|
||||
|
||||
/** This machine's current RedstoneControl type. */
|
||||
public RedstoneControl controlType = RedstoneControl.DISABLED;
|
||||
|
||||
|
@ -135,7 +137,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
ChargeUtils.discharge(27, this);
|
||||
|
||||
if(running && getEnergy() >= getPerTick() && searcher.state == State.FINISHED && oresToMine.size() > 0)
|
||||
if(MekanismUtils.canFunction(this) && running && getEnergy() >= getPerTick() && searcher.state == State.FINISHED && oresToMine.size() > 0)
|
||||
{
|
||||
setActive(true);
|
||||
|
||||
|
@ -512,6 +514,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
running = nbtTags.getBoolean("running");
|
||||
delay = nbtTags.getInteger("delay");
|
||||
silkTouch = nbtTags.getBoolean("silkTouch");
|
||||
numPowering = nbtTags.getInteger("numPowering");
|
||||
searcher.state = State.values()[nbtTags.getInteger("state")];
|
||||
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
||||
inverse = nbtTags.getBoolean("inverse");
|
||||
|
@ -551,6 +554,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
nbtTags.setBoolean("running", running);
|
||||
nbtTags.setInteger("delay", delay);
|
||||
nbtTags.setBoolean("silkTouch", silkTouch);
|
||||
nbtTags.setInteger("numPowering", numPowering);
|
||||
nbtTags.setInteger("state", searcher.state.ordinal());
|
||||
nbtTags.setInteger("controlType", controlType.ordinal());
|
||||
nbtTags.setBoolean("inverse", inverse);
|
||||
|
@ -655,6 +659,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
isActive = dataStream.readBoolean();
|
||||
running = dataStream.readBoolean();
|
||||
silkTouch = dataStream.readBoolean();
|
||||
numPowering = dataStream.readInt();
|
||||
searcher.state = State.values()[dataStream.readInt()];
|
||||
|
||||
if(dataStream.readBoolean())
|
||||
|
@ -688,6 +693,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
isActive = dataStream.readBoolean();
|
||||
running = dataStream.readBoolean();
|
||||
silkTouch = dataStream.readBoolean();
|
||||
numPowering = dataStream.readInt();
|
||||
searcher.state = State.values()[dataStream.readInt()];
|
||||
|
||||
if(dataStream.readBoolean())
|
||||
|
@ -736,6 +742,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
data.add(isActive);
|
||||
data.add(running);
|
||||
data.add(silkTouch);
|
||||
data.add(numPowering);
|
||||
data.add(searcher.state.ordinal());
|
||||
|
||||
if(replaceStack != null)
|
||||
|
@ -789,6 +796,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
data.add(isActive);
|
||||
data.add(running);
|
||||
data.add(silkTouch);
|
||||
data.add(numPowering);
|
||||
data.add(searcher.state.ordinal());
|
||||
|
||||
if(replaceStack != null)
|
||||
|
@ -830,6 +838,12 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
return MekanismUtils.getMaxEnergy(getEnergyMultiplier(), MAX_ELECTRICITY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPowered()
|
||||
{
|
||||
return redstone || numPowering > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RedstoneControl getControlType()
|
||||
{
|
||||
|
@ -1046,14 +1060,26 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPower()
|
||||
{
|
||||
numPowering++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoPower()
|
||||
{
|
||||
numPowering--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType()
|
||||
{
|
||||
return "Digital Miner";
|
||||
return getInvName();
|
||||
}
|
||||
|
||||
public String[] names = {"setRadius", "setMin", "setMax", "setReplace", "addFilter", "removeFilter", "addOreFilter", "removeOreFilter"};
|
||||
public String[] names = {"setRadius", "setMin", "setMax", "setReplace", "addFilter", "removeFilter", "addOreFilter", "removeOreFilter", "reset", "start", "stop"};
|
||||
|
||||
@Override
|
||||
public String[] getMethodNames()
|
||||
|
@ -1170,6 +1196,18 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(method == 8)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
else if(method == 9)
|
||||
{
|
||||
start();
|
||||
}
|
||||
else if(method == 10)
|
||||
{
|
||||
stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue