Filter-based replacing works! Now to get the require system to work and the warning system set up.
This commit is contained in:
parent
ad505cf882
commit
fe177d20c7
5 changed files with 52 additions and 127 deletions
|
@ -173,14 +173,14 @@ public class GuiDigitalMiner extends GuiMekanism
|
|||
fontRendererObj.drawString(MekanismUtils.localize("gui.digitalMiner.toMine") + ":", 9, 59, 0x00CD00);
|
||||
fontRendererObj.drawString("" + tileEntity.clientToMine, 9, 68, 0x00CD00);
|
||||
|
||||
if(tileEntity.replaceStack != null)
|
||||
/**if(tileEntity.replaceStack != null) TODO display missing replace stack
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
itemRender.renderItemAndEffectIntoGUI(fontRendererObj, mc.getTextureManager(), tileEntity.replaceStack, 144, 27);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}*/
|
||||
|
||||
if(xAxis >= 164 && xAxis <= 168 && yAxis >= 25 && yAxis <= 77)
|
||||
{
|
||||
|
|
|
@ -1049,11 +1049,6 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
|||
itemStack.stackTagCompound.setBoolean("silkTouch", miner.silkTouch);
|
||||
itemStack.stackTagCompound.setBoolean("inverse", miner.inverse);
|
||||
|
||||
if(miner.replaceStack != null)
|
||||
{
|
||||
itemStack.stackTagCompound.setTag("replaceStack", miner.replaceStack.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
NBTTagList filterTags = new NBTTagList();
|
||||
|
||||
for(MinerFilter filter : miner.filters)
|
||||
|
|
|
@ -280,11 +280,6 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec
|
|||
miner.silkTouch = stack.stackTagCompound.getBoolean("silkTouch");
|
||||
miner.inverse = stack.stackTagCompound.getBoolean("inverse");
|
||||
|
||||
if(stack.stackTagCompound.hasKey("replaceStack"))
|
||||
{
|
||||
miner.replaceStack = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("replaceStack"));
|
||||
}
|
||||
|
||||
if(stack.stackTagCompound.hasKey("filters"))
|
||||
{
|
||||
NBTTagList tagList = stack.stackTagCompound.getTagList("filters", NBT.TAG_COMPOUND);
|
||||
|
|
|
@ -21,9 +21,9 @@ public class ThreadMinerSearch extends Thread
|
|||
public State state = State.IDLE;
|
||||
|
||||
public BitSet oresToMine = new BitSet();
|
||||
public List<Integer> replaceMap = new ArrayList<Integer>();
|
||||
public List<MinerFilter> replaceMap = new ArrayList<MinerFilter>();
|
||||
|
||||
public Map<BlockInfo, Boolean> acceptedItems = new HashMap<BlockInfo, Boolean>();
|
||||
public Map<BlockInfo, MinerFilter> acceptedItems = new HashMap<BlockInfo, MinerFilter>();
|
||||
|
||||
public int found = 0;
|
||||
|
||||
|
@ -81,16 +81,17 @@ public class ThreadMinerSearch extends Thread
|
|||
|
||||
if(info.block != null && !tileEntity.getWorldObj().isAirBlock(x, y, z) && info.block.getBlockHardness(tileEntity.getWorldObj(), x, y, z) >= 0)
|
||||
{
|
||||
MinerFilter filterFound = null;
|
||||
boolean canFilter = false;
|
||||
|
||||
if(acceptedItems.containsKey(info))
|
||||
{
|
||||
canFilter = acceptedItems.get(info);
|
||||
filterFound = acceptedItems.get(info);
|
||||
}
|
||||
else {
|
||||
ItemStack stack = new ItemStack(info.block, 1, info.meta);
|
||||
|
||||
if(tileEntity.replaceStack != null && tileEntity.replaceStack.isItemEqual(stack))
|
||||
if(tileEntity.isReplaceStack(stack))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -105,13 +106,16 @@ public class ThreadMinerSearch extends Thread
|
|||
}
|
||||
}
|
||||
|
||||
canFilter = tileEntity.inverse ? !hasFilter : hasFilter;
|
||||
acceptedItems.put(info, canFilter);
|
||||
acceptedItems.put(info, filterFound);
|
||||
}
|
||||
|
||||
canFilter = tileEntity.inverse ? filterFound == null : filterFound != null;
|
||||
|
||||
if(canFilter)
|
||||
{
|
||||
oresToMine.set(i);
|
||||
replaceMap.add(i, filterFound);
|
||||
|
||||
found++;
|
||||
}
|
||||
}
|
||||
|
@ -119,6 +123,7 @@ public class ThreadMinerSearch extends Thread
|
|||
|
||||
state = State.FINISHED;
|
||||
tileEntity.oresToMine = oresToMine;
|
||||
tileEntity.replaceMap = replaceMap;
|
||||
MekanismUtils.saveChunk(tileEntity);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ import mekanism.common.util.TransporterUtils;
|
|||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -61,6 +60,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
public static int[] EJECT_INV;
|
||||
|
||||
public BitSet oresToMine = new BitSet();
|
||||
public List<MinerFilter> replaceMap = new ArrayList<MinerFilter>();
|
||||
|
||||
public HashList<MinerFilter> filters = new HashList<MinerFilter>();
|
||||
|
||||
|
@ -82,8 +82,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
public int clientToMine;
|
||||
|
||||
public ItemStack replaceStack;
|
||||
|
||||
public boolean isActive;
|
||||
public boolean clientActive;
|
||||
|
||||
|
@ -210,7 +208,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
{
|
||||
add(drops);
|
||||
|
||||
setReplace(coord);
|
||||
setReplace(coord, index);
|
||||
toRemove.add(index);
|
||||
|
||||
worldObj.playAuxSFXAtEntity(null, 2001, coord.xCoord, coord.yCoord, coord.zCoord, Block.getIdFromBlock(block) + (meta << 12));
|
||||
|
@ -294,13 +292,13 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
return MekanismUtils.getTicks(this, 80);
|
||||
}
|
||||
|
||||
public void setReplace(Coord4D obj)
|
||||
public void setReplace(Coord4D obj, int index)
|
||||
{
|
||||
ItemStack stack = getReplace();
|
||||
ItemStack stack = getReplace(index);
|
||||
|
||||
if(stack != null)
|
||||
{
|
||||
worldObj.setBlock(obj.xCoord, obj.yCoord, obj.zCoord, Block.getBlockFromItem(replaceStack.getItem()), replaceStack.getItemDamage(), 3);
|
||||
worldObj.setBlock(obj.xCoord, obj.yCoord, obj.zCoord, Block.getBlockFromItem(stack.getItem()), stack.getItemDamage(), 3);
|
||||
|
||||
if(obj.getBlock(worldObj) != null && !obj.getBlock(worldObj).canBlockStay(worldObj, obj.xCoord, obj.yCoord, obj.zCoord))
|
||||
{
|
||||
|
@ -313,16 +311,18 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
}
|
||||
|
||||
public ItemStack getReplace()
|
||||
public ItemStack getReplace(int index)
|
||||
{
|
||||
if(replaceStack == null)
|
||||
MinerFilter filter = replaceMap.get(index);
|
||||
|
||||
if(filter.replaceStack == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 27; i++)
|
||||
{
|
||||
if(inventory[i] != null && inventory[i].isItemEqual(replaceStack))
|
||||
if(inventory[i] != null && inventory[i].isItemEqual(filter.replaceStack))
|
||||
{
|
||||
inventory[i].stackSize--;
|
||||
|
||||
|
@ -331,18 +331,18 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
inventory[i] = null;
|
||||
}
|
||||
|
||||
return MekanismUtils.size(replaceStack, 1);
|
||||
return MekanismUtils.size(filter.replaceStack, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if(doPull && getPullInv() instanceof IInventory)
|
||||
{
|
||||
InvStack stack = InventoryUtils.takeDefinedItem((IInventory)getPullInv(), 1, replaceStack.copy(), 1, 1);
|
||||
InvStack stack = InventoryUtils.takeDefinedItem((IInventory)getPullInv(), 1, filter.replaceStack.copy(), 1, 1);
|
||||
|
||||
if(stack != null)
|
||||
{
|
||||
stack.use();
|
||||
return MekanismUtils.size(replaceStack, 1);
|
||||
return MekanismUtils.size(filter.replaceStack, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -369,7 +369,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
if(stack != null)
|
||||
{
|
||||
if(replaceStack != null && replaceStack.isItemEqual(stack))
|
||||
if(!isReplaceStack(stack))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -501,9 +501,23 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
searcher = new ThreadMinerSearch(this);
|
||||
running = false;
|
||||
oresToMine.clear();
|
||||
replaceMap.clear();
|
||||
|
||||
MekanismUtils.saveChunk(this);
|
||||
}
|
||||
|
||||
public boolean isReplaceStack(ItemStack stack)
|
||||
{
|
||||
for(MinerFilter filter : filters)
|
||||
{
|
||||
if(filter.replaceStack != null && filter.replaceStack.isItemEqual(stack))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openInventory()
|
||||
|
@ -538,11 +552,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
||||
inverse = nbtTags.getBoolean("inverse");
|
||||
|
||||
if(nbtTags.hasKey("replaceStack"))
|
||||
{
|
||||
replaceStack = ItemStack.loadItemStackFromNBT(nbtTags.getCompoundTag("replaceStack"));
|
||||
}
|
||||
|
||||
if(nbtTags.hasKey("filters"))
|
||||
{
|
||||
NBTTagList tagList = nbtTags.getTagList("filters", NBT.TAG_COMPOUND);
|
||||
|
@ -578,11 +587,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
nbtTags.setInteger("controlType", controlType.ordinal());
|
||||
nbtTags.setBoolean("inverse", inverse);
|
||||
|
||||
if(replaceStack != null)
|
||||
{
|
||||
nbtTags.setTag("replaceStack", replaceStack.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
NBTTagList filterTags = new NBTTagList();
|
||||
|
||||
for(MinerFilter filter : filters)
|
||||
|
@ -613,15 +617,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
else if(type == 2)
|
||||
{
|
||||
boolean doNull = dataStream.readBoolean();
|
||||
|
||||
if(!doNull)
|
||||
{
|
||||
replaceStack = new ItemStack(Block.getBlockById(dataStream.readInt()), 1, dataStream.readInt());
|
||||
}
|
||||
else {
|
||||
replaceStack = null;
|
||||
}
|
||||
//Unneeded at the moment
|
||||
}
|
||||
else if(type == 3)
|
||||
{
|
||||
|
@ -680,15 +676,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
silkTouch = dataStream.readBoolean();
|
||||
numPowering = dataStream.readInt();
|
||||
searcher.state = State.values()[dataStream.readInt()];
|
||||
|
||||
if(dataStream.readBoolean())
|
||||
{
|
||||
replaceStack = new ItemStack(Block.getBlockById(dataStream.readInt()), 1, dataStream.readInt());
|
||||
}
|
||||
else {
|
||||
replaceStack = null;
|
||||
}
|
||||
|
||||
clientToMine = dataStream.readInt();
|
||||
controlType = RedstoneControl.values()[dataStream.readInt()];
|
||||
inverse = dataStream.readBoolean();
|
||||
|
@ -714,15 +701,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
silkTouch = dataStream.readBoolean();
|
||||
numPowering = dataStream.readInt();
|
||||
searcher.state = State.values()[dataStream.readInt()];
|
||||
|
||||
if(dataStream.readBoolean())
|
||||
{
|
||||
replaceStack = new ItemStack(Block.getBlockById(dataStream.readInt()), 1, dataStream.readInt());
|
||||
}
|
||||
else {
|
||||
replaceStack = null;
|
||||
}
|
||||
|
||||
clientToMine = dataStream.readInt();
|
||||
controlType = RedstoneControl.values()[dataStream.readInt()];
|
||||
inverse = dataStream.readBoolean();
|
||||
|
@ -763,17 +741,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
data.add(silkTouch);
|
||||
data.add(numPowering);
|
||||
data.add(searcher.state.ordinal());
|
||||
|
||||
if(replaceStack != null)
|
||||
{
|
||||
data.add(true);
|
||||
data.add(MekanismUtils.getID(replaceStack));
|
||||
data.add(replaceStack.getItemDamage());
|
||||
}
|
||||
else {
|
||||
data.add(false);
|
||||
}
|
||||
|
||||
|
||||
if(searcher.state == State.SEARCHING)
|
||||
{
|
||||
data.add(searcher.found);
|
||||
|
@ -832,16 +800,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
data.add(numPowering);
|
||||
data.add(searcher.state.ordinal());
|
||||
|
||||
if(replaceStack != null)
|
||||
{
|
||||
data.add(true);
|
||||
data.add(MekanismUtils.getID(replaceStack));
|
||||
data.add(replaceStack.getItemDamage());
|
||||
}
|
||||
else {
|
||||
data.add(false);
|
||||
}
|
||||
|
||||
if(searcher.state == State.SEARCHING)
|
||||
{
|
||||
data.add(searcher.found);
|
||||
|
@ -1094,7 +1052,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
else if(location.equals(pull))
|
||||
{
|
||||
if(itemstack != null && replaceStack != null && itemstack.isItemEqual(replaceStack))
|
||||
if(itemstack != null && isReplaceStack(itemstack))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -1113,7 +1071,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
if(location.equals(eject))
|
||||
{
|
||||
if(itemstack != null && replaceStack != null && itemstack.isItemEqual(replaceStack))
|
||||
if(itemstack != null && isReplaceStack(itemstack))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -1147,7 +1105,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
return getInventoryName();
|
||||
}
|
||||
|
||||
public String[] names = {"setRadius", "setMin", "setMax", "setReplace", "addFilter", "removeFilter", "addOreFilter", "removeOreFilter", "reset", "start", "stop"};
|
||||
public String[] names = {"setRadius", "setMin", "setMax", "addFilter", "removeFilter", "addOreFilter", "removeOreFilter", "reset", "start", "stop"};
|
||||
|
||||
@Override
|
||||
@Method(modid = "ComputerCraft")
|
||||
|
@ -1191,24 +1149,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
{
|
||||
int meta = 0;
|
||||
|
||||
if(arguments.length > 1)
|
||||
{
|
||||
if(arguments[1] instanceof Double)
|
||||
{
|
||||
num = ((Double)arguments[1]).intValue();
|
||||
}
|
||||
else if(arguments[1] instanceof String)
|
||||
{
|
||||
meta = Integer.parseInt((String)arguments[1]);
|
||||
}
|
||||
}
|
||||
|
||||
replaceStack = new ItemStack(Item.getItemById(num), 1, meta);
|
||||
}
|
||||
else if(method == 4)
|
||||
{
|
||||
int meta = 0;
|
||||
|
||||
if(arguments.length > 1)
|
||||
{
|
||||
if(arguments[1] instanceof Double)
|
||||
|
@ -1223,7 +1163,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
|
||||
filters.add(new MItemStackFilter(new ItemStack(Item.getItemById(num), 1, meta)));
|
||||
}
|
||||
else if(method == 5)
|
||||
else if(method == 4)
|
||||
{
|
||||
Iterator<MinerFilter> iter = filters.iterator();
|
||||
|
||||
|
@ -1240,7 +1180,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(method == 6)
|
||||
else if(method == 5)
|
||||
{
|
||||
String ore = (String)arguments[0];
|
||||
MOreDictFilter filter = new MOreDictFilter();
|
||||
|
@ -1248,7 +1188,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
filter.oreDictName = ore;
|
||||
filters.add(filter);
|
||||
}
|
||||
else if(method == 7)
|
||||
else if(method == 6)
|
||||
{
|
||||
String ore = (String)arguments[0];
|
||||
Iterator<MinerFilter> iter = filters.iterator();
|
||||
|
@ -1266,15 +1206,15 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(method == 8)
|
||||
else if(method == 7)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
else if(method == 9)
|
||||
else if(method == 8)
|
||||
{
|
||||
start();
|
||||
}
|
||||
else if(method == 10)
|
||||
else if(method == 9)
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
@ -1316,11 +1256,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
nbtTags.setInteger("controlType", controlType.ordinal());
|
||||
nbtTags.setBoolean("inverse", inverse);
|
||||
|
||||
if(replaceStack != null)
|
||||
{
|
||||
nbtTags.setTag("replaceStack", replaceStack.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
NBTTagList filterTags = new NBTTagList();
|
||||
|
||||
for(MinerFilter filter : filters)
|
||||
|
@ -1348,11 +1283,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
||||
inverse = nbtTags.getBoolean("inverse");
|
||||
|
||||
if(nbtTags.hasKey("replaceStack"))
|
||||
{
|
||||
replaceStack = ItemStack.loadItemStackFromNBT(nbtTags.getCompoundTag("replaceStack"));
|
||||
}
|
||||
|
||||
if(nbtTags.hasKey("filters"))
|
||||
{
|
||||
NBTTagList tagList = nbtTags.getTagList("filters", NBT.TAG_COMPOUND);
|
||||
|
|
Loading…
Reference in a new issue