This commit is contained in:
Aidan Brady 2013-08-03 00:53:55 -04:00
commit 51e2bef632
12 changed files with 82 additions and 22 deletions

View file

@ -5,6 +5,7 @@ package resonantinduction;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import resonantinduction.base.Vector3;
import resonantinduction.contractor.TileEntityEMContractor;
import resonantinduction.fx.FXElectricBolt;
@ -28,8 +29,10 @@ public class ClientProxy extends CommonProxy
@Override
public void registerRenderers()
{
MinecraftForge.EVENT_BUS.register(SoundHandler.INSTANCE);
RenderingRegistry.registerBlockHandler(BlockRenderingHandler.INSTANCE);
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTesla.class, new RenderTesla());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEMContractor.class, new RenderEMContractor());
}

View file

@ -55,6 +55,7 @@ public class PacketHandler implements IPacketHandler
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
@ -113,6 +114,7 @@ public class PacketHandler implements IPacketHandler
try
{
data.writeInt(PacketType.TILE.ordinal());
data.writeInt(tileEntity.xCoord);
data.writeInt(tileEntity.yCoord);
data.writeInt(tileEntity.zCoord);

View file

@ -0,0 +1,32 @@
/**
*
*/
package resonantinduction;
import net.minecraftforge.client.event.sound.SoundLoadEvent;
import net.minecraftforge.event.ForgeSubscribe;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* @author Calclavia
*
*/
@SideOnly(Side.CLIENT)
public class SoundHandler
{
public static final SoundHandler INSTANCE = new SoundHandler();
public static final String[] SOUND_FILES = { "electricshock1.ogg", "electricshock2.ogg", "electricshock3.ogg", "electricshock4.ogg", "electricshock5.ogg", "electricshock6.ogg", "electricshock7.ogg" };
@ForgeSubscribe
public void loadSoundEvents(SoundLoadEvent event)
{
for (int i = 0; i < SOUND_FILES.length; i++)
{
event.manager.soundPoolSounds.addSound(ResonantInduction.PREFIX + SOUND_FILES[i]);
}
ResonantInduction.LOGGER.fine("Loaded sound fxs");
}
}

View file

@ -61,7 +61,6 @@ public class FXElectricBolt extends EntityFX
this.end = new BoltPoint(targetVec);
/** By default, we do an electrical color */
this.setColor(0.5f + (this.rand.nextFloat() * 0.1f), 0.6f + (this.rand.nextFloat() * 0.1f), 1);
this.segmentCount = 1;
this.particleAge = (3 + this.rand.nextInt(3) - 1);
this.particleMaxAge = (3 + this.rand.nextInt(3) - 1);
@ -105,9 +104,9 @@ public class FXElectricBolt extends EntityFX
public FXElectricBolt setColor(float r, float g, float b)
{
this.particleRed = r;
this.particleGreen = g;
this.particleBlue = b;
this.particleRed = r + (this.rand.nextFloat() * 0.1f) - 0.1f;
this.particleGreen = g + (this.rand.nextFloat() * 0.1f) - 0.1f;
this.particleBlue = b + (this.rand.nextFloat() * 0.1f) - 0.1f;
return this;
}

View file

@ -13,19 +13,24 @@ import net.minecraft.network.packet.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import resonantinduction.ITesla;
import resonantinduction.PacketHandler;
import resonantinduction.ResonantInduction;
import resonantinduction.base.IPacketReceiver;
import resonantinduction.base.TileEntityBase;
import resonantinduction.base.Vector3;
import com.google.common.io.ByteArrayDataInput;
/**
* @author Calclavia
*
*/
public class TileEntityTesla extends TileEntityBase implements ITesla
public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketReceiver
{
public static final Vector3[] dyeColors = new Vector3[] { new Vector3(), new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0.5, 0.5, 0), new Vector3(0, 0, 1), new Vector3(0.5, 0, 05), new Vector3(0, 0.3, 1), new Vector3(0.8, 0.8, 0.8), new Vector3(0.3, 0.3, 0.3), new Vector3(0.8, 0.1, 0.2), new Vector3(0.1, 0.8, 0.2), new Vector3(0, 0.8, 0.8), new Vector3(0.1, 0.1, 1), new Vector3(0.5, 0.2, 0.5), new Vector3(0.7, 0.5, 0.1), new Vector3(1, 1, 1) };
private int dyeID = -1;
public static final Vector3[] dyeColors = new Vector3[] { new Vector3(), new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0.5, 0.5, 0), new Vector3(0, 0, 1), new Vector3(0.5, 0, 05), new Vector3(0, 0.3, 1), new Vector3(0.8, 0.8, 0.8), new Vector3(0.3, 0.3, 0.3), new Vector3(0.7, 0.2, 0.2), new Vector3(0.1, 0.872, 0.884), new Vector3(0, 0.8, 0.8), new Vector3(0.46f, 0.932, 1), new Vector3(0.5, 0.2, 0.5), new Vector3(0.7, 0.5, 0.1), new Vector3(1, 1, 1) };
private int dyeID = 12;
private float energy = 0;
private boolean doTransfer = false;
@ -42,10 +47,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
{
super.updateEntity();
boolean doPacketUpdate = this.getEnergyStored() > 0;
/**
* Only transfer if it is the bottom controlling Tesla tower.
*/
if (this.ticks % 2 == 0 && this.isController() && this.getEnergyStored() > 0 && this.doTransfer && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord))
if (this.ticks % 2 == 0 && this.isController() && this.getEnergyStored() > 0 && (this.doTransfer || this.worldObj.isRemote) && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord))
{
Set<ITesla> transferTeslaCoils = new HashSet<ITesla>();
@ -71,8 +78,10 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
for (ITesla tesla : transferTeslaCoils)
{
tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f)));
this.transfer(-transferEnergy);
if (this.ticks % 20 == 0)
{
this.worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, ResonantInduction.PREFIX + "electricshock", this.getEnergyStored() / 10, (float) (1 - 0.2 * (this.dyeID / 16)));
}
Vector3 teslaVector = new Vector3((TileEntity) tesla);
@ -81,15 +90,10 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
teslaVector = new Vector3(((TileEntityTesla) tesla).getControllingTelsa());
}
if (this.dyeID != -1)
{
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this.getTopTelsa()).translate(new Vector3(0.5)), teslaVector.translate(new Vector3(0.5)), (float) dyeColors[this.dyeID].x, (float) dyeColors[this.dyeID].y, (float) dyeColors[this.dyeID].z);
}
else
{
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this.getTopTelsa()).translate(new Vector3(0.5)), teslaVector.translate(new Vector3(0.5)));
}
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this.getTopTelsa()).translate(new Vector3(0.5)), teslaVector.translate(new Vector3(0.5)), (float) dyeColors[this.dyeID].x, (float) dyeColors[this.dyeID].y, (float) dyeColors[this.dyeID].z);
tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f)));
this.transfer(-transferEnergy);
}
}
}
@ -150,8 +154,8 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
*/
boolean doBlockStateUpdate = furnaceTile.furnaceBurnTime > 0;
furnaceTile.furnaceBurnTime++;
this.transfer(-ResonantInduction.POWER_PER_COAL / 22);
furnaceTile.furnaceBurnTime += 2;
this.transfer(-ResonantInduction.POWER_PER_COAL / 20);
if (doBlockStateUpdate != furnaceTile.furnaceBurnTime > 0)
{
@ -159,12 +163,31 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
}
}
}
if (this.getEnergyStored() > 0 != doPacketUpdate)
{
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
}
@Override
public Packet getDescriptionPacket()
{
return null;
return PacketHandler.getTileEntityPacket(this, this.getEnergyStored(), this.dyeID);
}
@Override
public void handle(ByteArrayDataInput input)
{
try
{
this.energy = input.readFloat();
this.dyeID = input.readInt();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private boolean isController()
@ -314,6 +337,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla
public void setDye(int id)
{
this.dyeID = id;
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
/**