Major Flamethrower work - finished networking and implemented active state management. Active sound effects work, too.

This commit is contained in:
Aidan C. Brady 2014-07-17 17:18:53 -04:00
parent c9f569fd4a
commit 2f4d545fb5
10 changed files with 131 additions and 33 deletions

View file

@ -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);
}
}

View file

@ -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)

View file

@ -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)

View file

@ -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;
}
/**

View file

@ -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;
}
}

View file

@ -39,6 +39,7 @@ public class CommonPlayerTracker
{
Mekanism.jetpackOn.remove(event.player);
Mekanism.gasmaskOn.remove(event.player);
Mekanism.flamethrowerActive.remove(event.player);
}
@SubscribeEvent

View file

@ -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<String> jetpackOn = new HashSet<String>();
public static Set<String> gasmaskOn = new HashSet<String>();
public static Set<String> flamethrowerActive = new HashSet<String>();
public static Set<Coord4D> ic2Registered = new HashSet<Coord4D>();

View file

@ -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);
}
/**

View file

@ -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()
{

View file

@ -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<FlamethrowerActiveMessage, IMessage>
{
@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();
}
}
}