Step 1 of another Digital Miner refactor
This commit is contained in:
parent
1a179b914c
commit
73be8c65d7
5 changed files with 234 additions and 104 deletions
|
@ -9,6 +9,7 @@ import mekanism.client.gui.GuiEnergyInfo.IInfoHandler;
|
||||||
import mekanism.common.PacketHandler;
|
import mekanism.common.PacketHandler;
|
||||||
import mekanism.common.PacketHandler.Transmission;
|
import mekanism.common.PacketHandler.Transmission;
|
||||||
import mekanism.common.inventory.container.ContainerDigitalMiner;
|
import mekanism.common.inventory.container.ContainerDigitalMiner;
|
||||||
|
import mekanism.common.miner.ThreadMinerSearch.State;
|
||||||
import mekanism.common.network.PacketDigitalMinerGui;
|
import mekanism.common.network.PacketDigitalMinerGui;
|
||||||
import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket;
|
import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket;
|
||||||
import mekanism.common.network.PacketTileEntity;
|
import mekanism.common.network.PacketTileEntity;
|
||||||
|
@ -66,21 +67,21 @@ public class GuiDigitalMiner extends GuiMekanism
|
||||||
buttonList.clear();
|
buttonList.clear();
|
||||||
startButton = new GuiButton(0, guiWidth + 69, guiHeight + 17, 60, 20, MekanismUtils.localize("gui.start"));
|
startButton = new GuiButton(0, guiWidth + 69, guiHeight + 17, 60, 20, MekanismUtils.localize("gui.start"));
|
||||||
|
|
||||||
if(tileEntity.running)
|
if(tileEntity.searcher.state != State.IDLE && tileEntity.running)
|
||||||
{
|
{
|
||||||
startButton.enabled = false;
|
startButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
stopButton = new GuiButton(1, guiWidth + 69, guiHeight + 37, 60, 20, MekanismUtils.localize("gui.stop"));
|
stopButton = new GuiButton(1, guiWidth + 69, guiHeight + 37, 60, 20, MekanismUtils.localize("gui.stop"));
|
||||||
|
|
||||||
if(!tileEntity.running)
|
if(tileEntity.searcher.state == State.IDLE || !tileEntity.running)
|
||||||
{
|
{
|
||||||
stopButton.enabled = false;
|
stopButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
configButton = new GuiButton(2, guiWidth + 69, guiHeight + 57, 60, 20, MekanismUtils.localize("gui.config"));
|
configButton = new GuiButton(2, guiWidth + 69, guiHeight + 57, 60, 20, MekanismUtils.localize("gui.config"));
|
||||||
|
|
||||||
if(tileEntity.running || tileEntity.searched > 0)
|
if(tileEntity.searcher.state != State.IDLE)
|
||||||
{
|
{
|
||||||
configButton.enabled = false;
|
configButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +121,7 @@ public class GuiDigitalMiner extends GuiMekanism
|
||||||
{
|
{
|
||||||
super.updateScreen();
|
super.updateScreen();
|
||||||
|
|
||||||
if(tileEntity.running)
|
if(tileEntity.searcher.state != State.IDLE && tileEntity.running)
|
||||||
{
|
{
|
||||||
startButton.enabled = false;
|
startButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
@ -128,7 +129,7 @@ public class GuiDigitalMiner extends GuiMekanism
|
||||||
startButton.enabled = true;
|
startButton.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!tileEntity.running)
|
if(tileEntity.searcher.state == State.IDLE || !tileEntity.running)
|
||||||
{
|
{
|
||||||
stopButton.enabled = false;
|
stopButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +137,7 @@ public class GuiDigitalMiner extends GuiMekanism
|
||||||
stopButton.enabled = true;
|
stopButton.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tileEntity.running || tileEntity.searched > 0)
|
if(tileEntity.searcher.state != State.IDLE)
|
||||||
{
|
{
|
||||||
configButton.enabled = false;
|
configButton.enabled = false;
|
||||||
}
|
}
|
||||||
|
@ -155,13 +156,14 @@ public class GuiDigitalMiner extends GuiMekanism
|
||||||
fontRenderer.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040);
|
fontRenderer.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040);
|
||||||
|
|
||||||
fontRenderer.drawString(tileEntity.running ? MekanismUtils.localize("gui.digitalMiner.running") : MekanismUtils.localize("gui.idle"), 9, 10, 0x00CD00);
|
fontRenderer.drawString(tileEntity.running ? MekanismUtils.localize("gui.digitalMiner.running") : MekanismUtils.localize("gui.idle"), 9, 10, 0x00CD00);
|
||||||
|
fontRenderer.drawString(tileEntity.searcher.state.desc, 9, 19, 0x00CD00);
|
||||||
|
|
||||||
fontRenderer.drawString(MekanismUtils.localize("gui.eject") + ": " + MekanismUtils.localize("gui." + (tileEntity.doEject ? "on" : "off")), 9, 30, 0x00CD00);
|
fontRenderer.drawString(MekanismUtils.localize("gui.eject") + ": " + MekanismUtils.localize("gui." + (tileEntity.doEject ? "on" : "off")), 9, 30, 0x00CD00);
|
||||||
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.pull") + ": " + MekanismUtils.localize("gui." + (tileEntity.doPull ? "on" : "off")), 9, 39, 0x00CD00);
|
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.pull") + ": " + MekanismUtils.localize("gui." + (tileEntity.doPull ? "on" : "off")), 9, 39, 0x00CD00);
|
||||||
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.silk") + ": " + MekanismUtils.localize("gui." + (tileEntity.silkTouch ? "on" : "off")), 9, 48, 0x00CD00);
|
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.silk") + ": " + MekanismUtils.localize("gui." + (tileEntity.silkTouch ? "on" : "off")), 9, 48, 0x00CD00);
|
||||||
|
|
||||||
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.searched") + ":", 9, 59, 0x00CD00);
|
fontRenderer.drawString(MekanismUtils.localize("gui.digitalMiner.toMine") + ":", 9, 59, 0x00CD00);
|
||||||
fontRenderer.drawString("" + tileEntity.searched, 9, 68, 0x00CD00);
|
fontRenderer.drawString("" + tileEntity.clientToMine, 9, 68, 0x00CD00);
|
||||||
|
|
||||||
if(tileEntity.replaceStack != null)
|
if(tileEntity.replaceStack != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,20 +82,16 @@ public class ItemProxy extends Item
|
||||||
public void registerIcons(IconRegister register) {}
|
public void registerIcons(IconRegister register) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean flag)
|
public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5)
|
||||||
{
|
{
|
||||||
if(entity instanceof EntityPlayer)
|
if (par3Entity instanceof EntityPlayer)
|
||||||
{
|
{
|
||||||
EntityPlayer player = (EntityPlayer)entity;
|
EntityPlayer player = (EntityPlayer) par3Entity;
|
||||||
|
for (Object o : player.inventoryContainer.inventorySlots)
|
||||||
for(Object o : player.inventoryContainer.inventorySlots)
|
|
||||||
{
|
{
|
||||||
Slot s = (Slot)o;
|
Slot s = (Slot) o;
|
||||||
|
if (s.getStack() != null && s.getStack().getItem() == this)
|
||||||
if(s.getStack() != null && s.getStack().getItem() == this)
|
|
||||||
{
|
|
||||||
player.inventory.decrStackSize(s.slotNumber, 64);
|
player.inventory.decrStackSize(s.slotNumber, 64);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
111
common/mekanism/common/miner/ThreadMinerSearch.java
Normal file
111
common/mekanism/common/miner/ThreadMinerSearch.java
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
package mekanism.common.miner;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import mekanism.api.Coord4D;
|
||||||
|
import mekanism.common.IBoundingBlock;
|
||||||
|
import mekanism.common.tile.TileEntityDigitalMiner;
|
||||||
|
import mekanism.common.util.MekanismUtils;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
public class ThreadMinerSearch extends Thread
|
||||||
|
{
|
||||||
|
public TileEntityDigitalMiner tileEntity;
|
||||||
|
|
||||||
|
public State state = State.IDLE;
|
||||||
|
|
||||||
|
public ThreadMinerSearch(TileEntityDigitalMiner tile)
|
||||||
|
{
|
||||||
|
tileEntity = tile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
state = State.SEARCHING;
|
||||||
|
|
||||||
|
if(tileEntity.filters.isEmpty())
|
||||||
|
{
|
||||||
|
state = State.FINISHED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int y = tileEntity.maxY; y >= tileEntity.minY; y--)
|
||||||
|
{
|
||||||
|
for(int x = tileEntity.xCoord-tileEntity.radius; x <= tileEntity.xCoord+tileEntity.radius; x++)
|
||||||
|
{
|
||||||
|
for(int z = tileEntity.zCoord-tileEntity.radius; z <= tileEntity.zCoord+tileEntity.radius; z++)
|
||||||
|
{
|
||||||
|
if(tileEntity.isInvalid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Coord4D.get(tileEntity).equals(new Coord4D(x, y, z, tileEntity.worldObj.provider.dimensionId)))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(new Coord4D(x, y, z, tileEntity.worldObj.provider.dimensionId).getTileEntity(tileEntity.worldObj) instanceof IBoundingBlock)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int blockID = tileEntity.worldObj.getBlockId(x, y, z);
|
||||||
|
int meta = tileEntity.worldObj.getBlockMetadata(x, y, z);
|
||||||
|
|
||||||
|
if(blockID != 0 && blockID != Block.bedrock.blockID)
|
||||||
|
{
|
||||||
|
ItemStack stack = new ItemStack(blockID, 1, meta);
|
||||||
|
|
||||||
|
if(tileEntity.replaceStack != null && tileEntity.replaceStack.isItemEqual(stack))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasFilter = false;
|
||||||
|
|
||||||
|
for(MinerFilter filter : tileEntity.filters)
|
||||||
|
{
|
||||||
|
if(filter.canFilter(stack))
|
||||||
|
{
|
||||||
|
hasFilter = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tileEntity.inverse ? !hasFilter : hasFilter)
|
||||||
|
{
|
||||||
|
tileEntity.oresToMine.add(new Coord4D(x, y, z, tileEntity.worldObj.provider.dimensionId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.shuffle(tileEntity.oresToMine);
|
||||||
|
|
||||||
|
state = State.FINISHED;
|
||||||
|
MekanismUtils.saveChunk(tileEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset()
|
||||||
|
{
|
||||||
|
state = State.IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum State
|
||||||
|
{
|
||||||
|
IDLE("Not ready"),
|
||||||
|
SEARCHING("Searching"),
|
||||||
|
PAUSED("Paused"),
|
||||||
|
FINISHED("Ready");
|
||||||
|
|
||||||
|
public String desc;
|
||||||
|
|
||||||
|
private State(String s)
|
||||||
|
{
|
||||||
|
desc = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +1,15 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.common.HashList;
|
import mekanism.common.HashList;
|
||||||
import mekanism.common.IActiveState;
|
import mekanism.common.IActiveState;
|
||||||
import mekanism.common.IAdvancedBoundingBlock;
|
import mekanism.common.IAdvancedBoundingBlock;
|
||||||
import mekanism.common.IBoundingBlock;
|
|
||||||
import mekanism.common.ILogisticalTransporter;
|
import mekanism.common.ILogisticalTransporter;
|
||||||
import mekanism.common.IRedstoneControl;
|
import mekanism.common.IRedstoneControl;
|
||||||
import mekanism.common.IUpgradeTile;
|
import mekanism.common.IUpgradeTile;
|
||||||
|
@ -21,6 +22,8 @@ import mekanism.common.inventory.container.ContainerNull;
|
||||||
import mekanism.common.miner.MItemStackFilter;
|
import mekanism.common.miner.MItemStackFilter;
|
||||||
import mekanism.common.miner.MOreDictFilter;
|
import mekanism.common.miner.MOreDictFilter;
|
||||||
import mekanism.common.miner.MinerFilter;
|
import mekanism.common.miner.MinerFilter;
|
||||||
|
import mekanism.common.miner.ThreadMinerSearch;
|
||||||
|
import mekanism.common.miner.ThreadMinerSearch.State;
|
||||||
import mekanism.common.network.PacketTileEntity;
|
import mekanism.common.network.PacketTileEntity;
|
||||||
import mekanism.common.tile.component.TileComponentUpgrade;
|
import mekanism.common.tile.component.TileComponentUpgrade;
|
||||||
import mekanism.common.transporter.InvStack;
|
import mekanism.common.transporter.InvStack;
|
||||||
|
@ -52,11 +55,11 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
{
|
{
|
||||||
public static int[] EJECT_INV;
|
public static int[] EJECT_INV;
|
||||||
|
|
||||||
public int searched = 0;
|
public List<Coord4D> oresToMine = new ArrayList<Coord4D>();
|
||||||
|
|
||||||
public HashList<MinerFilter> filters = new HashList<MinerFilter>();
|
public HashList<MinerFilter> filters = new HashList<MinerFilter>();
|
||||||
|
|
||||||
public Coord4D currentNode;
|
public ThreadMinerSearch searcher = new ThreadMinerSearch(this);
|
||||||
|
|
||||||
public final double ENERGY_USAGE = Mekanism.digitalMinerUsage;
|
public final double ENERGY_USAGE = Mekanism.digitalMinerUsage;
|
||||||
|
|
||||||
|
@ -72,6 +75,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
public int delay;
|
public int delay;
|
||||||
|
|
||||||
|
public int clientToMine;
|
||||||
|
|
||||||
public ItemStack replaceStack;
|
public ItemStack replaceStack;
|
||||||
|
|
||||||
public boolean isActive;
|
public boolean isActive;
|
||||||
|
@ -85,6 +90,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
public int delayTicks;
|
public int delayTicks;
|
||||||
|
|
||||||
|
public boolean initCalc = false;
|
||||||
|
|
||||||
public int numPowering;
|
public int numPowering;
|
||||||
|
|
||||||
/** This machine's current RedstoneControl type. */
|
/** This machine's current RedstoneControl type. */
|
||||||
|
@ -117,9 +124,20 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
if(!worldObj.isRemote)
|
if(!worldObj.isRemote)
|
||||||
{
|
{
|
||||||
|
if(!initCalc)
|
||||||
|
{
|
||||||
|
if(searcher.state == State.FINISHED)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
|
||||||
|
initCalc = true;
|
||||||
|
}
|
||||||
|
|
||||||
ChargeUtils.discharge(27, this);
|
ChargeUtils.discharge(27, this);
|
||||||
|
|
||||||
if(MekanismUtils.canFunction(this) && running && getEnergy() >= getPerTick())
|
if(MekanismUtils.canFunction(this) && running && getEnergy() >= getPerTick() && searcher.state == State.FINISHED && oresToMine.size() > 0)
|
||||||
{
|
{
|
||||||
setActive(true);
|
setActive(true);
|
||||||
|
|
||||||
|
@ -132,48 +150,61 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
if(delay == 0)
|
if(delay == 0)
|
||||||
{
|
{
|
||||||
currentNode = getNextBlock();
|
Set<Coord4D> toRemove = new HashSet<Coord4D>();
|
||||||
|
|
||||||
if(currentNode != null)
|
for(Coord4D obj : oresToMine)
|
||||||
{
|
{
|
||||||
searched++;
|
if(!obj.exists(worldObj))
|
||||||
|
|
||||||
if(!currentNode.isAirBlock(worldObj) && !Coord4D.get(this).equals(currentNode) && !(currentNode.getTileEntity(worldObj) instanceof IBoundingBlock))
|
|
||||||
{
|
{
|
||||||
int id = currentNode.getBlockId(worldObj);
|
continue;
|
||||||
int meta = currentNode.getMetadata(worldObj);
|
}
|
||||||
|
|
||||||
boolean hasFilter = false;
|
int id = obj.getBlockId(worldObj);
|
||||||
|
int meta = obj.getMetadata(worldObj);
|
||||||
|
|
||||||
for(MinerFilter filter : filters)
|
if(id == 0)
|
||||||
|
{
|
||||||
|
toRemove.add(obj);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasFilter = false;
|
||||||
|
|
||||||
|
for(MinerFilter filter : filters)
|
||||||
|
{
|
||||||
|
if(filter.canFilter(new ItemStack(id, 1, meta)))
|
||||||
{
|
{
|
||||||
if(filter.canFilter(new ItemStack(id, 1, meta)))
|
hasFilter = true;
|
||||||
{
|
break;
|
||||||
hasFilter = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(inverse ? !hasFilter : hasFilter)
|
|
||||||
{
|
|
||||||
List<ItemStack> drops = MinerUtils.getDrops(worldObj, currentNode, silkTouch);
|
|
||||||
|
|
||||||
if(canInsert(drops))
|
|
||||||
{
|
|
||||||
add(drops);
|
|
||||||
|
|
||||||
setReplace(currentNode);
|
|
||||||
|
|
||||||
worldObj.playAuxSFXAtEntity(null, 2001, currentNode.xCoord, currentNode.yCoord, currentNode.zCoord, id + (meta << 12));
|
|
||||||
|
|
||||||
delay = getDelay();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(inverse ? hasFilter : !hasFilter)
|
||||||
|
{
|
||||||
|
toRemove.add(obj);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ItemStack> drops = MinerUtils.getDrops(worldObj, obj, silkTouch);
|
||||||
|
|
||||||
|
if(canInsert(drops))
|
||||||
|
{
|
||||||
|
add(drops);
|
||||||
|
|
||||||
|
setReplace(obj);
|
||||||
|
toRemove.add(obj);
|
||||||
|
|
||||||
|
worldObj.playAuxSFXAtEntity(null, 2001, obj.xCoord, obj.yCoord, obj.zCoord, id + (meta << 12));
|
||||||
|
|
||||||
|
delay = getDelay();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
searched = 0;
|
for(Coord4D obj : toRemove)
|
||||||
stop();
|
{
|
||||||
|
oresToMine.remove(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,30 +252,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Coord4D getNextBlock()
|
|
||||||
{
|
|
||||||
if(currentNode == null)
|
|
||||||
{
|
|
||||||
return new Coord4D(xCoord-radius, maxY, zCoord-radius, worldObj.provider.dimensionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(currentNode.xCoord < xCoord+radius)
|
|
||||||
{
|
|
||||||
return currentNode.getFromSide(ForgeDirection.EAST);
|
|
||||||
}
|
|
||||||
else if(currentNode.zCoord < zCoord+radius)
|
|
||||||
{
|
|
||||||
return new Coord4D(xCoord-radius, currentNode.yCoord, currentNode.zCoord+1);
|
|
||||||
}
|
|
||||||
else if(currentNode.yCoord > minY)
|
|
||||||
{
|
|
||||||
return new Coord4D(xCoord-radius, currentNode.yCoord-1, zCoord-radius);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getPerTick()
|
public double getPerTick()
|
||||||
{
|
{
|
||||||
double ret = MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_USAGE);
|
double ret = MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_USAGE);
|
||||||
|
@ -265,7 +272,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
public int getDelay()
|
public int getDelay()
|
||||||
{
|
{
|
||||||
return MekanismUtils.getTicks(getSpeedMultiplier(), 60);
|
return MekanismUtils.getTicks(getSpeedMultiplier(), 80);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReplace(Coord4D obj)
|
public void setReplace(Coord4D obj)
|
||||||
|
@ -443,6 +450,11 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
public void start()
|
public void start()
|
||||||
{
|
{
|
||||||
|
if(searcher.state == State.IDLE)
|
||||||
|
{
|
||||||
|
searcher.start();
|
||||||
|
}
|
||||||
|
|
||||||
running = true;
|
running = true;
|
||||||
|
|
||||||
MekanismUtils.saveChunk(this);
|
MekanismUtils.saveChunk(this);
|
||||||
|
@ -450,16 +462,26 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
public void stop()
|
public void stop()
|
||||||
{
|
{
|
||||||
running = false;
|
if(searcher.state == State.SEARCHING)
|
||||||
|
{
|
||||||
|
searcher.interrupt();
|
||||||
|
reset();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(searcher.state == State.FINISHED)
|
||||||
|
{
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
MekanismUtils.saveChunk(this);
|
MekanismUtils.saveChunk(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reset()
|
public void reset()
|
||||||
{
|
{
|
||||||
searched = 0;
|
searcher = new ThreadMinerSearch(this);
|
||||||
currentNode = null;
|
|
||||||
running = false;
|
running = false;
|
||||||
|
oresToMine.clear();
|
||||||
|
|
||||||
MekanismUtils.saveChunk(this);
|
MekanismUtils.saveChunk(this);
|
||||||
}
|
}
|
||||||
|
@ -493,14 +515,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
delay = nbtTags.getInteger("delay");
|
delay = nbtTags.getInteger("delay");
|
||||||
silkTouch = nbtTags.getBoolean("silkTouch");
|
silkTouch = nbtTags.getBoolean("silkTouch");
|
||||||
numPowering = nbtTags.getInteger("numPowering");
|
numPowering = nbtTags.getInteger("numPowering");
|
||||||
|
searcher.state = State.values()[nbtTags.getInteger("state")];
|
||||||
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
||||||
inverse = nbtTags.getBoolean("inverse");
|
inverse = nbtTags.getBoolean("inverse");
|
||||||
searched = nbtTags.getInteger("searched");
|
|
||||||
|
|
||||||
if(nbtTags.hasKey("currentNode"))
|
|
||||||
{
|
|
||||||
currentNode = Coord4D.read(nbtTags.getCompoundTag("currentNode"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(nbtTags.hasKey("replaceStack"))
|
if(nbtTags.hasKey("replaceStack"))
|
||||||
{
|
{
|
||||||
|
@ -523,6 +540,11 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
{
|
{
|
||||||
super.writeToNBT(nbtTags);
|
super.writeToNBT(nbtTags);
|
||||||
|
|
||||||
|
if(searcher.state == State.SEARCHING)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
nbtTags.setInteger("radius", radius);
|
nbtTags.setInteger("radius", radius);
|
||||||
nbtTags.setInteger("minY", minY);
|
nbtTags.setInteger("minY", minY);
|
||||||
nbtTags.setInteger("maxY", maxY);
|
nbtTags.setInteger("maxY", maxY);
|
||||||
|
@ -533,14 +555,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
nbtTags.setInteger("delay", delay);
|
nbtTags.setInteger("delay", delay);
|
||||||
nbtTags.setBoolean("silkTouch", silkTouch);
|
nbtTags.setBoolean("silkTouch", silkTouch);
|
||||||
nbtTags.setInteger("numPowering", numPowering);
|
nbtTags.setInteger("numPowering", numPowering);
|
||||||
|
nbtTags.setInteger("state", searcher.state.ordinal());
|
||||||
nbtTags.setInteger("controlType", controlType.ordinal());
|
nbtTags.setInteger("controlType", controlType.ordinal());
|
||||||
nbtTags.setBoolean("inverse", inverse);
|
nbtTags.setBoolean("inverse", inverse);
|
||||||
nbtTags.setInteger("searched", searched);
|
|
||||||
|
|
||||||
if(currentNode != null)
|
|
||||||
{
|
|
||||||
nbtTags.setCompoundTag("currentNode", currentNode.write(new NBTTagCompound()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(replaceStack != null)
|
if(replaceStack != null)
|
||||||
{
|
{
|
||||||
|
@ -643,6 +660,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
running = dataStream.readBoolean();
|
running = dataStream.readBoolean();
|
||||||
silkTouch = dataStream.readBoolean();
|
silkTouch = dataStream.readBoolean();
|
||||||
numPowering = dataStream.readInt();
|
numPowering = dataStream.readInt();
|
||||||
|
searcher.state = State.values()[dataStream.readInt()];
|
||||||
|
|
||||||
if(dataStream.readBoolean())
|
if(dataStream.readBoolean())
|
||||||
{
|
{
|
||||||
|
@ -652,9 +670,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
replaceStack = null;
|
replaceStack = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientToMine = dataStream.readInt();
|
||||||
controlType = RedstoneControl.values()[dataStream.readInt()];
|
controlType = RedstoneControl.values()[dataStream.readInt()];
|
||||||
inverse = dataStream.readBoolean();
|
inverse = dataStream.readBoolean();
|
||||||
searched = dataStream.readInt();
|
|
||||||
|
|
||||||
filters.clear();
|
filters.clear();
|
||||||
|
|
||||||
|
@ -676,6 +694,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
running = dataStream.readBoolean();
|
running = dataStream.readBoolean();
|
||||||
silkTouch = dataStream.readBoolean();
|
silkTouch = dataStream.readBoolean();
|
||||||
numPowering = dataStream.readInt();
|
numPowering = dataStream.readInt();
|
||||||
|
searcher.state = State.values()[dataStream.readInt()];
|
||||||
|
|
||||||
if(dataStream.readBoolean())
|
if(dataStream.readBoolean())
|
||||||
{
|
{
|
||||||
|
@ -685,9 +704,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
replaceStack = null;
|
replaceStack = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientToMine = dataStream.readInt();
|
||||||
controlType = RedstoneControl.values()[dataStream.readInt()];
|
controlType = RedstoneControl.values()[dataStream.readInt()];
|
||||||
inverse = dataStream.readBoolean();
|
inverse = dataStream.readBoolean();
|
||||||
searched = dataStream.readInt();
|
|
||||||
}
|
}
|
||||||
else if(type == 2)
|
else if(type == 2)
|
||||||
{
|
{
|
||||||
|
@ -704,7 +723,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
{
|
{
|
||||||
isActive = dataStream.readBoolean();
|
isActive = dataStream.readBoolean();
|
||||||
running = dataStream.readBoolean();
|
running = dataStream.readBoolean();
|
||||||
searched = dataStream.readInt();
|
clientToMine = dataStream.readInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,6 +743,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
data.add(running);
|
data.add(running);
|
||||||
data.add(silkTouch);
|
data.add(silkTouch);
|
||||||
data.add(numPowering);
|
data.add(numPowering);
|
||||||
|
data.add(searcher.state.ordinal());
|
||||||
|
|
||||||
if(replaceStack != null)
|
if(replaceStack != null)
|
||||||
{
|
{
|
||||||
|
@ -735,9 +755,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
data.add(false);
|
data.add(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data.add(oresToMine.size());
|
||||||
data.add(controlType.ordinal());
|
data.add(controlType.ordinal());
|
||||||
data.add(inverse);
|
data.add(inverse);
|
||||||
data.add(searched);
|
|
||||||
|
|
||||||
data.add(filters.size());
|
data.add(filters.size());
|
||||||
|
|
||||||
|
@ -757,7 +777,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
|
|
||||||
data.add(isActive);
|
data.add(isActive);
|
||||||
data.add(running);
|
data.add(running);
|
||||||
data.add(searched);
|
data.add(oresToMine.size());
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -777,6 +797,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
data.add(running);
|
data.add(running);
|
||||||
data.add(silkTouch);
|
data.add(silkTouch);
|
||||||
data.add(numPowering);
|
data.add(numPowering);
|
||||||
|
data.add(searcher.state.ordinal());
|
||||||
|
|
||||||
if(replaceStack != null)
|
if(replaceStack != null)
|
||||||
{
|
{
|
||||||
|
@ -788,9 +809,9 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
||||||
data.add(false);
|
data.add(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data.add(oresToMine.size());
|
||||||
data.add(controlType.ordinal());
|
data.add(controlType.ordinal());
|
||||||
data.add(inverse);
|
data.add(inverse);
|
||||||
data.add(searched);
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public abstract class Finder
|
||||||
{
|
{
|
||||||
List<String> oreKeys = MekanismUtils.getOreDictName(stack);
|
List<String> oreKeys = MekanismUtils.getOreDictName(stack);
|
||||||
|
|
||||||
if(!oreDictName.equals("*") && oreKeys.isEmpty())
|
if(oreKeys.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue