[1.6.4] прицеливание оружия и модификация оборудования

Всем здравствуйте я хочу задать вопрос
как реализовать прицеливание оружия и модификацию оборудования так как
в игре Warface те. (ствол цевьё и прицел)
Вот мой код

blaster
Код:
package assets.testmod.src;

import javax.swing.text.html.parser.Entity;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.MinecraftForgeClient;

public class blaster extends Item
{
 public int fireSpeed;

 private static Object amethyst;
 public blaster(int par1) {
 super(par1);
 this.setCreativeTab(CreativeTabs.tabCombat);
 MinecraftForgeClient.registerItemRenderer(this.itemID, (IItemRenderer) new BlasterRender());
 this.setFull3D();
 }
 
 public void registerIcons(IconRegister par1IconRegister)
 {
 this.itemIcon = par1IconRegister.registerIcon("TestMod:blaster");
 }
 
 public void onUpdate(ItemStack is, World world, Entity entity, int i, boolean b)
    {
        this.fireSpeed++;
    }

    public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player)
    {
        this.fireSpeed++;
        if(this.fireSpeed >= 0.0) // 32 - задержка между выстрелами в (тиках вроде)
        {
            int itemAmmoID = Item.redstone.itemID; // Предмет патрон (в данном случае редстоун) - если есть в инвентаре - будет при выстреле забираться из инвентаря по одному

            if(player.inventory.hasItem(itemAmmoID) || player.capabilities.isCreativeMode)
            {
                if(!world.isRemote)
                {
                    this.fireSpeed = 0;
                    world.spawnEntityInWorld(new EntitiBlasterBullet(world, player));
                }
                    
                player.rotationPitch -= 0.6F; // Отдача - пробуй эксперементировть в debug-mode

                world.playSoundAtEntity(player, "random.explode", 1.5F, 1.8F); // Звук стрельбы - тут вроде всё понятно. "mod:sound" - смотрим туториал по загрузки звуков при помощи SoundLoadEvent // par3 - громкость (деф. 1.0F) par4 - тональность (деф. 1.0F)

                if(!player.capabilities.isCreativeMode) player.inventory.consumeInventoryItem(itemAmmoID);
            }
            else
            {
                world.playSoundAtEntity(player, "random.click", 0.5F, 1.1F); // Звук, когда нету патрон (редстоуна) - см альтернативу выше
            }
        }

        return is;
    }
}

BlasterRender
Код:
package assets.testmod.src;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;

import org.lwjgl.opengl.GL11;
//("testmod","textures/models/FN_SCAR.png")
//("/assets/testmod/textures/models/FN_SCAR.obj")
public class BlasterRender implements IItemRenderer
{
 private static IModelCustom model;
 private static ResourceLocation tex = new ResourceLocation("testmod","textures/models/FN_SCAR.png");

 public BlasterRender() {
 model = AdvancedModelLoader.loadModel("/assets/testmod/textures/models/FN_SCAR.obj");
 }

 public boolean handleRenderType(ItemStack is, ItemRenderType type) {
     return type != ItemRenderType.INVENTORY;
  }
  public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
     return true;
 }
  
  
  public void renderItem(ItemRenderType type, ItemStack is, Object ... data) {
 
   
 if(type == type.EQUIPPED_FIRST_PERSON)
 { 
 
 GL11.glPushMatrix();
      GL11.glEnable(3042);
      GL11.glBlendFunc(770, 771);
      GL11.glTranslatef(0.0F, 0.0F, -0.2F);
          GL11.glRotatef(620F, 10F, -8F, 5F);
             GL11.glRotatef(-230F, -10F, 1F, 2F);
             GL11.glRotatef(825F, 0F, 0F, 1F);
          GL11.glScaled(1.00F, 1.20F, 1.20F);
      Minecraft.getMinecraft().renderEngine.bindTexture(tex);
      model.renderAll();
      GL11.glDisable(3042);
      GL11.glPopMatrix();
         } 
         else { 
             double sne = 0.7D;
           GL11.glPushMatrix();
           GL11.glEnable(3042);
           GL11.glBlendFunc(770, 771);
           GL11.glTranslatef(1.2F, -1.0F, 1.0F);
           GL11.glRotatef(780F, 10F, -6F, 10F);
              GL11.glRotatef(50F, -10F, 1F, 0F);
              GL11.glRotatef(410F, 0F, 0F, 1F);
           GL11.glScaled(1.50F, 1.50F, 1.50F);
           Minecraft.getMinecraft().renderEngine.bindTexture(tex);
           model.renderAll();
           GL11.glDisable(3042);
           GL11.glPopMatrix();      
        }
   
    
 }
}






EntitiBlasterBullet
Код:
package assets.testmod.src;

import java.util.List;

import net.minecraft.enchantment.EnchantmentThorns;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet70GameEvent;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EntityDamageSourceIndirect;
import net.minecraft.util.EnumMovingObjectType;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class EntitiBlasterBullet extends EntityThrowable
{
 public EntitiBlasterBullet(World world) 
    {
        super(world);
    }

    public EntitiBlasterBullet(World world, double x, double y, double z) 
    {
        super(world, x, y, z);
    }

    public EntitiBlasterBullet(World world, EntityLivingBase entity) 
    {
        super(world, entity);
    }
    
    @Override
    public void onUpdate()
    {
        super.onUpdate();
        
        this.motionX *= (double)this.getVelocity();
        this.motionY *= (double)this.getVelocity();
        this.motionZ *= (double)this.getVelocity();
        this.setPosition(this.posX, this.posY, this.posZ);
        
    }

    protected float getVelocity()
    {
        return 50.0F; 
        
        
    }
    
    protected float getGravityVelocity()
    {
        return 0.01F; 
      
    }

    @Override
    protected void onImpact(MovingObjectPosition mop) 
    {
     for (int i = 0; i < 10000; ++i)
        {
            
            this.worldObj.spawnParticle("smoke", this.posX - this.motionX , this.posY - this.motionY, this.posZ - this.motionZ , this.motionX, this.motionY, this.motionZ);
        }
        if(mop.typeOfHit.equals(EnumMovingObjectType.ENTITY))
        {
            Entity entity = mop.entityHit;

            DamageSource dmgSrc = (DamageSource.causeMobDamage(this.getThrower()));

            int damage = 60; 
       
            entity.attackEntityFrom(dmgSrc, damage); 
        }
        else if(mop.typeOfHit.equals(EnumMovingObjectType.TILE))
        {
            if(!this.worldObj.isRemote)
            {
        

                boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing");
    
                this.setDead();
            }
        }
    }
}




TestMod
Код:
package assets.testmod.src;
import net.minecraft.item.Item;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
@Mod(modid=ModInfo.MODID, name=ModInfo.NAME, version=ModInfo.VERSION)
public class TestMod 
{
 public static Item blaster;
 @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
 
    }
 
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
     blaster = new blaster(3000).setUnlocalizedName("FN_SCAR");
     LanguageRegistry.addName(blaster, "FN_SCAR");
     EntityRegistry.registerModEntity(EntitiBlasterBullet.class, "bullet", 1, this, 40, 100, true);
    }
 
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
 
    }
}




Pricel
Код:
package assets.testmod.src;

import java.lang.annotation.ElementType;

import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemRedstone;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.event.ForgeSubscribe;

public class Pricel {
  Minecraft mc = Minecraft.getMinecraft();
     public static final ResourceLocation NEW_CROSSHAIRS = new ResourceLocation("testmod","textures/gui/bed.png");
     
     
       @ForgeSubscribe
       public void onRenderCrosshairs(RenderGameOverlayEvent.Pre event)
       {
            if(event.type.equals(ElementType.CROSSHAIRS))
            {
                ItemStack heldItem = mc.thePlayer.getHeldItem();
                if(heldItem != null && heldItem.getItem() instanceof ItemRedstone)
                {
                    event.setCanceled(true);
                    
                    mc.getTextureManager().bindTexture(NEW_CROSSHAIRS);
                    
                    int x = event.resolution.getScaledWidth() / 2 - 15;
                    int y = event.resolution.getScaledHeight() / 2 - 15;
                    
                    mc.ingameGUI.drawTexturedModalRect(x, y, 0, 0, 32, 32);
                }
            }
       }
}

и ещё ошибка в файле pricel
if(event.type.equals(ElementType.CROSSHAIRS))
в слове CROSSHAIRS
как это исправить?
 
+
[merge_posts_bbcode]Добавлено: 02.05.2015 19:28:05[/merge_posts_bbcode]

if(event.type==ElementType.CROSSHAIRS)
А есть ли CROSSHAIRS?
 
в смысле объяснять нечего?
[merge_posts_bbcode]Добавлено: 02.05.2015 19:13:17[/merge_posts_bbcode]

В том то и дело что класса [font=Verdana, Helvetica, Arial, sans-serif]CROSSHAIRS нету и я не знаю что в него писать?[/font]
 
Robostal написал(а):
В том то и дело что класса CROSSHAIRS нету и я не знаю что в него писать?
Как класс - нету, а как как Константа - есть.
net.minecraftforge.client.event.RenderGameOverlayEvent.
"ElementType.CROSSHAIRS"
 
а как реализовать перезарядку с помощью обоймы те. прочность у обоймы с каждым выстрелом убавляется и потом её перезарядка?
 
Robostal написал(а):
Во-первых, не чё а что, а во-вторых смотри флэнс.
Вот расскажи мне что такое string и какой смысл имеет эта логика:

int var1;
if(var1==1 || var2 == 4)
{
var1=3;
}

Тогда помогу. Ибо без знания основ java и моддинга не стоит сразу хвататься за продвинутый моддинг.
 
Назад
Сверху