Miner work! Starting on actual operation algorithms.
This commit is contained in:
parent
789c5dbf45
commit
1f3a82c3f0
12 changed files with 173 additions and 10 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
32
common/mekanism/common/util/MinerUtils.java
Normal file
32
common/mekanism/common/util/MinerUtils.java
Normal 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);
|
||||
}
|
||||
}
|
BIN
resources/assets/mekanism/gui/GuiMItemStackFilter.png
Normal file
BIN
resources/assets/mekanism/gui/GuiMItemStackFilter.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4 KiB |
BIN
resources/assets/mekanism/gui/GuiMOreDictFilter.png
Normal file
BIN
resources/assets/mekanism/gui/GuiMOreDictFilter.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Loading…
Reference in a new issue