- 1,185
- 3
Мне подсказали, что на сервере это не будет работать, и вообще я не понимаю что означает if(!world.isRemote) и if(world.isRemote). Я думал что это обновление от сервера и клиента, но говорят что нет.
И что такое @SideOnly(Side.CLIENT). Если вызвать это от сервера, выполнит весь метод на клиенте или как? Если нет, зачем тогда вообще такая штуковина?
И ещё - реализовал скорострельность, но она не такая гладкая, рывками иногда, я так и не понял, из-за лагов это или нет : )
И что такое @SideOnly(Side.CLIENT). Если вызвать это от сервера, выполнит весь метод на клиенте или как? Если нет, зачем тогда вообще такая штуковина?
И ещё - реализовал скорострельность, но она не такая гладкая, рывками иногда, я так и не понял, из-за лагов это или нет : )
Код:
package com.svk.industrialGuns.guns;
import java.util.List;
import java.util.Random;
import org.lwjgl.input.Mouse;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import com.svk.industrialGuns.entity.EntityBullet;
public class Firearm extends Item
{
public double scatter = 0;
private float bulletSpeed = 0;
private int bulletDemage = 0;
private int angels = 0;
String name = null;
private boolean fire = false;
private int rate = 0;
public Firearm(double scatter, String name, int bulletDemage, float bulletSpeed, int angels, int rate)
{
super();
this.scatter = scatter;
this.name = name;
this.bulletSpeed = bulletSpeed;
this.bulletDemage = bulletDemage;
this.angels = angels;
this.rate = 20/rate;
}
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister ir)
{
super.itemIcon = ir.registerIcon("industrialGuns:" + name);
}
public void onUpdate(ItemStack item, World world, Entity player, int par4, boolean par5)
{
if(!world.isRemote)
{
fire = Mouse.isButtonDown(0);
}
if(item.getTagCompound() == null)
{
item.stackTagCompound = new NBTTagCompound();
}
if(((EntityPlayer)player).inventory.getCurrentItem() == item)
{
item.getTagCompound().setBoolean("Fire", fire);
}
else
{
item.getTagCompound().setBoolean("Fire", false);
}
if(item.getTagCompound().getInteger("ReloadFire") != 0)
{
item.getTagCompound().setInteger("ReloadFire", item.getTagCompound().getInteger("ReloadFire") - 1);
}
if(item.getTagCompound().getBoolean("Fire"))
{
if(item.getTagCompound().getInteger("ReloadFire") == 0)
{
Vec3 movingobjectposition = player.getLookVec();
EntityBullet entity = new EntityBullet(world, (EntityLivingBase) player, 1.0D, 1.0D, 1.0D);
entity.isInRangeToRenderDist(10.0D);
entity.setPosition(entity.posX + movingobjectposition.xCoord * 1.0D, entity.posY+1 + movingobjectposition.yCoord * 1.0D, entity.posZ + movingobjectposition.zCoord * 1.0D);
entity.accelerationX = movingobjectposition.xCoord + scatterXZ() / scatter;
entity.accelerationY = movingobjectposition.yCoord + scatterY() / scatter;
entity.accelerationZ = movingobjectposition.zCoord + scatterXZ() / scatter;
entity.BulletDamage = bulletDemage;
entity.BulletSpeed = bulletSpeed;
world.spawnEntityInWorld(entity);
item.getTagCompound().setInteger("ReloadFire", rate);
Client(world, player);
}
}
}
@SideOnly(Side.CLIENT)
private void Client(World world, Entity player)
{
Minecraft.getMinecraft().thePlayer.setAngles(0, angels);
world.playSound(player.posX, player.posY, player.posZ, "random.bow", 10, 5, true);
}
public final void saveNBTData(NBTTagCompound compound)
{
}
public final void loadNBTData(NBTTagCompound compound)
{
}
@Override
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
{
par3List.add("Bullet speed: " + bulletSpeed);
par3List.add("Bullet damage: " + bulletDemage);
par3List.add("Scatter: " + scatter);
par3List.add("Angels: " + angels);
}
private double scatterXZ()
{
double returnD = 0;
Random r = new Random();
int i = r.nextInt(100);
int i2 = r.nextInt(10);
if (i < 30) {returnD = 0.1;}
else if (i >= 30 && i < 90) {returnD = 0.07;}
else if (i >= 90) {returnD = 0.05;}
else {returnD = 0;}
if (i2 < 5){returnD *= -1;}
return returnD;
}
private double scatterY()
{
double returnD = 0;
Random r = new Random();
int i = r.nextInt(100);
int i2 = r.nextInt(10);
if (i < 30) {returnD = 0.1;}
else if (i >= 30 && i < 90) {returnD = 0.07;}
else if (i >= 90) {returnD = 0.05;}
else {returnD = 0;}
if (i2 < 5){returnD *= -1;}
return returnD;
}
}