New Metallurgic Infuser model, more efficient active state management

This commit is contained in:
Aidan Brady 2013-11-02 19:06:56 -04:00
parent 2a73dc3332
commit d1a1e3375a
15 changed files with 301 additions and 203 deletions

View file

@ -1,170 +1,222 @@
package mekanism.client.model;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
@SideOnly(Side.CLIENT)
public class ModelMetallurgicInfuser extends ModelBase
public class ModelMetallurgicInfuser extends ModelBase
{
public ModelRenderer PANEL;
public ModelRenderer MACHINE;
public ModelRenderer CENTER_CIRCUIT;
public ModelRenderer PIPE_1;
public ModelRenderer PIPE_2;
public ModelRenderer GUI_STAND;
public ModelRenderer GUI_SCREEN;
public ModelRenderer PIPE_2_TOP;
public ModelRenderer PIPE_1_TOP;
public ModelRenderer FRONT_PANEL;
public ModelRenderer WIRE_1;
public ModelRenderer WIRE_2;
public ModelRenderer SIDE_WIRE_1;
public ModelRenderer SIDE_WIRE_2;
public ModelRenderer VERTICAL_WIRE;
public ModelRenderer TUBE;
public ModelMetallurgicInfuser()
ModelRenderer Base;
ModelRenderer RightChamber;
ModelRenderer TopChamber;
ModelRenderer BackChamber;
ModelRenderer LeftChamber;
ModelRenderer FCTop;
ModelRenderer FCBottom;
ModelRenderer FCRight;
ModelRenderer FCLeft;
ModelRenderer FCDoor;
ModelRenderer Cable1;
ModelRenderer Cable3;
ModelRenderer Cable5;
ModelRenderer Cable2;
ModelRenderer Cable4;
ModelRenderer Cable6;
ModelRenderer TopPanelDec;
ModelRenderer BackPlate;
ModelRenderer TopPanel;
ModelRenderer TopPanelExtr;
ModelRenderer ConnectorRight;
ModelRenderer ConnectorLeft;
ModelRenderer ConnectorWireRight;
ModelRenderer ConnectorWireLeft;
ModelRenderer ConnectorWireTop;
public ModelMetallurgicInfuser()
{
textureWidth = 256;
textureHeight = 256;
PANEL = new ModelRenderer(this, 0, 0);
PANEL.addBox(-8.0F, -0.5F, -8.0F, 16, 1, 16, 0);
PANEL.setRotationPoint(0.0F, -0.5F, 0.0F);
PANEL.setTextureSize(256, 256);
PANEL.mirror = true;
setRotation(PANEL, 0F, 0F, 0F);
MACHINE = new ModelRenderer(this, 80, 0);
MACHINE.addBox(-4.0F, -5.0F, -4.0F, 8, 10, 8, 0);
MACHINE.setRotationPoint(2.0F, -6.0F, 0.0F);
MACHINE.setTextureSize(256, 256);
MACHINE.mirror = true;
setRotation(MACHINE, 0F, 0F, 0F);
CENTER_CIRCUIT = new ModelRenderer(this, 64, 0);
CENTER_CIRCUIT.addBox(-2.0F, -0.5F, -2.0F, 4, 1, 4, 0);
CENTER_CIRCUIT.setRotationPoint(2.0F, -11.5F, 0.0F);
CENTER_CIRCUIT.setTextureSize(256, 256);
CENTER_CIRCUIT.mirror = true;
setRotation(CENTER_CIRCUIT, 0F, 0F, 0F);
PIPE_1 = new ModelRenderer(this, 0, 32);
PIPE_1.addBox(-1.0F, -5.5F, -0.5F, 2, 11, 1, 0);
PIPE_1.setRotationPoint(2.0F, -6.0F, -4.5F);
PIPE_1.setTextureSize(256, 256);
PIPE_1.mirror = true;
setRotation(PIPE_1, 0F, 0F, 0F);
PIPE_2 = new ModelRenderer(this, 0, 32);
PIPE_2.addBox(-1.0F, -5.5F, -0.5F, 2, 11, 1, 0);
PIPE_2.setRotationPoint(2.0F, -6.0F, 4.5F);
PIPE_2.setTextureSize(256, 256);
PIPE_2.mirror = true;
setRotation(PIPE_2, 0F, 0F, 0F);
GUI_STAND = new ModelRenderer(this, 32, 32);
GUI_STAND.addBox(-0.5F, -3.5F, -0.5F, 1, 7, 1, 0);
GUI_STAND.setRotationPoint(-5.0F, -4.5F, 0.0F);
GUI_STAND.setTextureSize(256, 256);
GUI_STAND.mirror = true;
setRotation(GUI_STAND, 0F, 0F, 0F);
GUI_SCREEN = new ModelRenderer(this, 48, 32);
GUI_SCREEN.addBox(-1.5F, -0.5F, -3.0F, 3, 1, 6, 0);
GUI_SCREEN.setRotationPoint(-5.0F, -8.0F, 0.0F);
GUI_SCREEN.setTextureSize(256, 256);
GUI_SCREEN.mirror = true;
setRotation(GUI_SCREEN, 0F, 0F, -0.5F);
PIPE_2_TOP = new ModelRenderer(this, 16, 32);
PIPE_2_TOP.addBox(-1.0F, -0.5F, -1.0F, 2, 1, 2, 0);
PIPE_2_TOP.setRotationPoint(2.0F, -11.0F, 3.0F);
PIPE_2_TOP.setTextureSize(256, 256);
PIPE_2_TOP.mirror = true;
setRotation(PIPE_2_TOP, 0F, 0F, 0F);
PIPE_1_TOP = new ModelRenderer(this, 16, 32);
PIPE_1_TOP.addBox(-1.0F, -0.5F, -1.0F, 2, 1, 2, 0);
PIPE_1_TOP.setRotationPoint(2.0F, -11.0F, -3.0F);
PIPE_1_TOP.setTextureSize(256, 256);
PIPE_1_TOP.mirror = true;
setRotation(PIPE_1_TOP, 0F, 0F, 0F);
FRONT_PANEL = new ModelRenderer(this, 32, 64);
FRONT_PANEL.addBox(-0.5F, -1.5F, -5.0F, 1, 3, 10, 0);
FRONT_PANEL.setRotationPoint(-7.0F, -2.5F, 0.0F);
FRONT_PANEL.setTextureSize(256, 256);
FRONT_PANEL.mirror = true;
setRotation(FRONT_PANEL, 0F, 0F, 0F);
WIRE_1 = new ModelRenderer(this, 48, 48);
WIRE_1.addBox(-2.0F, -0.5F, -0.5F, 4, 1, 1, 0);
WIRE_1.setRotationPoint(-0.5F, -1.0F, -4.5F);
WIRE_1.setTextureSize(256, 256);
WIRE_1.mirror = true;
setRotation(WIRE_1, 0F, 0F, 0F);
WIRE_2 = new ModelRenderer(this, 0, 48);
WIRE_2.addBox(-3.0F, -0.5F, -0.5F, 6, 1, 1, 0);
WIRE_2.setRotationPoint(-1.5F, -1.0F, 4.5F);
WIRE_2.setTextureSize(256, 256);
WIRE_2.mirror = true;
setRotation(WIRE_2, 0F, 0F, 0F);
SIDE_WIRE_1 = new ModelRenderer(this, 32, 48);
SIDE_WIRE_1.addBox(-0.5F, -0.5F, -2.5F, 1, 1, 5, 0);
SIDE_WIRE_1.setRotationPoint(-4.0F, -1.0F, 2.0F);
SIDE_WIRE_1.setTextureSize(256, 256);
SIDE_WIRE_1.mirror = true;
setRotation(SIDE_WIRE_1, 0F, 0F, 0F);
SIDE_WIRE_2 = new ModelRenderer(this, 64, 48);
SIDE_WIRE_2.addBox(-0.5F, -0.5F, -1.5F, 1, 1, 3, 0);
SIDE_WIRE_2.setRotationPoint(-2.0F, -1.0F, -2.5F);
SIDE_WIRE_2.setTextureSize(256, 256);
SIDE_WIRE_2.mirror = true;
setRotation(SIDE_WIRE_2, 0F, 0F, 0F);
VERTICAL_WIRE = new ModelRenderer(this, 0, 64);
VERTICAL_WIRE.addBox(-0.5F, -3.0F, -0.5F, 1, 6, 1, 0);
VERTICAL_WIRE.setRotationPoint(-2.0F, -4.5F, -1.5F);
VERTICAL_WIRE.setTextureSize(256, 256);
VERTICAL_WIRE.mirror = true;
setRotation(VERTICAL_WIRE, 0F, 0F, 0F);
TUBE = new ModelRenderer(this, 16, 64);
TUBE.addBox(-2.5F, -0.5F, -1.0F, 5, 1, 2, 0);
TUBE.setRotationPoint(-4.0F, -3.0F, 2.0F);
TUBE.setTextureSize(256, 256);
TUBE.mirror = true;
setRotation(TUBE, 0F, 0F, 0F);
textureWidth = 128;
textureHeight = 64;
Base = new ModelRenderer(this, 0, 0);
Base.addBox(0F, 0F, 0F, 14, 2, 16);
Base.setRotationPoint(-7F, 22F, -8F);
Base.setTextureSize(128, 64);
Base.mirror = true;
setRotation(Base, 0F, 0F, 0F);
RightChamber = new ModelRenderer(this, 61, 0);
RightChamber.addBox(0F, 0F, 0F, 1, 6, 5);
RightChamber.setRotationPoint(5.5F, 16F, -6F);
RightChamber.setTextureSize(128, 64);
RightChamber.mirror = true;
setRotation(RightChamber, 0F, 0F, 0F);
TopChamber = new ModelRenderer(this, 86, 12);
TopChamber.addBox(0F, 0F, 0F, 11, 1, 5);
TopChamber.setRotationPoint(-5.5F, 15F, -6F);
TopChamber.setTextureSize(128, 64);
TopChamber.mirror = true;
setRotation(TopChamber, 0F, 0F, 0F);
BackChamber = new ModelRenderer(this, 74, 0);
BackChamber.addBox(0F, 0F, 0F, 11, 6, 1);
BackChamber.setRotationPoint(-5.5F, 16F, -1F);
BackChamber.setTextureSize(128, 64);
BackChamber.mirror = true;
setRotation(BackChamber, 0F, 0F, 0F);
LeftChamber = new ModelRenderer(this, 61, 0);
LeftChamber.addBox(0F, 0F, 0F, 1, 6, 5);
LeftChamber.setRotationPoint(-6.5F, 16F, -6F);
LeftChamber.setTextureSize(128, 64);
LeftChamber.mirror = true;
setRotation(LeftChamber, 0F, 0F, 0F);
FCTop = new ModelRenderer(this, 99, 6);
FCTop.addBox(0F, 0F, 0F, 11, 1, 1);
FCTop.setRotationPoint(-5.5F, 16F, -7F);
FCTop.setTextureSize(128, 64);
FCTop.mirror = true;
setRotation(FCTop, 0F, 0F, 0F);
FCBottom = new ModelRenderer(this, 99, 6);
FCBottom.addBox(0F, 0F, 0F, 11, 1, 1);
FCBottom.setRotationPoint(-5.5F, 21F, -7F);
FCBottom.setTextureSize(128, 64);
FCBottom.mirror = true;
setRotation(FCBottom, 0F, 0F, 0F);
FCRight = new ModelRenderer(this, 61, 11);
FCRight.addBox(0F, 0F, 0F, 1, 4, 1);
FCRight.setRotationPoint(4.5F, 17F, -7F);
FCRight.setTextureSize(128, 64);
FCRight.mirror = true;
setRotation(FCRight, 0F, 0F, 0F);
FCLeft = new ModelRenderer(this, 61, 11);
FCLeft.addBox(0F, 0F, 0F, 1, 4, 1);
FCLeft.setRotationPoint(-5.5F, 17F, -7F);
FCLeft.setTextureSize(128, 64);
FCLeft.mirror = true;
setRotation(FCLeft, 0F, 0F, 0F);
FCDoor = new ModelRenderer(this, 99, 0);
FCDoor.addBox(0F, -2F, -0.5F, 9, 4, 1);
FCDoor.setRotationPoint(-4.5F, 19F, -7F);
FCDoor.setTextureSize(128, 64);
FCDoor.mirror = true;
setRotation(FCDoor, 0F, 0F, 0F);
Cable1 = new ModelRenderer(this, 105, 19);
Cable1.addBox(0F, 0F, 0F, 1, 1, 7);
Cable1.setRotationPoint(-4.5F, 19.5F, 0F);
Cable1.setTextureSize(128, 64);
Cable1.mirror = true;
setRotation(Cable1, 0F, 0.0174533F, 0F);
Cable3 = new ModelRenderer(this, 86, 19);
Cable3.addBox(0F, 0F, 0F, 2, 2, 7);
Cable3.setRotationPoint(3F, 18F, 0F);
Cable3.setTextureSize(128, 64);
Cable3.mirror = true;
setRotation(Cable3, 0F, 0.0174533F, 0F);
Cable5 = new ModelRenderer(this, 105, 19);
Cable5.addBox(0F, 0F, 0F, 1, 1, 7);
Cable5.setRotationPoint(3.5F, 19.5F, 0F);
Cable5.setTextureSize(128, 64);
Cable5.mirror = true;
setRotation(Cable5, 0F, 0.0174533F, 0F);
Cable2 = new ModelRenderer(this, 86, 19);
Cable2.addBox(0F, 0F, 0F, 2, 2, 7);
Cable2.setRotationPoint(-5F, 18F, 0F);
Cable2.setTextureSize(128, 64);
Cable2.mirror = true;
setRotation(Cable2, 0F, 0F, 0F);
Cable4 = new ModelRenderer(this, 105, 19);
Cable4.addBox(0F, 0F, 0F, 1, 1, 7);
Cable4.setRotationPoint(-4.5F, 17.5F, 0F);
Cable4.setTextureSize(128, 64);
Cable4.mirror = true;
setRotation(Cable4, 0F, 0.0174533F, 0F);
Cable6 = new ModelRenderer(this, 105, 19);
Cable6.addBox(0F, 0F, 0F, 1, 1, 7);
Cable6.setRotationPoint(3.5F, 17.5F, 0F);
Cable6.setTextureSize(128, 64);
Cable6.mirror = true;
setRotation(Cable6, 0F, 0.0174533F, 0F);
TopPanelDec = new ModelRenderer(this, 33, 28);
TopPanelDec.addBox(0F, 0F, 0F, 13, 1, 1);
TopPanelDec.setRotationPoint(-6.5F, 11.5F, 5.5F);
TopPanelDec.setTextureSize(128, 64);
TopPanelDec.mirror = true;
setRotation(TopPanelDec, 0F, 0F, 0F);
BackPlate = new ModelRenderer(this, 0, 19);
BackPlate.addBox(0F, 0F, 0F, 14, 12, 2);
BackPlate.setRotationPoint(-7F, 10F, 6F);
BackPlate.setTextureSize(128, 64);
BackPlate.mirror = true;
setRotation(BackPlate, 0F, 0F, 0F);
TopPanel = new ModelRenderer(this, 33, 19);
TopPanel.addBox(0F, 0F, 0F, 14, 2, 3);
TopPanel.setRotationPoint(-7F, 10F, 3F);
TopPanel.setTextureSize(128, 64);
TopPanel.mirror = true;
setRotation(TopPanel, 0F, 0F, 0F);
TopPanelExtr = new ModelRenderer(this, 33, 25);
TopPanelExtr.addBox(0F, 0F, 0F, 14, 1, 1);
TopPanelExtr.setRotationPoint(-7F, 10F, 2F);
TopPanelExtr.setTextureSize(128, 64);
TopPanelExtr.mirror = true;
setRotation(TopPanelExtr, 0F, 0F, 0F);
ConnectorRight = new ModelRenderer(this, 68, 19);
ConnectorRight.addBox(0F, 0F, 0F, 3, 1, 3);
ConnectorRight.setRotationPoint(1.5F, 14F, -5F);
ConnectorRight.setTextureSize(128, 64);
ConnectorRight.mirror = true;
setRotation(ConnectorRight, 0F, 0F, 0F);
ConnectorLeft = new ModelRenderer(this, 68, 19);
ConnectorLeft.addBox(0F, 0F, 0F, 3, 1, 3);
ConnectorLeft.setRotationPoint(-4.5F, 14F, -5F);
ConnectorLeft.setTextureSize(128, 64);
ConnectorLeft.mirror = true;
setRotation(ConnectorLeft, 0F, 0F, 0F);
ConnectorWireRight = new ModelRenderer(this, 68, 24);
ConnectorWireRight.addBox(0F, 0F, 0F, 1, 3, 1);
ConnectorWireRight.setRotationPoint(2.5F, 11F, -4F);
ConnectorWireRight.setTextureSize(128, 64);
ConnectorWireRight.mirror = true;
setRotation(ConnectorWireRight, 0F, 0F, 0F);
ConnectorWireLeft = new ModelRenderer(this, 68, 24);
ConnectorWireLeft.addBox(0F, 0F, 0F, 1, 3, 1);
ConnectorWireLeft.setRotationPoint(-3.5F, 11F, -4F);
ConnectorWireLeft.setTextureSize(128, 64);
ConnectorWireLeft.mirror = true;
setRotation(ConnectorWireLeft, 0F, 0F, 0F);
ConnectorWireTop = new ModelRenderer(this, 68, 29);
ConnectorWireTop.addBox(0F, 0F, 0F, 5, 1, 1);
ConnectorWireTop.setRotationPoint(-2.5F, 11F, -4F);
ConnectorWireTop.setTextureSize(128, 64);
ConnectorWireTop.mirror = true;
setRotation(ConnectorWireTop, 0F, 0F, 0F);
}
public void render(float size)
{
PANEL.render(size);
MACHINE.render(size);
CENTER_CIRCUIT.render(size);
PIPE_1.render(size);
PIPE_2.render(size);
GUI_STAND.render(size);
GUI_SCREEN.render(size);
PIPE_2_TOP.render(size);
PIPE_1_TOP.render(size);
FRONT_PANEL.render(size);
WIRE_1.render(size);
WIRE_2.render(size);
SIDE_WIRE_1.render(size);
SIDE_WIRE_2.render(size);
VERTICAL_WIRE.render(size);
TUBE.render(size);
Base.render(size);
RightChamber.render(size);
TopChamber.render(size);
BackChamber.render(size);
LeftChamber.render(size);
FCTop.render(size);
FCBottom.render(size);
FCRight.render(size);
FCLeft.render(size);
FCDoor.render(size);
Cable1.render(size);
Cable3.render(size);
Cable5.render(size);
Cable2.render(size);
Cable4.render(size);
Cable6.render(size);
TopPanelDec.render(size);
BackPlate.render(size);
TopPanel.render(size);
TopPanelExtr.render(size);
ConnectorRight.render(size);
ConnectorLeft.render(size);
ConnectorWireRight.render(size);
ConnectorWireLeft.render(size);
ConnectorWireTop.render(size);
}
private void setRotation(ModelRenderer model, float x, float y, float z)
{
model.rotateAngleX = x;

View file

@ -54,7 +54,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler
{
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F);
GL11.glTranslatef(0.0F, 0.3F, 0.0F);
GL11.glTranslatef(0.0F, -0.95F, -0.10F);
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "MetallurgicInfuser.png"));
metallurgicInfuser.render(0.0625F);
}

View file

@ -27,17 +27,17 @@ public class RenderMetallurgicInfuser extends TileEntitySpecialRenderer
{
GL11.glPushMatrix();
GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "MetallurgicInfuser.png"));
switch(tileEntity.facing)
{
case 2: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break;
case 3: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break;
case 4: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break;
case 5: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break;
case 2: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break;
case 3: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break;
case 4: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break;
case 5: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break;
}
GL11.glTranslatef(0, -1.5F, 0);
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
model.render(0.0625F);
GL11.glPopMatrix();

View file

@ -54,11 +54,14 @@ public class SoundHandler
URL url = getClass().getClassLoader().getResource("assets/mekanism/sound");
File dir = new File(url.getFile());
for(File file : dir.listFiles())
if(dir != null)
{
if(!file.isDirectory() && file.getName().endsWith(".ogg"))
for(File file : dir.listFiles())
{
preloadSound(file.getName());
if(!file.isDirectory() && file.getName().endsWith(".ogg"))
{
preloadSound(file.getName());
}
}
}

View file

@ -277,11 +277,18 @@ public class BlockBasic extends Block
tileEntity.structure.fluidStored.amount += itemFluid.amount;
}
player.setCurrentItemOrArmor(0, new ItemStack(Item.bucketEmpty));
if(!player.capabilities.isCreativeMode)
{
player.setCurrentItemOrArmor(0, new ItemStack(Item.bucketEmpty));
}
return true;
}
else {
itemStack.stackSize--;
if(!player.capabilities.isCreativeMode)
{
itemStack.stackSize--;
}
if(itemStack.stackSize == 0)
{

View file

@ -187,6 +187,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
public void randomDisplayTick(World world, int x, int y, int z, Random random)
{
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z);
if(MekanismUtils.isActive(world, x, y, z) && !(tileEntity instanceof TileEntityChargepad) && !(tileEntity instanceof TileEntityLogisticalSorter))
{
float xRandom = (float)x + 0.5F;

View file

@ -86,7 +86,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM
handleSecondaryFuel();
if(canOperate() && MekanismUtils.canFunction(this) && electricityStored >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK) && secondaryEnergyStored >= SECONDARY_ENERGY_PER_TICK)
if(canOperate() && MekanismUtils.canFunction(this) && getEnergy() >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK) && secondaryEnergyStored >= SECONDARY_ENERGY_PER_TICK)
{
setActive(true);
@ -103,13 +103,18 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM
}
}
else {
setActive(false);
if(prevEnergy >= getEnergy())
{
setActive(false);
}
}
if(!canOperate())
{
operatingTicks = 0;
}
prevEnergy = getEnergy();
}
}

View file

@ -66,6 +66,9 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
/** This machine's current RedstoneControl type. */
public RedstoneControl controlType = RedstoneControl.DISABLED;
/** This machine's previous amount of energy. */
public double prevEnergy;
public TileComponentUpgrade upgradeComponent;
public TileComponentEjector ejectorComponent;
@ -101,8 +104,9 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
{
updateDelay--;
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
@ -163,7 +167,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
super.handlePacketData(dataStream);
operatingTicks = dataStream.readInt();
isActive = dataStream.readBoolean();
clientActive = dataStream.readBoolean();
controlType = RedstoneControl.values()[dataStream.readInt()];
for(int i = 0; i < 6; i++)
@ -171,9 +175,10 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
sideConfig[i] = dataStream.readByte();
}
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
updateDelay = Mekanism.UPDATE_DELAY;
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}

View file

@ -53,7 +53,7 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine
{
ChargeUtils.discharge(1, this);
if(canOperate() && MekanismUtils.canFunction(this) && electricityStored >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK))
if(canOperate() && MekanismUtils.canFunction(this) && getEnergy() >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK))
{
setActive(true);
@ -71,13 +71,18 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine
}
}
else {
setActive(false);
if(prevEnergy >= getEnergy())
{
setActive(false);
}
}
if(!canOperate())
{
operatingTicks = 0;
}
prevEnergy = getEnergy();
}
}

View file

@ -74,6 +74,9 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
/** This machine's recipe type. */
public int recipeType;
/** This machine's previous amount of energy. */
public double prevEnergy;
/** This machine's current RedstoneControl type. */
public RedstoneControl controlType = RedstoneControl.DISABLED;
@ -116,8 +119,9 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
{
updateDelay--;
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
@ -219,27 +223,29 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
}
}
if(!worldObj.isRemote)
boolean hasOperation = false;
for(int i = 0; i < tier.processes; i++)
{
boolean hasOperation = false;
for(int i = 0; i < tier.processes; i++)
if(canOperate(getInputSlot(i), getOutputSlot(i)))
{
if(canOperate(getInputSlot(i), getOutputSlot(i)))
{
hasOperation = true;
break;
}
hasOperation = true;
break;
}
if(MekanismUtils.canFunction(this) && hasOperation && electricityStored >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK))
}
if(MekanismUtils.canFunction(this) && hasOperation && getEnergy() >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK))
{
setActive(true);
}
else {
if(prevEnergy >= getEnergy())
{
setActive(true);
}
else {
setActive(false);
}
}
prevEnergy = getEnergy();
}
}
@ -409,7 +415,7 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
{
super.handlePacketData(dataStream);
isActive = dataStream.readBoolean();
clientActive = dataStream.readBoolean();
recipeType = dataStream.readInt();
recipeTicks = dataStream.readInt();
controlType = RedstoneControl.values()[dataStream.readInt()];
@ -424,9 +430,10 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
sideConfig[i] = dataStream.readByte();
}
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
updateDelay = Mekanism.UPDATE_DELAY;
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}

View file

@ -76,6 +76,9 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
/** How many ticks must pass until this block's active state can sync with the client. */
public int updateDelay;
/** This machine's previous amount of energy. */
public double prevEnergy;
/** This machine's current RedstoneControl type. */
public RedstoneControl controlType = RedstoneControl.DISABLED;
@ -110,8 +113,9 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
{
updateDelay--;
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
@ -172,7 +176,10 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
}
}
else {
setActive(false);
if(prevEnergy >= getEnergy())
{
setActive(false);
}
}
if(!canOperate())
@ -185,6 +192,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
infuseStored = 0;
type = null;
}
prevEnergy = getEnergy();
}
}
@ -408,7 +417,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
super.handlePacketData(dataStream);
isActive = dataStream.readBoolean();
clientActive = dataStream.readBoolean();
operatingTicks = dataStream.readInt();
infuseStored = dataStream.readInt();
controlType = RedstoneControl.values()[dataStream.readInt()];
@ -419,9 +428,10 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
sideConfig[i] = dataStream.readByte();
}
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
updateDelay = Mekanism.UPDATE_DELAY;
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}

View file

@ -271,7 +271,7 @@ public final class CableUtils
{
if(TransmissionType.checkTransmissionType(tileEntity, TransmissionType.ENERGY))
{
emitter.setEnergy(emitter.getEnergy() - (Math.min(emitter.getEnergy(), emitter.getMaxOutput()) - CableUtils.emitEnergyToNetwork(Math.min(emitter.getEnergy(), emitter.getMaxOutput()), emitter, ForgeDirection.getOrientation(emitter.facing))));
emitter.setEnergy(emitter.getEnergy() - (Math.min(emitter.getEnergy(), emitter.getMaxOutput()) - CableUtils.emitEnergyToNetwork(Math.min(emitter.getEnergy(), emitter.getMaxOutput()), emitter, emitter.getOutputtingSide())));
return;
}
else if(tileEntity instanceof IStrictEnergyAcceptor)
@ -282,13 +282,13 @@ public final class CableUtils
}
else if(tileEntity instanceof IPowerReceptor && Mekanism.hooks.BuildCraftLoaded)
{
PowerReceiver receiver = ((IPowerReceptor)tileEntity).getPowerReceiver(ForgeDirection.getOrientation(emitter.facing).getOpposite());
PowerReceiver receiver = ((IPowerReceptor)tileEntity).getPowerReceiver(emitter.getOutputtingSide().getOpposite());
if(receiver != null)
{
double electricityNeeded = Math.min(receiver.powerRequest(), receiver.getMaxEnergyStored() - receiver.getEnergyStored())*Mekanism.FROM_BC;
double transferEnergy = Math.min(emitter.getEnergy(), Math.min(electricityNeeded, emitter.getMaxOutput()));
receiver.receiveEnergy(Type.STORAGE, (float)(transferEnergy*Mekanism.TO_BC), ForgeDirection.getOrientation(emitter.facing).getOpposite());
receiver.receiveEnergy(Type.STORAGE, (float)(transferEnergy*Mekanism.TO_BC), emitter.getOutputtingSide().getOpposite());
emitter.setEnergy(emitter.getEnergy() - transferEnergy);
}
}
@ -296,7 +296,7 @@ public final class CableUtils
if(tileEntity instanceof IConductor)
{
ForgeDirection outputDirection = ForgeDirection.getOrientation(emitter.facing);
ForgeDirection outputDirection = emitter.getOutputtingSide();
float provide = emitter.getProvide(outputDirection);
if(provide > 0)

View file

@ -380,6 +380,7 @@ public final class MekanismUtils
public static boolean isActive(IBlockAccess world, int x, int y, int z)
{
TileEntity tileEntity = (TileEntity)world.getBlockTileEntity(x, y, z);
if(tileEntity != null)
{
if(tileEntity instanceof IActiveState)

View file

@ -86,8 +86,9 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
{
updateDelay--;
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}
@ -263,12 +264,13 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
{
super.handlePacketData(dataStream);
isActive = dataStream.readBoolean();
clientActive = dataStream.readBoolean();
controlType = RedstoneControl.values()[dataStream.readInt()];
if(updateDelay == 0)
if(updateDelay == 0 && clientActive != isActive)
{
updateDelay = Mekanism.UPDATE_DELAY;
isActive = clientActive;
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
}

Binary file not shown.

Before

(image error) Size: 4.2 KiB

After

(image error) Size: 5 KiB