Miner work! Starting on actual operation algorithms.

This commit is contained in:
Aidan Brady 2013-11-20 18:17:10 -05:00
parent 789c5dbf45
commit 1f3a82c3f0
12 changed files with 173 additions and 10 deletions

View file

@ -148,7 +148,7 @@ public class GuiMItemStackFilter extends GuiMekanism
{
super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiItemStackFilter.png"));
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiMItemStackFilter.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;

View file

@ -174,7 +174,7 @@ public class GuiMOreDictFilter extends GuiMekanism
{
super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiOreDictFilter.png"));
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiMOreDictFilter.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;

View file

@ -233,7 +233,7 @@ public class GuiTItemStackFilter extends GuiMekanism
{
super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiItemStackFilter.png"));
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiTItemStackFilter.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;

View file

@ -203,7 +203,7 @@ public class GuiTOreDictFilter extends GuiMekanism
{
super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiOreDictFilter.png"));
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiTOreDictFilter.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;

View file

@ -27,8 +27,6 @@ public class ThreadMinerSearch extends Thread
return;
}
int count = 0;
for(int y = tileEntity.maxY; y >= tileEntity.minY; y--)
{
for(int x = tileEntity.xCoord-tileEntity.radius; x <= tileEntity.xCoord+tileEntity.radius; x++)
@ -55,8 +53,6 @@ public class ThreadMinerSearch extends Thread
}
}
}
count++;
}
}
}

View file

@ -3,7 +3,9 @@ package mekanism.common.tileentity;
import ic2.api.energy.tile.IEnergySink;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import mekanism.api.Object3D;
@ -25,6 +27,7 @@ import mekanism.common.miner.ThreadMinerSearch.State;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MinerUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -42,6 +45,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
public ThreadMinerSearch searcher = new ThreadMinerSearch(this);
public final double ENERGY_USAGE = 50;
public int radius;
public int minY = 0;
@ -50,6 +55,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
public boolean doEject = false;
public boolean doPull = false;
public int delay;
public int clientToMine;
public ItemStack replaceStack;
@ -91,6 +98,57 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
{
ChargeUtils.discharge(27, this);
if(running && getEnergy() >= MekanismUtils.getEnergy(getSpeedMultiplier(), ENERGY_USAGE) && searcher.state == State.FINISHED && oresToMine.size() > 0)
{
if(delay > 0)
{
delay--;
}
//setEnergy(getEnergy()-MekanismUtils.getEnergy(getSpeedMultiplier(), ENERGY_USAGE));
if(delay == 0)
{
Set<Object3D> toRemove = new HashSet<Object3D>();
for(Object3D obj : oresToMine)
{
int id = obj.getBlockId(worldObj);
int meta = obj.getMetadata(worldObj);
if(id == 0)
{
toRemove.add(obj);
continue;
}
boolean hasFilter = false;
for(MinerFilter filter : filters)
{
if(filter.canFilter(new ItemStack(id, 1, meta)))
{
hasFilter = true;
break;
}
}
if(!hasFilter)
{
toRemove.add(obj);
continue;
}
List<ItemStack> drops = MinerUtils.getStacksFromBlock(worldObj, obj);
if(drops.isEmpty() || canInsert(drops))
{
}
}
}
}
if(playersUsing.size() > 0)
{
for(EntityPlayer player : playersUsing)
@ -101,6 +159,81 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
}
}
public int getDelay()
{
return 9-getSpeedMultiplier();
}
public void setReplace(Object3D obj)
{
if(replaceStack != null)
{
worldObj.setBlock(obj.xCoord, obj.yCoord, obj.zCoord, replaceStack.itemID, replaceStack.getItemDamage(), 3);
}
else {
worldObj.setBlockToAir(obj.xCoord, obj.yCoord, obj.zCoord);
}
}
public boolean canInsert(List<ItemStack> stacks)
{
ItemStack[] testInv = Arrays.copyOf(inventory, inventory.length);
int added = 0;
stacks:
for(ItemStack stack : stacks)
{
for(int i = 0; i < 27; i++)
{
if(testInv[i] == null)
{
testInv[i] = stack;
added++;
continue stacks;
}
else if(testInv[i].isItemEqual(stack) && testInv[i].stackSize+stack.stackSize <= stack.getMaxStackSize())
{
testInv[i].stackSize += stack.stackSize;
added++;
continue stacks;
}
}
}
if(added == stacks.size())
{
return true;
}
return false;
}
public void add(List<ItemStack> stacks)
{
stacks:
for(ItemStack stack : stacks)
{
for(int i = 0; i < 27; i++)
{
if(inventory[i] == null)
{
inventory[i] = stack;
continue stacks;
}
else if(inventory[i].isItemEqual(stack) && inventory[i].stackSize+stack.stackSize <= stack.getMaxStackSize())
{
inventory[i].stackSize += stack.stackSize;
continue stacks;
}
}
}
}
public void start()
{
if(searcher.state == State.IDLE)
@ -151,6 +284,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
doPull = nbtTags.getBoolean("doPull");
isActive = nbtTags.getBoolean("isActive");
running = nbtTags.getBoolean("running");
delay = nbtTags.getInteger("delay");
searcher.state = State.values()[nbtTags.getInteger("state")];
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
@ -197,6 +331,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
nbtTags.setBoolean("doPull", doPull);
nbtTags.setBoolean("isActive", isActive);
nbtTags.setBoolean("running", running);
nbtTags.setInteger("delay", delay);
nbtTags.setInteger("state", searcher.state.ordinal());
nbtTags.setInteger("controlType", controlType.ordinal());

View file

@ -292,7 +292,7 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
setEnergy(getEnergy() + toAdd);
}
return (int)(toAdd*Mekanism.TO_TE);
return (int)Math.round(toAdd*Mekanism.TO_TE);
}
return 0;
@ -310,7 +310,7 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
setEnergy(getEnergy() - toSend);
}
return (int)(toSend*Mekanism.TO_TE);
return (int)Math.round(toSend*Mekanism.TO_TE);
}
return 0;

View file

@ -0,0 +1,32 @@
package mekanism.common.util;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.Object3D;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeEventFactory;
public final class MinerUtils
{
public static List<ItemStack> getStacksFromBlock(World world, Object3D obj)
{
Block block = Block.blocksList[obj.getBlockId(world)];
if(block == null)
{
return new ArrayList<ItemStack>();
}
if(block.isAirBlock(world, obj.xCoord, obj.yCoord, obj.zCoord))
{
return new ArrayList<ItemStack>();
}
int meta = obj.getMetadata(world);
return block.getBlockDropped(world, obj.xCoord, obj.yCoord, obj.zCoord, meta, 0);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB