130 lines
2.8 KiB
Java
130 lines
2.8 KiB
Java
/**
|
|
* Copyright (c) 2011-2017, SpaceToad and the BuildCraft Team
|
|
* http://www.mod-buildcraft.com
|
|
* <p/>
|
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
|
*/
|
|
package buildcraft.core;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
import buildcraft.api.power.IRedstoneEngine;
|
|
import buildcraft.api.power.IRedstoneEngineReceiver;
|
|
import buildcraft.api.transport.IPipeTile;
|
|
import buildcraft.core.lib.engines.TileEngineBase;
|
|
|
|
public class TileEngineWood extends TileEngineBase implements IRedstoneEngine {
|
|
|
|
private boolean hasSent = false;
|
|
|
|
@Override
|
|
public ResourceLocation getTrunkTexture(EnergyStage stage) {
|
|
return super.getTrunkTexture(stage == EnergyStage.RED && progress < 0.5 ? EnergyStage.YELLOW : stage);
|
|
}
|
|
|
|
@Override
|
|
protected EnergyStage computeEnergyStage() {
|
|
double energyLevel = getEnergyLevel();
|
|
if (energyLevel < 0.33f) {
|
|
return EnergyStage.BLUE;
|
|
} else if (energyLevel < 0.66f) {
|
|
return EnergyStage.GREEN;
|
|
} else if (energyLevel < 0.75f) {
|
|
return EnergyStage.YELLOW;
|
|
} else {
|
|
return EnergyStage.RED;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getCurrentOutputLimit() {
|
|
return 10;
|
|
}
|
|
|
|
@Override
|
|
public float getPistonSpeed() {
|
|
if (!worldObj.isRemote) {
|
|
return Math.max(0.08f * getHeatLevel(), 0.01f);
|
|
}
|
|
|
|
switch (getEnergyStage()) {
|
|
case GREEN:
|
|
return 0.02F;
|
|
case YELLOW:
|
|
return 0.04F;
|
|
case RED:
|
|
return 0.08F;
|
|
default:
|
|
return 0.01F;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void engineUpdate() {
|
|
super.engineUpdate();
|
|
|
|
if (isRedstonePowered) {
|
|
if (worldObj.getTotalWorldTime() % 16 == 0) {
|
|
addEnergy(10);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ConnectOverride overridePipeConnection(IPipeTile.PipeType type, ForgeDirection with) {
|
|
return ConnectOverride.DISCONNECT;
|
|
}
|
|
|
|
@Override
|
|
public boolean isBurning() {
|
|
return isRedstonePowered;
|
|
}
|
|
|
|
@Override
|
|
public int getMaxEnergy() {
|
|
return 1000;
|
|
}
|
|
|
|
@Override
|
|
public int getIdealOutput() {
|
|
return 10;
|
|
}
|
|
|
|
@Override
|
|
public boolean canConnectEnergy(ForgeDirection from) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getEnergyStored(ForgeDirection side) {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public int getMaxEnergyStored(ForgeDirection side) {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
protected void sendPower() {
|
|
if (progressPart == 2 && !hasSent) {
|
|
hasSent = true;
|
|
|
|
TileEntity tile = getTile(orientation);
|
|
|
|
if (tile instanceof IRedstoneEngineReceiver && ((IRedstoneEngineReceiver) tile).canConnectRedstoneEngine(orientation.getOpposite())) {
|
|
super.sendPower();
|
|
} else {
|
|
this.energy = 0;
|
|
}
|
|
} else if (progressPart != 2) {
|
|
hasSent = false;
|
|
}
|
|
}
|
|
}
|