- 279
- 0
И снова здравствуйте. Посидев и подумав, я так и не смог нормально сообразить проверки на перезарядку, пустой магазин и т.д., что бы сделать нормальную отдачу. Нынешний код:
Буду благодарен вам, если досообразите за меня немного, уже кипит голова от этого.
Код:
public class ItemWeapon extends ItemDayZ {
private static boolean mouseHeld = false;
private static boolean lastMouseHeld;
public Item Magi;
public int ReloadTimei;
public int FireRatei;
public int Damagei;
public int Rangei;
public boolean Autoi = false;
private boolean Primary = false;
public int cooldi = 0;
public boolean canShooti = true;
public boolean WantShooti = false;
public int reloading = 0;
float отдача;
int урон;
public ItemWeapon(String texture, Item Mag, int reloadTime, int firerate, int maxDmg, int maxRange, float f1) {
super(texture);
this.Magi = Mag;
this.ReloadTimei = reloadTime;
this.FireRatei = firerate;
this.Damagei = maxDmg;
this.Rangei = maxRange;
this.setMaxDamage(Mag.getMaxDamage());
this.setMaxStackSize(1);
this.setCreativeTab(DayZMod.tabGuns);
отдача = f1;
}
public ItemWeapon setAutomatic() {
this.Autoi = true;
return this;
}
public ItemWeapon setPrimary() {
this.Primary = true;
return this;
}
public boolean isPrimary() {
return this.Primary;
}
public void wantShoot(boolean par1) {
this.WantShooti = par1;
}
public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
if(entity instanceof EntityPlayer && ((EntityPlayer)entity).getHeldItem() == itemstack) {
if(world.isRemote) {
this.UpdateClient(itemstack, world, entity, i, flag);
} else {
this.UpdateServer(itemstack, world, entity, i, flag);
}
}
}
@SideOnly(Side.CLIENT)
public void UpdateClient(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
if(entity instanceof EntityPlayer && ((EntityPlayer)entity).inventory.getCurrentItem() == itemstack) {
Minecraft mc = Minecraft.getMinecraft();
if(GameSettings.isKeyDown(mc.gameSettings.keyBindAttack)){
Random rand = new Random();
boolean rlотдача = rand.nextBoolean();
int отд = rand.nextInt(1);
if(entity.isSneaking())
{
((EntityPlayer)entity).cameraPitch -= отдача+1F;
((EntityPlayer)entity).cameraPitch -= отдача+2;
if(rlотдача)
{
entity.rotationYaw -= отдача+отд;
}
else
{
entity.rotationYaw -= -отдача-отд;
}
}
else
{
((EntityPlayer)entity).cameraPitch -= отдача+0.5F;
entity.rotationPitch -= отдача+1F;
if(rlотдача)
{
((EntityPlayer)entity).cameraPitch -= отдача-0.3F;
entity.rotationYaw -= отдача+отд;
}
else
{
entity.rotationYaw -= -отдача-отд;
}
}
}
lastMouseHeld = mouseHeld;
mouseHeld = false;
GameSettings var10000 = mc.gameSettings;
if(GameSettings.isKeyDown(mc.gameSettings.keyBindAttack) && mc.currentScreen == null) {
mouseHeld = true;
}
if(mouseHeld && !lastMouseHeld) {
DayZMod.DISPATCHER.sendToServer(PacketShoot.send(true));
}
if(!mouseHeld && lastMouseHeld) {
DayZMod.DISPATCHER.sendToServer(PacketShoot.send(false));
}
var10000 = mc.gameSettings;
if(GameSettings.isKeyDown(ClientProxy.Reload) && mc.currentScreen == null && itemstack.getItemDamage() == itemstack.getMaxDamage() && (((EntityPlayer)entity).capabilities.isCreativeMode || ((EntityPlayer)entity).inventory.hasItem(this.Magi)) && !((EntityPlayer)entity).isInWater() && !((EntityPlayer)entity).isSprinting()) {
if(this.reloading == this.ReloadTimei) {
DayZMod.DISPATCHER.sendToServer(PacketReload.send(this.reloading));
++this.reloading;
} else {
++this.reloading;
}
} else {
this.reloading = 0;
}
}
}
public void UpdateServer(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
if(entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer)entity;
if(player.getHeldItem() == itemstack) {
if(!this.WantShooti) {
this.canShooti = true;
} else {
this.Shoot(world, player, itemstack);
}
if(this.cooldi > 0) {
--this.cooldi;
}
}
}
}
public void Shoot(World world, EntityPlayer entity, ItemStack itemstack) {
if(!world.isRemote && this.cooldi <= 0 && this.canShooti && this.WantShooti && itemstack.getItemDamage() != this.getMaxDamage()) {
world.spawnEntityInWorld(new EntityBullet(world, entity, this.Damagei, this.Rangei));
entity.worldObj.playSoundAtEntity(entity, "DayZMod:gunshoot2", 1.0F, 0.0F);
itemstack.damageItem(1, entity);
this.cooldi = this.FireRatei;
if(!this.Autoi) {
this.canShooti = false;
}
} else if(!world.isRemote && this.cooldi <= 0 && this.canShooti && this.WantShooti && itemstack.getItemDamage() == this.getMaxDamage()) {
entity.worldObj.playSoundAtEntity(entity, "DayZMod:empty", 1.0F, 0.0F);
this.cooldi = this.FireRatei;
if(!this.Autoi) {
this.canShooti = false;
}
}
System.out.println("SHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
}
public void Reload(ItemStack current, EntityPlayer entity) {
if(entity.inventory.hasItem(this.Magi) || entity.capabilities.isCreativeMode) {
entity.worldObj.playSoundAtEntity(entity, "DayZMod:reload", 1.0F, 0.0F);
current.setItemDamage(0);
if(!entity.capabilities.isCreativeMode) {
entity.inventory.consumeInventoryItem(this.Magi);
}
}
if(entity.worldObj != null) {
;
}
}
public void onPlayerStoppedUsing(ItemStack itemstack, World world, EntityPlayer entityplayer, int i)
{
Random rand = new Random();
boolean rlотдача = rand.nextBoolean();
int отд = rand.nextInt(1);
if(entityplayer.isSneaking())
{
entityplayer.cameraPitch -= отдача+1F;
entityplayer.rotationPitch -= отдача+2;
if(rlотдача)
{
entityplayer.rotationYaw -= отдача+отд;
}
else
{
entityplayer.rotationYaw -= -отдача-отд;
}
}
else
{
entityplayer.cameraPitch -= отдача+0.5F;
entityplayer.rotationPitch -= отдача+1F;
if(rlотдача)
{
entityplayer.rotationYaw -= отдача+отд;
}
else
{
entityplayer.rotationYaw -= -отдача-отд;
}
}
}
public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
return true;
}
}