260 lines
7.0 KiB
Java

package com.hbm.items.weapon;
import java.util.List;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import com.hbm.handler.GunConfiguration;
import com.hbm.interfaces.IHoldableWeapon;
import com.hbm.packet.GunButtonPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.render.misc.RenderScreenOverlay.Crosshair;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.client.event.MouseEvent;
public class ItemGunBase extends Item implements IHoldableWeapon {
private GunConfiguration mainConfig;
private GunConfiguration altConfig;
@SideOnly(Side.CLIENT)
public boolean m1 = false;
@SideOnly(Side.CLIENT)
public boolean m2 = false;
public ItemGunBase(GunConfiguration config) {
mainConfig = config;
}
public ItemGunBase(GunConfiguration config, GunConfiguration alt) {
mainConfig = config;
altConfig = alt;
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) {
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && entity instanceof EntityPlayer && world.isRemote) {
updateClient(stack, world, (EntityPlayer)entity, slot, isCurrentItem);
} else {
updateServer(stack, world, (EntityPlayer)entity, slot, isCurrentItem);
}
}
@SideOnly(Side.CLIENT)
private void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) {
boolean clickLeft = Mouse.isButtonDown(0);
boolean clickRight = Mouse.isButtonDown(1);
boolean left = m1;
boolean right = m2;
if(isCurrentItem) {
if(left && right) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0));
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1));
//setIsMouseDown(stack, false);
//setIsAltDown(stack, false);
m1 = false;
m2 = false;
}
/*if(!left && !right) {
if(clickLeft) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0));
//setIsMouseDown(stack, true);
m1 = true;
} else if(clickRight) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 1));
//setIsAltDown(stack, true);
m2 = true;
}
}*/
if(left && !clickLeft) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0));
//setIsMouseDown(stack, false);
m1 = false;
}
if(right && !clickRight) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1));
//setIsAltDown(stack, false);
m2 = false;
}
if(mainConfig.reloadType != 0 || (altConfig != null && altConfig.reloadType != 0)) {
if(Keyboard.isKeyDown(Keyboard.KEY_R)) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 2));
setIsReloading(stack, true);
}
}
} else {
if(left) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0));
m1 = false;
}
if(right) {
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1));
m2 = false;
}
}
}
private void updateServer(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) {
}
//tries to shoot, bullet checks are done here
private boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) {
return false;
}
//called every time the gun shoots, overridden to change bullet entity/special additions
private void fire(ItemStack stack, World world, EntityPlayer player) {
}
//called on click (server side, called by mouse packet)
public void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) {
}
//called on click release
private void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) {
}
//reload action, if existent
private void reload(ItemStack stack, World world, EntityPlayer player) {
}
//item mouseover text
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
}
/*//returns main config from itemstack
public static GunConfiguration extractConfig(ItemStack stack) {
if(stack != null && stack.getItem() instanceof ItemGunBase) {
return ((ItemGunBase)stack.getItem()).mainConfig;
}
return null;
}*/
/// if reloading routine is active ///
public static void setIsReloading(ItemStack stack, boolean b) {
writeNBT(stack, "isReloading", b ? 1 : 0);
}
public static boolean getIsReloading(ItemStack stack) {
return readNBT(stack, "isReloading") == 1;
}
/// if left mouse button is down ///
public static void setIsMouseDown(ItemStack stack, boolean b) {
writeNBT(stack, "isMouseDown", b ? 1 : 0);
}
public static boolean getIsMouseDown(ItemStack stack) {
return readNBT(stack, "isMouseDown") == 1;
}
/// if alt mouse button is down ///
public static void setIsAltDown(ItemStack stack, boolean b) {
writeNBT(stack, "isMouseDown", b ? 1 : 0);
}
public static boolean getIsAltDown(ItemStack stack) {
return readNBT(stack, "isMouseDown") == 1;
}
/// RoF cooldown ///
public static void setDelay(ItemStack stack, int i) {
writeNBT(stack, "dlay", i);
}
public static int getDelay(ItemStack stack) {
return readNBT(stack, "dlay");
}
/// R/W cycle animation timer ///
public static void setCycleAnim(ItemStack stack, int i) {
writeNBT(stack, "cycle", i);
}
public static int getCycleAnim(ItemStack stack) {
return readNBT(stack, "cycle");
}
/// R/W reload animation timer ///
public static void setReloadCycle(ItemStack stack, int i) {
writeNBT(stack, "reload", i);
}
public static int getReloadCycle(ItemStack stack) {
return readNBT(stack, "reload");
}
/// magazine capacity ///
public static void setMag(ItemStack stack, int i) {
writeNBT(stack, "magazine", i);
}
public static int getMag(ItemStack stack) {
return readNBT(stack, "magazine");
}
/// magazine type (int specified by index in bullet config list) ///
public static void setMagType(ItemStack stack, int i) {
writeNBT(stack, "magazineType", i);
}
public static int getMagType(ItemStack stack) {
return readNBT(stack, "magazineType");
}
/// NBT utility ///
private static void writeNBT(ItemStack stack, String key, int value) {
if(!stack.hasTagCompound())
stack.stackTagCompound = new NBTTagCompound();
stack.stackTagCompound.setInteger(key, value);
}
private static int readNBT(ItemStack stack, String key) {
if(!stack.hasTagCompound())
return 0;
return stack.stackTagCompound.getInteger(key);
}
@Override
public Crosshair getCrosshair() {
return Crosshair.L_CLASSIC;
}
}