diff --git a/resources/assets/resonantinduction/sound/electricshock1.ogg b/resources/assets/resonantinduction/sound/electricshock1.ogg new file mode 100644 index 00000000..d7356d4b Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock1.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock2.ogg b/resources/assets/resonantinduction/sound/electricshock2.ogg new file mode 100644 index 00000000..84ff1999 Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock2.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock3.ogg b/resources/assets/resonantinduction/sound/electricshock3.ogg new file mode 100644 index 00000000..83b527b5 Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock3.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock4.ogg b/resources/assets/resonantinduction/sound/electricshock4.ogg new file mode 100644 index 00000000..06393882 Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock4.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock5.ogg b/resources/assets/resonantinduction/sound/electricshock5.ogg new file mode 100644 index 00000000..5b16eb5f Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock5.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock6.ogg b/resources/assets/resonantinduction/sound/electricshock6.ogg new file mode 100644 index 00000000..5784b116 Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock6.ogg differ diff --git a/resources/assets/resonantinduction/sound/electricshock7.ogg b/resources/assets/resonantinduction/sound/electricshock7.ogg new file mode 100644 index 00000000..6a1868ea Binary files /dev/null and b/resources/assets/resonantinduction/sound/electricshock7.ogg differ diff --git a/src/resonantinduction/ClientProxy.java b/src/resonantinduction/ClientProxy.java index 285d40b5..f4a2779f 100644 --- a/src/resonantinduction/ClientProxy.java +++ b/src/resonantinduction/ClientProxy.java @@ -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()); } diff --git a/src/resonantinduction/PacketHandler.java b/src/resonantinduction/PacketHandler.java index b87c6cbd..3b022b19 100644 --- a/src/resonantinduction/PacketHandler.java +++ b/src/resonantinduction/PacketHandler.java @@ -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); diff --git a/src/resonantinduction/SoundHandler.java b/src/resonantinduction/SoundHandler.java new file mode 100644 index 00000000..adf3408d --- /dev/null +++ b/src/resonantinduction/SoundHandler.java @@ -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"); + } +} diff --git a/src/resonantinduction/fx/FXElectricBolt.java b/src/resonantinduction/fx/FXElectricBolt.java index b88a5a6c..2aa688c9 100644 --- a/src/resonantinduction/fx/FXElectricBolt.java +++ b/src/resonantinduction/fx/FXElectricBolt.java @@ -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; } diff --git a/src/resonantinduction/tesla/TileEntityTesla.java b/src/resonantinduction/tesla/TileEntityTesla.java index 5944fee6..fbc1e5cb 100644 --- a/src/resonantinduction/tesla/TileEntityTesla.java +++ b/src/resonantinduction/tesla/TileEntityTesla.java @@ -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 transferTeslaCoils = new HashSet(); @@ -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); } /**