Loads of work on Seismic Vibrator

This commit is contained in:
Aidan C. Brady 2014-03-15 20:05:26 -04:00
parent 653aa6c30f
commit 7398b21554
42 changed files with 1074 additions and 36 deletions

View file

@ -0,0 +1,78 @@
package mekanism.api;
import net.minecraft.entity.Entity;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
public class Chunk3D
{
public int dimensionId;
public int xCoord;
public int zCoord;
public Chunk3D(int x, int z, int dimension)
{
xCoord = x;
zCoord = z;
dimensionId = dimension;
}
public Chunk3D(Entity entity)
{
xCoord = ((int)entity.posX) >> 4;
zCoord = ((int)entity.posZ) >> 4;
dimensionId = entity.dimension;
}
public Chunk3D(Coord4D coord)
{
xCoord = coord.xCoord >> 4;
zCoord = coord.zCoord >> 4;
dimensionId = coord.dimensionId;
}
public boolean exists(World world)
{
return world.getChunkProvider().chunkExists(xCoord, zCoord);
}
public Chunk getChunk(World world)
{
return world.getChunkFromChunkCoords(xCoord, zCoord);
}
@Override
public Coord4D clone()
{
return new Coord4D(xCoord, zCoord, dimensionId);
}
@Override
public String toString()
{
return "[Chunk3D: " + xCoord + ", " + zCoord + ", dim=" + dimensionId + "]";
}
@Override
public boolean equals(Object obj)
{
return obj instanceof Coord4D &&
((Coord4D)obj).xCoord == xCoord &&
((Coord4D)obj).zCoord == zCoord &&
((Coord4D)obj).dimensionId == dimensionId;
}
@Override
public int hashCode()
{
int code = 1;
code = 31 * code + xCoord;
code = 31 * code + zCoord;
code = 31 * code + dimensionId;
return code;
}
}

View file

@ -278,7 +278,16 @@ public class Coord4D
*/
public Chunk getChunk(World world)
{
return world.getChunkFromBlockCoords(xCoord >> 4, zCoord >> 4);
return world.getChunkFromBlockCoords(xCoord, zCoord);
}
/**
* Gets the Chunk3D object with chunk coordinates correlating to this Coord4D's location
* @return Chunk3D with correlating chunk coordinates.
*/
public Chunk3D getChunk3D()
{
return new Chunk3D(this);
}
/**
@ -300,7 +309,7 @@ public class Coord4D
@Override
public String toString()
{
return "[Object3D: " + xCoord + ", " + yCoord + ", " + zCoord + "]";
return "[Coord4D: " + xCoord + ", " + yCoord + ", " + zCoord + ", dim=" + dimensionId + "]";
}
@Override

View file

@ -3,6 +3,7 @@ package mekanism.client;
import java.io.File;
import java.util.HashMap;
import mekanism.api.Coord4D;
import mekanism.client.gui.GuiChemicalCrystalizer;
import mekanism.client.gui.GuiChemicalDissolutionChamber;
import mekanism.client.gui.GuiChemicalInfuser;
@ -38,6 +39,8 @@ import mekanism.client.gui.GuiRobitRepair;
import mekanism.client.gui.GuiRobitSmelting;
import mekanism.client.gui.GuiRotaryCondensentrator;
import mekanism.client.gui.GuiSalinationController;
import mekanism.client.gui.GuiSeismicReader;
import mekanism.client.gui.GuiSeismicVibrator;
import mekanism.client.gui.GuiTeleporter;
import mekanism.client.render.MekanismRenderer;
import mekanism.client.render.RenderPartTransmitter;
@ -82,6 +85,7 @@ import mekanism.common.entity.EntityObsidianTNT;
import mekanism.common.entity.EntityRobit;
import mekanism.common.inventory.InventoryElectricChest;
import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.item.ItemSeismicReader;
import mekanism.common.tile.TileEntityAdvancedElectricMachine;
import mekanism.common.tile.TileEntityAdvancedFactory;
import mekanism.common.tile.TileEntityBin;
@ -117,6 +121,7 @@ import mekanism.common.tile.TileEntityRotaryCondensentrator;
import mekanism.common.tile.TileEntitySalinationController;
import mekanism.common.tile.TileEntitySalinationTank;
import mekanism.common.tile.TileEntitySalinationValve;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.tile.TileEntityTeleporter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
@ -447,6 +452,15 @@ public class ClientProxy extends CommonProxy
return new GuiChemicalWasher(player.inventory, (TileEntityChemicalWasher)tileEntity);
case 37:
return new GuiChemicalCrystalizer(player.inventory, (TileEntityChemicalCrystalizer)tileEntity);
case 38:
ItemStack itemStack1 = player.getCurrentEquippedItem().copy();
if(itemStack1 != null && itemStack1.getItem() instanceof ItemSeismicReader)
{
return new GuiSeismicReader(new Coord4D(x, y, z, world.provider.dimensionId), itemStack1);
}
case 39:
return new GuiSeismicVibrator(player.inventory, (TileEntitySeismicVibrator)tileEntity);
}
return null;

View file

@ -62,6 +62,7 @@ public class MekanismClient extends Mekanism
Mekanism.jetpackOn.clear();
Mekanism.gasmaskOn.clear();
Mekanism.activeVibrators.clear();
Mekanism.proxy.loadConfiguration();

View file

@ -1,20 +1,16 @@
package mekanism.client.gui;
import java.util.ArrayList;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.tile.TileEntityFactory;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class GuiBucket extends GuiElement
@SideOnly(Side.CLIENT)
public class GuiBucketIO extends GuiElement
{
public GuiBucket(GuiMekanism gui, TileEntity tile, ResourceLocation def)
public GuiBucketIO(GuiMekanism gui, TileEntity tile, ResourceLocation def)
{
super(MekanismUtils.getResource(ResourceType.GUI_ELEMENT, "GuiBucket.png"), gui, tile, def);
}

View file

@ -11,6 +11,10 @@ import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiChanceMachine extends GuiMekanism
{
public TileEntityChanceMachine tileEntity;

View file

@ -34,7 +34,7 @@ public class GuiChemicalWasher extends GuiMekanism
tileEntity = tentity;
guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalWasher.png")));
guiElements.add(new GuiBucket(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalWasher.png")));
guiElements.add(new GuiBucketIO(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalWasher.png")));
guiElements.add(new GuiEnergyInfo(new IInfoHandler() {
@Override
public List<String> getInfo()

View file

@ -31,6 +31,10 @@ import net.minecraftforge.oredict.OreDictionary;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiDigitalMinerConfig extends GuiMekanism
{
public TileEntityDigitalMiner tileEntity;

View file

@ -9,7 +9,10 @@ import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class GuiElement
{
protected static Minecraft mc = Minecraft.getMinecraft();

View file

@ -1,13 +1,15 @@
package mekanism.client.gui;
import java.util.ArrayList;
import java.util.List;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiEnergyInfo extends GuiElement
{
public IInfoHandler infoHandler;

View file

@ -1,14 +1,9 @@
package mekanism.client.gui;
import org.lwjgl.opengl.GL11;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.inventory.container.ContainerNull;
import mekanism.common.miner.MItemStackFilter;
import mekanism.common.miner.MOreDictFilter;
import mekanism.common.miner.MinerFilter;
import mekanism.common.network.PacketDigitalMinerGui;
import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket;
import mekanism.common.tile.TileEntityDigitalMiner;
@ -17,6 +12,12 @@ import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiMFilterSelect extends GuiMekanism
{
public TileEntityDigitalMiner tileEntity;

View file

@ -1,7 +1,7 @@
package mekanism.client.gui;
import mekanism.api.EnumColor;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.inventory.container.ContainerFilter;
@ -22,6 +22,10 @@ import net.minecraft.item.ItemStack;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiMItemStackFilter extends GuiMekanism
{
public TileEntityDigitalMiner tileEntity;

View file

@ -3,10 +3,11 @@ package mekanism.client.gui;
import mekanism.common.tile.TileEntityElectricBlock;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiPowerBar extends GuiElement
{
private int xLocation;

View file

@ -17,6 +17,10 @@ import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSalinationController extends GuiMekanism
{
public TileEntitySalinationController tileEntity;

View file

@ -0,0 +1,415 @@
package mekanism.client.gui;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.Coord4D;
import mekanism.common.item.ItemSeismicReader;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.IFluidBlock;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSeismicReader extends GuiScreen
{
private World worldObj = Minecraft.getMinecraft().theWorld;
public ItemStack itemStack;
public int scroll;
public int prevMouseY;
public Coord4D pos;
public boolean prevMouseDown;
public boolean isDragging = false;
public List<SeismicType> seismicCalculation = new ArrayList<SeismicType>();
public int scrollStartX = 10;
public int scrollStartY = 12;
protected int xSize = 118;
protected int ySize = 166;
public GuiSeismicReader(Coord4D coord, ItemStack stack)
{
pos = coord;
pos.yCoord = Math.min(255, pos.yCoord);
itemStack = stack;
calculate();
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTick)
{
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiSeismicReader.png"));
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;
int xAxis = mouseX - guiWidth;
int yAxis = mouseY - guiHeight;
if(Mouse.isButtonDown(0))
{
if(!isDragging && (xAxis >= 10 && xAxis <= 48 && yAxis >= 12 && yAxis <= 154))
{
if(!prevMouseDown)
{
prevMouseDown = true;
}
else {
int mouseDiff = prevMouseY-yAxis;
scroll = Math.max(0, Math.min(scroll+mouseDiff, calcMaxScroll()));
}
}
int maxScroll = calcMaxScroll();
if(!isDragging && maxScroll > 0 && (xAxis >= 49 && xAxis <= 53 && yAxis >= getScrollButtonY() && yAxis <= getScrollButtonY()+4))
{
if(!prevMouseDown)
{
prevMouseDown = true;
isDragging = true;
}
}
if(isDragging)
{
int relY = Math.max(13, Math.min(149, yAxis))-13;
scroll = calcScrollFromButton(relY);
}
prevMouseY = yAxis;
}
else {
prevMouseDown = false;
isDragging = false;
}
drawTexturedModalRect(guiWidth + scrollStartX, guiHeight + scrollStartY, xSize, 13, 38, 142);
drawChartLayer(guiWidth, guiHeight);
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
drawTexturedModalRect(guiWidth + scrollStartX + 38 + 1, guiHeight + getScrollButtonY(), xSize, 0, 4, 4);
fontRenderer.drawString(MekanismUtils.localize("gui.seismicReader.short"), guiWidth + 62, guiHeight + 18, 0x000000);
fontRenderer.drawString(MekanismUtils.localize("gui.seismicReader.solids"), guiWidth + 70, guiHeight + 40, 0x0404040);
fontRenderer.drawString(MekanismUtils.localize("gui.seismicReader.fluids"), guiWidth + 70, guiHeight + 62, 0x0404040);
fontRenderer.drawString(MekanismUtils.localize("gui.empty"), guiWidth + 70, guiHeight + 78, 0x0404040);
fontRenderer.drawString(MekanismUtils.localize("gui.seismicReader.reading"), guiWidth + 62, guiHeight + 114, 0x00CD00);
fontRenderer.drawString(MekanismUtils.localize("gui.energy") + ":", guiWidth + 62, guiHeight + 132, 0x00CD00);
fontRenderer.drawString(MekanismUtils.getEnergyDisplay(getEnergy()), guiWidth + 62, guiHeight + 141, 0x00CD00);
super.drawScreen(mouseX, mouseY, partialTick);
}
public double getEnergy()
{
return ((ItemSeismicReader)itemStack.getItem()).getEnergy(itemStack);
}
public void drawChartLayer(int guiWidth, int guiHeight)
{
if(scroll <= 5)
{
drawTexturedModalRect(guiWidth + scrollStartX, guiHeight + scrollStartY+5-scroll, xSize, 4, 38, 1);
}
int amount = Math.min((142/2)+Math.min(0, (scroll/2)-3), pos.yCoord);
int start = pos.yCoord-(scroll/2)+Math.min(3, scroll/2);
int yStart = scrollStartY + Math.max(0, 6-scroll);
drawScale(guiWidth, guiHeight, amount, start, yStart, scroll%2==1);
if(calcMaxScroll() > 0 && scroll == calcMaxScroll())
{
drawTexturedModalRect(guiWidth + scrollStartX, guiHeight + scrollStartY+142-1, xSize, 4, 38, 1);
}
else if(calcMaxScroll() <= 0)
{
int dist = yStart + amount*2;
drawTexturedModalRect(guiWidth + scrollStartX, guiHeight + dist, xSize, 4, 38, 1);
}
}
public void drawScale(int guiWidth, int guiHeight, int amount, int start, int yStart, boolean half)
{
int starting = 0;
int toRender = amount;
int nextRender = guiHeight + yStart;
if(half)
{
starting++;
}
if(scroll < 6)
{
nextRender += (half ? 1 : 0);
}
if(start%4 != 0)
{
starting += (4-(start%4))*2;
drawTexturedModalRect(guiWidth + 30, nextRender, xSize, 5+starting, 3, 8-starting);
toRender -= (8-starting)/2;
nextRender += (8-starting);
if(!seismicCalculation.isEmpty())
{
int rendered = 8-starting+(half && scroll > 6 ? 1 : 0);
int nextY = guiHeight + yStart - (half && scroll > 6 ? 1 : 0);
seismicCalculation.get(start-1).render(this, xSize, guiWidth, nextY);
if(rendered > 2)
{
seismicCalculation.get(start-2).render(this, xSize, guiWidth, nextY+2);
}
if(rendered > 4)
{
seismicCalculation.get(start-3).render(this, xSize, guiWidth, nextY+4);
}
}
}
else {
nextRender -= half ? 1 : 0;
}
while(toRender >= 4)
{
toRender -= 4;
drawTexturedModalRect(guiWidth + 30, nextRender, xSize, 5, 3, 8);
int index = start-(amount-toRender);
if((index-1)%2 == 0)
{
index -= 1;
}
if(index%8 == 0 && pos.yCoord-index > 6)
{
int yPos = nextRender+2;
if(index == 0)
{
yPos -= 2;
}
fontRenderer.drawString(Integer.toString(index), guiWidth + 28-fontRenderer.getStringWidth(Integer.toString(index)), yPos, 0xFFFFFF);
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiSeismicReader.png"));
}
if(!seismicCalculation.isEmpty())
{
seismicCalculation.get(index+3).render(this, xSize, guiWidth, nextRender);
seismicCalculation.get(index+2).render(this, xSize, guiWidth, nextRender+2);
seismicCalculation.get(index+1).render(this, xSize, guiWidth, nextRender+4);
seismicCalculation.get(index+0).render(this, xSize, guiWidth, nextRender+6);
}
nextRender += 8;
}
if(toRender > 0)
{
drawTexturedModalRect(guiWidth + 30, nextRender, xSize, 5, 3, toRender*2);
if(!seismicCalculation.isEmpty())
{
int index = start-(amount-toRender);
if((index-1)%2 == 0)
{
index -= 1;
}
if(index-1 >= 0)
{
seismicCalculation.get(index-1).render(this, xSize, guiWidth, nextRender);
}
if(toRender > 1 && index-2 >= 0)
{
seismicCalculation.get(index-2).render(this, xSize, guiWidth, nextRender+2);
}
if(toRender > 2 && index-3 >= 0)
{
seismicCalculation.get(index-3).render(this, xSize, guiWidth, nextRender+4);
}
}
}
}
public int getScrollButtonY()
{
int max = calcMaxScroll();
if(max == 0)
{
return scrollStartY+1;
}
return scrollStartY+1+(int)(((float)scroll/max)*136);
}
public int calcScrollFromButton(int relButtonY)
{
return (int)(((float)relButtonY/136)*calcMaxScroll());
}
public int calcMaxScroll()
{
int ret = 6;
ret += (pos.yCoord*2); //2 pixels per block
ret += 1; //Bottom layer thing
ret -= 142; //142 total pixels lengthwise on display
return ret;
}
public void calculate()
{
seismicCalculation.clear();
for(int y = 1; y <= pos.yCoord; y++)
{
Coord4D coord = new Coord4D(pos.xCoord, y, pos.zCoord, pos.dimensionId);
if(coord.isAirBlock(worldObj))
{
seismicCalculation.add(SeismicType.EMPTY);
continue;
}
int id = coord.getBlockId(worldObj);
int meta = coord.getMetadata(worldObj);
Block block = coord.getBlock(worldObj);
if(id == Block.grass.blockID)
{
seismicCalculation.add(SeismicType.GRASS);
continue;
}
else if(id == Block.dirt.blockID)
{
seismicCalculation.add(SeismicType.DIRT);
continue;
}
else if(id == Block.stone.blockID)
{
seismicCalculation.add(SeismicType.STONE);
continue;
}
else if(id == Block.bedrock.blockID)
{
seismicCalculation.add(SeismicType.BEDROCK);
continue;
}
if(block instanceof IFluidBlock)
{
Fluid fluid = ((IFluidBlock)block).getFluid();
if(fluid != null)
{
String name = fluid.getName().toLowerCase();
if(name.equals("water"))
{
seismicCalculation.add(SeismicType.WATER);
continue;
}
else if(name.equals("lava"))
{
seismicCalculation.add(SeismicType.LAVA);
continue;
}
else if(name.equals("oil"))
{
seismicCalculation.add(SeismicType.OIL);
continue;
}
}
}
List<String> oreDictNames = MekanismUtils.getOreDictName(new ItemStack(id, 1, meta));
boolean foundName = false;
if(oreDictNames != null && !oreDictNames.isEmpty())
{
for(String s : oreDictNames)
{
if(s.trim().startsWith("ore"))
{
seismicCalculation.add(SeismicType.ORE);
foundName = true;
break;
}
}
}
if(foundName)
{
continue;
}
seismicCalculation.add(SeismicType.OTHER);
}
}
@Override
public boolean doesGuiPauseGame()
{
return false;
}
public static enum SeismicType
{
GRASS,
DIRT,
OTHER,
ORE,
STONE,
BEDROCK,
WATER,
LAVA,
OIL,
EMPTY;
public void render(GuiSeismicReader gui, int xSize, int guiWidth, int y)
{
gui.drawTexturedModalRect(guiWidth + 33, y, xSize, 155+(ordinal()*2), 4, 2);
}
}
}

View file

@ -0,0 +1,57 @@
package mekanism.client.gui;
import mekanism.common.inventory.container.ContainerSeismicVibrator;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSeismicVibrator extends GuiMekanism
{
public TileEntitySeismicVibrator tileEntity;
public GuiSeismicVibrator(InventoryPlayer inventory, TileEntitySeismicVibrator tentity)
{
super(tentity, new ContainerSeismicVibrator(inventory, tentity));
tileEntity = tentity;
guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png"), 164, 15));
}
@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY)
{
int xAxis = (mouseX - (width - xSize) / 2);
int yAxis = (mouseY - (height - ySize) / 2);
fontRenderer.drawString(tileEntity.getInvName(), 45, 6, 0x404040);
fontRenderer.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(tileEntity.isActive ? "Vibrating" : "Idle", 19, 26, 0x00CD00);
fontRenderer.drawString("Chunk: " + (tileEntity.xCoord >> 4) + ", " + (tileEntity.zCoord >> 4), 19, 35, 0x00CD00);
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY)
{
mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
int xAxis = mouseX - guiWidth;
int yAxis = mouseY - guiHeight;
super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY);
}
}

View file

@ -9,10 +9,12 @@ import mekanism.common.network.PacketTileEntity;
import mekanism.common.tile.TileEntityFactory;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSortingTab extends GuiElement
{
public GuiSortingTab(GuiMekanism gui, TileEntity tile, ResourceLocation def)

View file

@ -14,6 +14,10 @@ import net.minecraft.entity.player.EntityPlayer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiTFilterSelect extends GuiMekanism
{
public TileEntityLogisticalSorter tileEntity;

View file

@ -3,10 +3,9 @@ package mekanism.client.gui;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.EnumColor;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.client.render.MekanismRenderer;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.inventory.container.ContainerFilter;
@ -15,7 +14,6 @@ import mekanism.common.network.PacketLogisticalSorterGui;
import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket;
import mekanism.common.network.PacketNewFilter;
import mekanism.common.tile.TileEntityLogisticalSorter;
import mekanism.common.transporter.TItemStackFilter;
import mekanism.common.transporter.TOreDictFilter;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
@ -30,6 +28,10 @@ import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiTOreDictFilter extends GuiMekanism
{
public TileEntityLogisticalSorter tileEntity;

View file

@ -30,6 +30,7 @@ import mekanism.common.inventory.container.ContainerRobitRepair;
import mekanism.common.inventory.container.ContainerRobitSmelting;
import mekanism.common.inventory.container.ContainerRotaryCondensentrator;
import mekanism.common.inventory.container.ContainerSalinationController;
import mekanism.common.inventory.container.ContainerSeismicVibrator;
import mekanism.common.inventory.container.ContainerTeleporter;
import mekanism.common.tile.TileEntityAdvancedElectricMachine;
import mekanism.common.tile.TileEntityAdvancedFactory;
@ -68,6 +69,7 @@ import mekanism.common.tile.TileEntityRotaryCondensentrator;
import mekanism.common.tile.TileEntitySalinationController;
import mekanism.common.tile.TileEntitySalinationTank;
import mekanism.common.tile.TileEntitySalinationValve;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.tile.TileEntityTeleporter;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
@ -241,6 +243,7 @@ public class CommonProxy
Mekanism.chemicalDissolutionChamberUsage = Mekanism.configuration.get("usage", "ChemicalDissolutionChamberUsage", 400D).getDouble(400D);
Mekanism.chemicalWasherUsage = Mekanism.configuration.get("usage", "ChemicalWasherUsage", 200D).getDouble(200D);
Mekanism.chemicalCrystalizerUsage = Mekanism.configuration.get("usage", "ChemicalCrystalizerUsage", 400D).getDouble(400D);
Mekanism.seismicVibratorUsage = Mekanism.configuration.get("usage", "SeismicVibratorUsage", 50D).getDouble(50D);
Mekanism.configuration.save();
}
@ -390,6 +393,8 @@ public class CommonProxy
return new ContainerChemicalWasher(player.inventory, (TileEntityChemicalWasher)tileEntity);
case 37:
return new ContainerChemicalCrystalizer(player.inventory, (TileEntityChemicalCrystalizer)tileEntity);
case 39:
return new ContainerSeismicVibrator(player.inventory, (TileEntitySeismicVibrator)tileEntity);
}
return null;

View file

@ -238,7 +238,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
{
fluidStored.amount -= tickEmit(fluidStored, true);
if(fluidStored.amount <= 0)
if(fluidStored != null && fluidStored.amount <= 0)
{
fluidStored = null;
}

View file

@ -78,6 +78,7 @@ import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.item.ItemProxy;
import mekanism.common.item.ItemRobit;
import mekanism.common.item.ItemScubaTank;
import mekanism.common.item.ItemSeismicReader;
import mekanism.common.item.ItemShard;
import mekanism.common.item.ItemWalkieTalkie;
import mekanism.common.multipart.ItemPartTransmitter;
@ -117,6 +118,7 @@ import mekanism.common.tile.TileEntityBoundingBlock;
import mekanism.common.tile.TileEntityCardboardBox;
import mekanism.common.tile.TileEntityElectricBlock;
import mekanism.common.tile.TileEntityEnergizedSmelter;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.transporter.TransporterManager;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
@ -217,6 +219,8 @@ public class Mekanism
public static Set<String> gasmaskOn = new HashSet<String>();
public static Set<Coord4D> ic2Registered = new HashSet<Coord4D>();
public static Set<Coord4D> activeVibrators = new HashSet<Coord4D>();
//Block IDs
public static int basicBlockID;
@ -262,6 +266,7 @@ public class Mekanism
public static Item FreeRunners;
public static ItemJetpack ArmoredJetpack;
public static Item FilterCard;
public static ItemSeismicReader SeismicReader;
//Blocks
public static Block BasicBlock;
@ -339,6 +344,7 @@ public class Mekanism
public static double chemicalDissolutionChamberUsage;
public static double chemicalWasherUsage;
public static double chemicalCrystalizerUsage;
public static double seismicVibratorUsage;
/**
* Adds all in-game crafting and smelting recipes.
@ -797,7 +803,7 @@ public class Mekanism
CompressedRedstone = new ItemMekanism(configuration.getItem("CompressedRedstone", ITEM_ID++).getInt()).setUnlocalizedName("CompressedRedstone");
SpeedUpgrade = new ItemMachineUpgrade(configuration.getItem("SpeedUpgrade", ITEM_ID++).getInt()).setUnlocalizedName("SpeedUpgrade");
EnergyUpgrade = new ItemMachineUpgrade(configuration.getItem("EnergyUpgrade", ITEM_ID++).getInt()).setUnlocalizedName("EnergyUpgrade");
EnergyTablet = (ItemEnergized)new ItemEnergized(configuration.getItem("EnergyTablet", ITEM_ID++).getInt(), 1000000, 120).setUnlocalizedName("EnergyTablet");
EnergyTablet = (ItemEnergized)new ItemEnergized(configuration.getItem("EnergyTablet", ITEM_ID++).getInt(), 1000000).setUnlocalizedName("EnergyTablet");
Dictionary = new ItemDictionary(configuration.getItem("Dictionary", ITEM_ID++).getInt()).setUnlocalizedName("Dictionary");
FilterCard = new ItemFilterCard(configuration.getItem("FilterCard", ITEM_ID++).getInt()).setUnlocalizedName("FilterCard");
ElectricBow = (ItemElectricBow)new ItemElectricBow(configuration.getItem("ElectricBow", ITEM_ID++).getInt()).setUnlocalizedName("ElectricBow");
@ -805,6 +811,7 @@ public class Mekanism
Configurator = new ItemConfigurator(configuration.getItem("Configurator", ITEM_ID++).getInt()).setUnlocalizedName("Configurator");
NetworkReader = new ItemNetworkReader(configuration.getItem("NetworkReader", ITEM_ID++).getInt()).setUnlocalizedName("NetworkReader");
WalkieTalkie = new ItemWalkieTalkie(configuration.getItem("WalkieTalkie", ITEM_ID++).getInt()).setUnlocalizedName("WalkieTalkie");
SeismicReader = (ItemSeismicReader)new ItemSeismicReader(configuration.getItem("SeismicReader", ITEM_ID++).getInt()).setUnlocalizedName("SeismicReader");
AtomicDisassembler = (ItemAtomicDisassembler)new ItemAtomicDisassembler(configuration.getItem("AtomicDisassembler", ITEM_ID++).getInt()).setUnlocalizedName("AtomicDisassembler");
GasMask = (ItemGasMask)new ItemGasMask(configuration.getItem("GasMask", ITEM_ID++).getInt()).setUnlocalizedName("GasMask");
ScubaTank = (ItemScubaTank)new ItemScubaTank(configuration.getItem("ScubaTank", ITEM_ID++).getInt()).setUnlocalizedName("ScubaTank");
@ -866,6 +873,7 @@ public class Mekanism
GameRegistry.registerItem(FreeRunners, "FrictionBoots");
GameRegistry.registerItem(ArmoredJetpack, "ArmoredJetpack");
GameRegistry.registerItem(FilterCard, "FilterCard");
GameRegistry.registerItem(SeismicReader, "SeismicReader");
}
/**
@ -1055,6 +1063,7 @@ public class Mekanism
GameRegistry.registerTileEntity(TileEntityBoundingBlock.class, "BoundingBlock");
GameRegistry.registerTileEntity(TileEntityAdvancedBoundingBlock.class, "AdvancedBoundingBlock");
GameRegistry.registerTileEntity(TileEntityCardboardBox.class, "CardboardBox");
GameRegistry.registerTileEntity(TileEntitySeismicVibrator.class, "SeismicVibrator");
//Load tile entities that have special renderers.
proxy.registerSpecialTileEntities();
@ -1099,6 +1108,7 @@ public class Mekanism
ic2Registered.clear();
jetpackOn.clear();
gasmaskOn.clear();
activeVibrators.clear();
TransporterManager.flowingStacks.clear();
}

View file

@ -53,6 +53,7 @@ import mekanism.common.tile.TileEntityOsmiumCompressor;
import mekanism.common.tile.TileEntityPrecisionSawmill;
import mekanism.common.tile.TileEntityPurificationChamber;
import mekanism.common.tile.TileEntityRotaryCondensentrator;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.tile.TileEntityTeleporter;
import mekanism.common.transporter.TransporterFilter;
import mekanism.common.util.MekanismUtils;
@ -172,6 +173,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
icons[5][0] = register.registerIcon("mekanism:PrecisionSawmillFrontOff");
icons[5][1] = register.registerIcon("mekanism:PrecisionSawmillFrontOn");
icons[5][2] = register.registerIcon("mekanism:SteelCasing");
icons[9][0] = register.registerIcon("mekanism:SteelBlock");
icons[9][1] = register.registerIcon("mekanism:SeismicVibrator");
}
}
@ -437,6 +440,16 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
return icons[meta][2];
}
}
else if(meta == 9)
{
if(side == 3)
{
return icons[meta][1];
}
else {
return icons[meta][0];
}
}
}
return null;
@ -570,6 +583,16 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
return icons[metadata][2];
}
}
else if(metadata == 9)
{
if(side == tileEntity.facing)
{
return icons[metadata][1];
}
else {
return icons[metadata][0];
}
}
}
return null;
@ -1102,7 +1125,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
PRECISION_SAWMILL(Mekanism.machineBlock2ID, 5, "PrecisionSawmill", 34, Mekanism.precisionSawmillUsage*400, TileEntityPrecisionSawmill.class, false, true),
CHEMICAL_DISSOLUTION_CHAMBER(Mekanism.machineBlock2ID, 6, "ChemicalDissolutionChamber", 35, 20000, TileEntityChemicalDissolutionChamber.class, true, false),
CHEMICAL_WASHER(Mekanism.machineBlock2ID, 7, "ChemicalWasher", 36, 20000, TileEntityChemicalWasher.class, true, false),
CHEMICAL_CRYSTALIZER(Mekanism.machineBlock2ID, 8, "ChemicalCrystalizer", 37, 20000, TileEntityChemicalCrystalizer.class, true, false);
CHEMICAL_CRYSTALIZER(Mekanism.machineBlock2ID, 8, "ChemicalCrystalizer", 37, 20000, TileEntityChemicalCrystalizer.class, true, false),
SEISMIC_VIBRATOR(Mekanism.machineBlock2ID, 9, "SeismicVibrator", 39, 20000, TileEntitySeismicVibrator.class, false, false);
public int typeId;
public int meta;

View file

@ -0,0 +1,123 @@
package mekanism.common.inventory.container;
import mekanism.common.inventory.slot.SlotEnergy.SlotDischarge;
import mekanism.common.tile.TileEntitySeismicVibrator;
import mekanism.common.util.ChargeUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerSeismicVibrator extends Container
{
private TileEntitySeismicVibrator tileEntity;
public ContainerSeismicVibrator(InventoryPlayer inventory, TileEntitySeismicVibrator tentity)
{
tileEntity = tentity;
addSlotToContainer(new SlotDischarge(tentity, 0, 27, 14));
int slotX;
for(slotX = 0; slotX < 3; ++slotX)
{
for(int slotY = 0; slotY < 9; ++slotY)
{
addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 84 + slotX * 18));
}
}
for(slotX = 0; slotX < 9; ++slotX)
{
addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 142));
}
tileEntity.open(inventory.player);
tileEntity.openChest();
}
@Override
public void onContainerClosed(EntityPlayer entityplayer)
{
super.onContainerClosed(entityplayer);
tileEntity.close(entityplayer);
tileEntity.closeChest();
}
@Override
public boolean canInteractWith(EntityPlayer entityplayer)
{
return tileEntity.isUseableByPlayer(entityplayer);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slotID)
{
ItemStack stack = null;
Slot currentSlot = (Slot)inventorySlots.get(slotID);
if(currentSlot != null && currentSlot.getHasStack())
{
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if(ChargeUtils.canBeDischarged(slotStack))
{
if(slotID != 0)
{
if(!mergeItemStack(slotStack, 0, 1, false))
{
return null;
}
}
else if(slotID == 0)
{
if(!mergeItemStack(slotStack, 1, inventorySlots.size(), true))
{
return null;
}
}
}
else {
if(slotID >= 1 && slotID <= 27)
{
if(!mergeItemStack(slotStack, 28, inventorySlots.size(), false))
{
return null;
}
}
else if(slotID > 27)
{
if(!mergeItemStack(slotStack, 1, 27, false))
{
return null;
}
}
else {
if(!mergeItemStack(slotStack, 1, inventorySlots.size(), true))
{
return null;
}
}
}
if(slotStack.stackSize == 0)
{
currentSlot.putStack((ItemStack)null);
}
else {
currentSlot.onSlotChanged();
}
if(slotStack.stackSize == stack.stackSize)
{
return null;
}
currentSlot.onPickupFromSlot(player, slotStack);
}
return stack;
}
}

View file

@ -30,7 +30,7 @@ public class ItemAtomicDisassembler extends ItemEnergized
public ItemAtomicDisassembler(int id)
{
super(id, 1000000, 120);
super(id, 1000000);
}
@Override

View file

@ -34,7 +34,7 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench
public ItemConfigurator(int id)
{
super(id, 60000, 120);
super(id, 60000);
}
@Override

View file

@ -17,7 +17,7 @@ public class ItemElectricBow extends ItemEnergized
{
public ItemElectricBow(int id)
{
super(id, 120000, 120);
super(id, 120000);
}
@Override

View file

@ -22,7 +22,7 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, ISpec
/** The maximum amount of energy this item can hold. */
public double MAX_ELECTRICITY;
public ItemEnergized(int id, double maxElectricity, float voltage)
public ItemEnergized(int id, double maxElectricity)
{
super(id);
MAX_ELECTRICITY = maxElectricity;

View file

@ -16,7 +16,7 @@ public class ItemNetworkReader extends ItemEnergized
public ItemNetworkReader(int id)
{
super(id, 60000, 120);
super(id, 60000);
}
@Override

View file

@ -14,7 +14,7 @@ public class ItemPortableTeleporter extends ItemEnergized
{
public ItemPortableTeleporter(int id)
{
super(id, 1000000, 120);
super(id, 1000000);
}
@Override

View file

@ -21,7 +21,7 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory
{
public ItemRobit(int id)
{
super(id, 100000, 120);
super(id, 100000);
}
@Override

View file

@ -0,0 +1,52 @@
package mekanism.common.item;
import mekanism.api.Chunk3D;
import mekanism.api.EnumColor;
import mekanism.common.Mekanism;
import mekanism.common.util.MekanismUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class ItemSeismicReader extends ItemEnergized
{
public static final double ENERGY_USAGE = 250;
public ItemSeismicReader(int id)
{
super(id, 12000);
}
@Override
public boolean canSend(ItemStack itemStack)
{
return false;
}
@Override
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
{
Chunk3D chunk = new Chunk3D(entityplayer);
if(!world.isRemote)
{
if(getEnergy(itemstack) < ENERGY_USAGE)
{
entityplayer.addChatMessage(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.RED + MekanismUtils.localize("tooltip.seismicReader.needsEnergy"));
}
else if(!MekanismUtils.isChunkVibrated(chunk))
{
entityplayer.addChatMessage(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.RED + MekanismUtils.localize("tooltip.seismicReader.noVibrations"));
}
if(!entityplayer.capabilities.isCreativeMode)
{
setEnergy(itemstack, getEnergy(itemstack)-ENERGY_USAGE);
}
}
entityplayer.openGui(Mekanism.instance, 38, world, (int)entityplayer.posX, (int)entityplayer.posY, (int)entityplayer.posZ);
return itemstack;
}
}

View file

@ -73,6 +73,7 @@ public class PacketConfigSync implements IMekanismPacket
Mekanism.chemicalDissolutionChamberUsage = dataStream.readDouble();
Mekanism.chemicalWasherUsage = dataStream.readDouble();
Mekanism.chemicalCrystalizerUsage = dataStream.readDouble();
Mekanism.seismicVibratorUsage = dataStream.readDouble();
for(IModule module : Mekanism.modulesLoaded)
{
@ -129,6 +130,7 @@ public class PacketConfigSync implements IMekanismPacket
dataStream.writeDouble(Mekanism.chemicalDissolutionChamberUsage);
dataStream.writeDouble(Mekanism.chemicalWasherUsage);
dataStream.writeDouble(Mekanism.chemicalCrystalizerUsage);
dataStream.writeDouble(Mekanism.seismicVibratorUsage);
for(IModule module : Mekanism.modulesLoaded)
{

View file

@ -230,7 +230,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
}
}
if(doEject && delayTicks == 0 && getTopEject(false, null) != null && getEjectInv() != null)
if(doEject && delayTicks == 0 && getTopEject(false, null) != null && getEjectInv() != null && getEjectTile() != null)
{
if(getEjectInv() instanceof IInventory)
{

View file

@ -0,0 +1,191 @@
package mekanism.common.tile;
import java.util.ArrayList;
import mekanism.api.Coord4D;
import mekanism.common.IActiveState;
import mekanism.common.IRedstoneControl;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.IRedstoneControl.RedstoneControl;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import com.google.common.io.ByteArrayDataInput;
public class TileEntitySeismicVibrator extends TileEntityElectricBlock implements IActiveState, IRedstoneControl
{
public boolean isActive;
public boolean clientActive;
public int updateDelay;
public RedstoneControl controlType = RedstoneControl.DISABLED;
public TileEntitySeismicVibrator()
{
super("SeismicReader", MachineType.SEISMIC_VIBRATOR.baseEnergy);
inventory = new ItemStack[1];
}
@Override
public void onUpdate()
{
super.onUpdate();
if(worldObj.isRemote)
{
if(updateDelay > 0)
{
updateDelay--;
if(updateDelay == 0 && clientActive != isActive)
{
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
}
else {
if(updateDelay > 0)
{
updateDelay--;
if(updateDelay == 0 && clientActive != isActive)
{
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTileEntity().setParams(Coord4D.get(this), getNetworkedData(new ArrayList())));
}
}
ChargeUtils.discharge(0, this);
if(MekanismUtils.canFunction(this) && getEnergy() > Mekanism.seismicVibratorUsage)
{
setActive(true);
setEnergy(getEnergy()-Mekanism.seismicVibratorUsage);
}
else {
setActive(false);
}
}
if(getActive())
{
Mekanism.activeVibrators.add(Coord4D.get(this));
}
else {
Mekanism.activeVibrators.remove(Coord4D.get(this));
}
}
@Override
public void invalidate()
{
super.invalidate();
Mekanism.activeVibrators.remove(Coord4D.get(this));
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setBoolean("isActive", isActive);
nbtTags.setInteger("controlType", controlType.ordinal());
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
clientActive = isActive = nbtTags.getBoolean("isActive");
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
}
@Override
public void handlePacketData(ByteArrayDataInput dataStream)
{
super.handlePacketData(dataStream);
clientActive = dataStream.readBoolean();
controlType = RedstoneControl.values()[dataStream.readInt()];
if(updateDelay == 0 && clientActive != isActive)
{
updateDelay = Mekanism.UPDATE_DELAY;
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
data.add(isActive);
data.add(controlType.ordinal());
return data;
}
@Override
public void setActive(boolean active)
{
isActive = active;
if(clientActive != active && updateDelay == 0)
{
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTileEntity().setParams(Coord4D.get(this), getNetworkedData(new ArrayList())));
updateDelay = 10;
clientActive = active;
}
}
@Override
public boolean getActive()
{
return isActive;
}
@Override
public boolean renderUpdate()
{
return true;
}
@Override
public boolean lightUpdate()
{
return true;
}
@Override
public boolean canSetFacing(int facing)
{
return facing != 0 && facing != 1;
}
@Override
public RedstoneControl getControlType()
{
return controlType;
}
@Override
public void setControlType(RedstoneControl type)
{
controlType = type;
MekanismUtils.saveChunk(this);
}
}

View file

@ -12,6 +12,7 @@ import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import mekanism.api.Chunk3D;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.gas.Gas;
@ -1265,6 +1266,24 @@ public final class MekanismUtils
return null;
}
/**
* Whether or not the provided chunk is being vibrated by a Seismic Vibrator.
* @param chunk - chunk to check
* @return if the chunk is being vibrated
*/
public static boolean isChunkVibrated(Chunk3D chunk)
{
for(Coord4D coord : Mekanism.activeVibrators)
{
if(coord.getChunk3D().equals(chunk))
{
return true;
}
}
return false;
}
public static enum ResourceType
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -34,6 +34,7 @@ item.BrineBucket.name=Brine Bucket
item.FreeRunners.name=Free Runners
item.ArmoredJetpack.name=Armored Jetpack
item.FilterCard.name=Filter Card
item.SeismicReader.name=Seismic Reader
//Gas Tank
tile.GasTank.GasTank.name=Gas Tank
@ -91,6 +92,7 @@ tile.MachineBlock2.PrecisionSawmill.name=Precision Sawmill
tile.MachineBlock2.ChemicalDissolutionChamber.name=Chemical Dissolution Chamber
tile.MachineBlock2.ChemicalWasher.name=Chemical Washer
tile.MachineBlock2.ChemicalCrystalizer.name=Chemical Crystalizer
tile.MachineBlock2.SeismicVibrator.name=Seismic Vibrator
//Infuse types
infuse.carbon=Carbon
@ -270,6 +272,7 @@ gui.filters=Filters
gui.idle=Idle
gui.data=Data
gui.newFilter=New Filter
gui.energy=Energy
gui.chemicalInfuser.short=C. Infuser
gui.chemicalDissolutionChamber.short=C. Dissolution Chamber
@ -292,6 +295,11 @@ gui.factory.purifying=Purifying
gui.factory.injecting=Injecting
gui.factory.autoSort=Auto-sort
gui.seismicReader.short=S. Reader
gui.seismicReader.solids=Solids
gui.seismicReader.fluids=Fluids
gui.seismicReader.reading=Reading
gui.filterSelect.title=Create New Filter
gui.oredictFilter=OreDict Filter
@ -377,6 +385,9 @@ tooltip.jetpack.regular=Regular
tooltip.jetpack.hover=Hover
tooltip.jetpack.disabled=Disabled
tooltip.seismicReader.needsEnergy=Not enough energy to interpret vibration
tooltip.seismicReader.noVibrations=Unable to discover any vibrations
tooltip.EnrichmentChamber=A simple machine used to enrich ores into !ntwo of their dust counterparts, as well as !nperform many other operations.
tooltip.OsmiumCompressor=A fairly advanced machine used to compress !nosmium into various dusts in order to create !ntheir ingot counterparts.
tooltip.Combiner=A machine used to combine dusts and cobblestone to !nform their ore counterparts.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB