Filter-based replacing works! Now to get the require system to work and the warning system set up.

This commit is contained in:
Aidan C. Brady 2014-07-20 16:06:47 -04:00
parent ad505cf882
commit fe177d20c7
5 changed files with 52 additions and 127 deletions

View file

@ -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)
{

View file

@ -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)

View file

@ -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);

View file

@ -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);
}

View file

@ -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);