/**
* Copyright (c) Lambda Innovation, 2013-2015
* 本作品版权由Lambda Innovation所有。
* http://www.li-dev.cn/
*
* This project is open-source, and it is distributed under
* the terms of GNU General Public License. You can modify
* and distribute freely as long as you follow the license.
* 本项目是一个开源项目,且遵循GNU通用公共授权协议。
* 在遵照该协议的情况下,您可以自由传播和修改。
* http://www.gnu.org/licenses/gpl.html
*/
package cn.dawn47.weapon;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.Vec3;
import cn.dawn47.Dawn47;
import cn.liutils.util.generic.VecUtils;
import cn.liutils.util.mc.EntitySelectors;
import cn.liutils.util.raytrace.Raytrace;
import cn.weaponry.api.ctrl.KeyEventType;
import cn.weaponry.api.state.WeaponState;
import cn.weaponry.api.state.WeaponStateMachine;
import cn.weaponry.impl.classic.WeaponClassic;
import cn.weaponry.impl.generic.action.SwingSilencer;
/**
* @author WeAthFolD
*
*/
public class DawnWeapon extends WeaponClassic {
public float stockDamage = 3.0f;
public DawnWeapon() {
super();
//setCreativeTab(Dawn47.cct);
}
@Override
public void initStates(WeaponStateMachine machine) {
super.initStates(machine);
machine.addState("action", new StateStockAttack());
}
public class StateStockAttack extends WeaponState {
public void enterState() {
SwingSilencer silencer = getItem().getAction("SwingSilencer");
if(silencer != null) {
silencer.active = false;
}
EntityPlayer player = getPlayer();
player.swingItem();
if(!isRemote()) {
Vec3 vec1 = Vec3.createVectorHelper(player.posX, player.posY + player.eyeHeight, player.posZ);
Vec3 vec2 = VecUtils.add(vec1, VecUtils.multiply(player.getLookVec(), 1.5));
MovingObjectPosition ret = Raytrace.perform(player.worldObj, vec1, vec2, EntitySelectors.excludeOf(player));
if(ret != null && ret.typeOfHit == MovingObjectType.ENTITY) {
ret.entityHit.attackEntityFrom(DamageSource.causePlayerDamage(player), stockDamage);
player.worldObj.playSoundAtEntity(player, "dawn47:weapons.stock_attack", 0.5f, 1.0f);
} else
player.worldObj.playSoundAtEntity(player, "dawn47:weapons.stock_swing", 0.5f, 1.0f);
}
}
@Override
public void onCtrl(int key, KeyEventType type) {
//transitState("idle");
}
@Override
public void tickState(int ticks) {
if(ticks == 15) {
transitState("idle");
}
}
public void leaveState() {
SwingSilencer silencer = getItem().getAction("SwingSilencer");
if(silencer != null) {
silencer.active = true;
}
}
}
}