From 2f4d545fb57641b3cebc5264e47a59089f10b8ee Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Thu, 17 Jul 2014 17:18:53 -0400 Subject: [PATCH] Major Flamethrower work - finished networking and implemented active state management. Active sound effects work, too. --- .../mekanism/client/ClientPlayerTracker.java | 2 + .../mekanism/client/ClientTickHandler.java | 29 ++++++++++ .../client/sound/FlamethrowerSound.java | 20 ++++--- .../java/mekanism/client/sound/Sound.java | 7 ++- .../common/CommonPlayerTickHandler.java | 19 +++++++ .../mekanism/common/CommonPlayerTracker.java | 1 + src/main/java/mekanism/common/Mekanism.java | 2 +- .../java/mekanism/common/PacketHandler.java | 3 + .../common/item/ItemFlamethrower.java | 25 +-------- .../network/PacketFlamethrowerActive.java | 56 +++++++++++++++++++ 10 files changed, 131 insertions(+), 33 deletions(-) create mode 100644 src/main/java/mekanism/common/network/PacketFlamethrowerActive.java diff --git a/src/main/java/mekanism/client/ClientPlayerTracker.java b/src/main/java/mekanism/client/ClientPlayerTracker.java index 45ccc2e3c..67e36a2e4 100644 --- a/src/main/java/mekanism/client/ClientPlayerTracker.java +++ b/src/main/java/mekanism/client/ClientPlayerTracker.java @@ -13,5 +13,7 @@ public class ClientPlayerTracker public void onPlayerChangedDimension(PlayerChangedDimensionEvent event) { Mekanism.jetpackOn.remove(event.player); + Mekanism.gasmaskOn.remove(event.player); + Mekanism.flamethrowerActive.remove(event.player); } } diff --git a/src/main/java/mekanism/client/ClientTickHandler.java b/src/main/java/mekanism/client/ClientTickHandler.java index 7fec096d6..77e2a2490 100644 --- a/src/main/java/mekanism/client/ClientTickHandler.java +++ b/src/main/java/mekanism/client/ClientTickHandler.java @@ -30,6 +30,7 @@ import mekanism.common.item.ItemScubaTank; import mekanism.common.item.ItemWalkieTalkie; import mekanism.common.network.PacketConfiguratorState.ConfiguratorStateMessage; import mekanism.common.network.PacketElectricBowState.ElectricBowStateMessage; +import mekanism.common.network.PacketFlamethrowerActive.FlamethrowerActiveMessage; import mekanism.common.network.PacketJetpackData.JetpackDataMessage; import mekanism.common.network.PacketJetpackData.JetpackPacket; import mekanism.common.network.PacketPortableTankState.PortableTankStateMessage; @@ -357,6 +358,21 @@ public class ClientTickHandler mc.thePlayer.stepHeight = 0.5F; } } + + if(isFlamethrowerOn(mc.thePlayer) != Mekanism.flamethrowerActive.contains(mc.thePlayer.getCommandSenderName())) + { + ItemFlamethrower flamethrower = (ItemFlamethrower)mc.thePlayer.getCurrentEquippedItem().getItem(); + + if(isFlamethrowerOn(mc.thePlayer)) + { + Mekanism.flamethrowerActive.add(mc.thePlayer.getCommandSenderName()); + } + else { + Mekanism.flamethrowerActive.remove(mc.thePlayer); + } + + Mekanism.packetHandler.sendToServer(new FlamethrowerActiveMessage(isFlamethrowerOn(mc.thePlayer))); + } if(Mekanism.jetpackOn.contains(mc.thePlayer.getCommandSenderName()) != isJetpackOn(mc.thePlayer)) { @@ -563,6 +579,19 @@ public class ClientTickHandler return false; } + public static boolean isFlamethrowerOn(EntityPlayer player) + { + if(hasFlamethrower(player)) + { + if(mc.gameSettings.keyBindUseItem.getIsKeyPressed()) + { + return true; + } + } + + return false; + } + public static boolean hasFlamethrower(EntityPlayer player) { if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemFlamethrower) diff --git a/src/main/java/mekanism/client/sound/FlamethrowerSound.java b/src/main/java/mekanism/client/sound/FlamethrowerSound.java index 1f3b9464e..927561159 100644 --- a/src/main/java/mekanism/client/sound/FlamethrowerSound.java +++ b/src/main/java/mekanism/client/sound/FlamethrowerSound.java @@ -1,7 +1,6 @@ package mekanism.client.sound; import mekanism.client.ClientTickHandler; -import mekanism.common.item.ItemFlamethrower; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -11,9 +10,9 @@ public class FlamethrowerSound extends PlayerSound public FlamethrowerSound(String id, EntityPlayer entity) { - super(id, getSound(getInUse(entity)), SoundHandler.CHANNEL_FLAMETHROWER, entity); + super(id, getSound(ClientTickHandler.isFlamethrowerOn(entity)), SoundHandler.CHANNEL_FLAMETHROWER, entity); - inUse = getInUse(entity); + inUse = ClientTickHandler.isFlamethrowerOn(entity); } @Override @@ -27,7 +26,7 @@ public class FlamethrowerSound extends PlayerSound { return false; } - else if(inUse != getInUse(player)) + else if(inUse != ClientTickHandler.isFlamethrowerOn(player)) { return false; } @@ -42,11 +41,16 @@ public class FlamethrowerSound extends PlayerSound return true; } - private static boolean getInUse(EntityPlayer player) + @Override + public float getMultiplier() { - ItemFlamethrower flamethrower = (ItemFlamethrower)player.getCurrentEquippedItem().getItem(); - - return flamethrower.getInUse(player.getCurrentEquippedItem()); + return super.getMultiplier() * (inUse ? 2 : 1); + } + + @Override + public boolean doGradualEffect() + { + return false; } private static String getSound(boolean inUse) diff --git a/src/main/java/mekanism/client/sound/Sound.java b/src/main/java/mekanism/client/sound/Sound.java index fe9ea9085..175433d9d 100644 --- a/src/main/java/mekanism/client/sound/Sound.java +++ b/src/main/java/mekanism/client/sound/Sound.java @@ -152,7 +152,12 @@ public abstract class Sound public float getMultiplier() { - return Math.min(1, ((float)ticksSincePlay/30F)); + return doGradualEffect() ? Math.min(1, ((float)ticksSincePlay/30F)) : 1; + } + + public boolean doGradualEffect() + { + return true; } /** diff --git a/src/main/java/mekanism/common/CommonPlayerTickHandler.java b/src/main/java/mekanism/common/CommonPlayerTickHandler.java index bdb51c4f4..086021c84 100644 --- a/src/main/java/mekanism/common/CommonPlayerTickHandler.java +++ b/src/main/java/mekanism/common/CommonPlayerTickHandler.java @@ -1,6 +1,7 @@ package mekanism.common; import mekanism.api.gas.GasStack; +import mekanism.common.item.ItemFlamethrower; import mekanism.common.item.ItemFreeRunners; import mekanism.common.item.ItemGasMask; import mekanism.common.item.ItemJetpack; @@ -95,6 +96,11 @@ public class CommonPlayerTickHandler player.stepHeight = 0.5F; } } + + if(isFlamethrowerOn(player)) + { + //TODO spawn flame entities + } if(isJetpackOn(player)) { @@ -210,4 +216,17 @@ public class CommonPlayerTickHandler return false; } + + public static boolean isFlamethrowerOn(EntityPlayer player) + { + if(Mekanism.flamethrowerActive.contains(player.getCommandSenderName())) + { + if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemFlamethrower) + { + return true; + } + } + + return false; + } } diff --git a/src/main/java/mekanism/common/CommonPlayerTracker.java b/src/main/java/mekanism/common/CommonPlayerTracker.java index 42054c155..cbe9e93a8 100644 --- a/src/main/java/mekanism/common/CommonPlayerTracker.java +++ b/src/main/java/mekanism/common/CommonPlayerTracker.java @@ -39,6 +39,7 @@ public class CommonPlayerTracker { Mekanism.jetpackOn.remove(event.player); Mekanism.gasmaskOn.remove(event.player); + Mekanism.flamethrowerActive.remove(event.player); } @SubscribeEvent diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index 21124121e..c9355a412 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -105,7 +105,6 @@ import mekanism.common.tile.TileEntityBoundingBlock; import mekanism.common.tile.TileEntityCardboardBox; import mekanism.common.tile.TileEntityElectricBlock; import mekanism.common.tile.TileEntityEnergizedSmelter; -import mekanism.common.tile.TileEntityLaser; import mekanism.common.tile.TileEntitySalinationTank; import mekanism.common.tile.TileEntitySalinationValve; import mekanism.common.transporter.TransporterManager; @@ -233,6 +232,7 @@ public class Mekanism public static Set jetpackOn = new HashSet(); public static Set gasmaskOn = new HashSet(); + public static Set flamethrowerActive = new HashSet(); public static Set ic2Registered = new HashSet(); diff --git a/src/main/java/mekanism/common/PacketHandler.java b/src/main/java/mekanism/common/PacketHandler.java index 6db11b87f..b24281cff 100644 --- a/src/main/java/mekanism/common/PacketHandler.java +++ b/src/main/java/mekanism/common/PacketHandler.java @@ -27,6 +27,8 @@ import mekanism.common.network.PacketElectricBowState; import mekanism.common.network.PacketElectricBowState.ElectricBowStateMessage; import mekanism.common.network.PacketElectricChest; import mekanism.common.network.PacketElectricChest.ElectricChestMessage; +import mekanism.common.network.PacketFlamethrowerActive; +import mekanism.common.network.PacketFlamethrowerActive.FlamethrowerActiveMessage; import mekanism.common.network.PacketJetpackData; import mekanism.common.network.PacketJetpackData.JetpackDataMessage; import mekanism.common.network.PacketKey; @@ -115,6 +117,7 @@ public class PacketHandler netHandler.registerMessage(PacketBoxBlacklist.class, BoxBlacklistMessage.class, 24, Side.CLIENT); netHandler.registerMessage(PacketPortableTankState.class, PortableTankStateMessage.class, 25, Side.SERVER); netHandler.registerMessage(PacketContainerEditMode.class, ContainerEditModeMessage.class, 26, Side.SERVER); + netHandler.registerMessage(PacketFlamethrowerActive.class, FlamethrowerActiveMessage.class, 27, Side.SERVER); } /** diff --git a/src/main/java/mekanism/common/item/ItemFlamethrower.java b/src/main/java/mekanism/common/item/ItemFlamethrower.java index de72e6635..add6964f6 100644 --- a/src/main/java/mekanism/common/item/ItemFlamethrower.java +++ b/src/main/java/mekanism/common/item/ItemFlamethrower.java @@ -2,18 +2,17 @@ package mekanism.common.item; import java.util.List; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.GasStack; import mekanism.api.gas.IGasItem; -import mekanism.common.item.ItemJetpack.JetpackMode; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class ItemFlamethrower extends ItemMekanism implements IGasItem { @@ -148,26 +147,6 @@ public class ItemFlamethrower extends ItemMekanism implements IGasItem itemstack.stackTagCompound.setTag("stored", gasStack.write(new NBTTagCompound())); } } - - public boolean getInUse(ItemStack itemstack) - { - if(itemstack.stackTagCompound == null) - { - return false; - } - - return itemstack.stackTagCompound.getBoolean("inUse"); - } - - public void setInUse(ItemStack itemstack, boolean state) - { - if(itemstack.stackTagCompound == null) - { - itemstack.setTagCompound(new NBTTagCompound()); - } - - itemstack.stackTagCompound.setBoolean("inUse", state); - } public ItemStack getEmptyItem() { diff --git a/src/main/java/mekanism/common/network/PacketFlamethrowerActive.java b/src/main/java/mekanism/common/network/PacketFlamethrowerActive.java new file mode 100644 index 000000000..79847b5d6 --- /dev/null +++ b/src/main/java/mekanism/common/network/PacketFlamethrowerActive.java @@ -0,0 +1,56 @@ +package mekanism.common.network; + +import io.netty.buffer.ByteBuf; +import mekanism.common.Mekanism; +import mekanism.common.PacketHandler; +import mekanism.common.item.ItemJetpack; +import mekanism.common.network.PacketFlamethrowerActive.FlamethrowerActiveMessage; +import mekanism.common.network.PacketJetpackData.JetpackPacket; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; + +public class PacketFlamethrowerActive implements IMessageHandler +{ + @Override + public IMessage onMessage(FlamethrowerActiveMessage message, MessageContext context) + { + EntityPlayer player = PacketHandler.getPlayer(context); + + if(message.value) + { + Mekanism.flamethrowerActive.add(player.getCommandSenderName()); + } + else { + Mekanism.flamethrowerActive.remove(player.getCommandSenderName()); + } + + return null; + } + + public static class FlamethrowerActiveMessage implements IMessage + { + public boolean value; + + public FlamethrowerActiveMessage() {} + + public FlamethrowerActiveMessage(boolean state) + { + value = state; + } + + @Override + public void toBytes(ByteBuf dataStream) + { + dataStream.writeBoolean(value); + } + + @Override + public void fromBytes(ByteBuf dataStream) + { + value = dataStream.readBoolean(); + } + } +}