[1.6.4]Помогите реализовать

122
0
Хочу научится создавать огнестрельное оружие, но для него не хватает еще много всего, а именно:
1.Перезарядка(допустим при перезарядке из инвентаря убираются 10 патронов и можно их расстреливать)
2.Прицеливание(просто приближение, без поворота-разворота модели)
3.Разброс(допустим при стрельбе от бедра пули летят не точно, да и вообще если можно то взяв в руки оружие перекрестие вообще исчезает)

P.S. Возможно ли сделать прицеливание на кнопку СTRL?
P.P.S просьба не скидывать видео на английском (я его незнаю, а еще инет не позволит смотреть в 720p)

Вот что у меня уже есть
Gun
Код:
package assets.testmod.src.items;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import assets.testmod.src.ModInfo;
 
public class Gun extends Item
{
 
    private int fireSpeed;

    public Gun(int id)
    {
        super(id);
        this.setCreativeTab(CreativeTabs.tabCombat);
        this.setFull3D();
    }
    
    public void registerIcons(IconRegister tex)
    {
        this.itemIcon = tex.registerIcon(ModInfo.MODID + ":PM");
    }
    
    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 >= 32)
        {
            int itemAmmoID = Item.redstone.itemID;

            if(player.inventory.hasItem(itemAmmoID) || player.capabilities.isCreativeMode)
            {
                if(!world.isRemote)
                {
                    this.fireSpeed = 0;
                    world.spawnEntityInWorld(new EntityBlasterBullet(world, player));
                }
                    
                player.rotationPitch -= 1.0F;

                world.playSoundAtEntity(player, "testmod:pistol", 0.5F, 1.0F);

                if(!player.capabilities.isCreativeMode) player.inventory.consumeInventoryItem(itemAmmoID);
            }
            else
            {
                world.playSoundAtEntity(player, "random.click", 0.5F, 1.1F);
        }

        return is;
    }
}

EntityBlasterBullet

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

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumMovingObjectType;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;

public class EntityBlasterBullet extends EntityThrowable
{

    public EntityBlasterBullet(World world) 
    {
        super(world);
    }

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

    public EntityBlasterBullet(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 2.0F; // Скорость пули (с какой скоростью будет лететь пуля)
    }
    
    protected float getGravityVelocity()
    {
        return 0.01F; 
    }

    @Override
    protected void onImpact(MovingObjectPosition mop) 
    {
        if(mop.typeOfHit.equals(EnumMovingObjectType.ENTITY))
        {
            Entity entity = mop.entityHit;

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

            int damage = 5; 
            entity.attackEntityFrom(dmgSrc, damage); 
        }
    }
}
 
RaVeN_II написал(а):
Деобуфь дейз мод там и пуля и тд,отдача rotationPitch поматематируй :lol:(вычиьай,складывай и тд)
Если только перезарядку оттуда взять, но если честно мод тупой.
Тогда учи меня деобфусцировать _)
 
  1. Перезарядку проще всего сделать на основе прочности вещи. Например, пистолет вмещает 12 пуль - значит сделать прочность 13. Каждый выстрел отнимает 1 прочность, а в конце, когда остается прочность 1 - делаем проверку: если в инвентаре есть патроны - удаляем их и увеличиваем прочность, если патронов нет - просто не стреляем.
  2. Можно. Прицеливание можно подглядеть у лука. Если конкретнее, то у Forge есть один замечательный клиентский эвент - FOVUpdateEvent . В нем делаешь нужную тебе проверку и играешься с параметром event.newfov;
  3. Ищи в EntityArrow (либо где-то еще, не помню точно) метод setThrowableHeading(double par1, double par3, double par5, float par7, float par8), где:
  • par1, par3, par5 - определяют направление
  • par7 - определяет скорость
  • par9 - определяет разброс (типа this.rand.nextGaussian() и т.д.)
P.S.: На CTRL прицеливание сделать можно, например:
Код:
private KeyBinding key_Pricel = new KeyBinding("Тут описание кнопки", Keyboard.KEY_NUMPAD1, "Тут описание категории кнопки");
ClientRegistry.registerKeyBinding(key_Pricel);
Тут мы определили и зарегистрировали кнопку NUMPAD1. А потом обрабатываем событие(эвент) нажатия кнопки клавиатуры:
Код:
@SubscribeEvent
public void tick(KeyInputEvent event) 
{
    if(key_Pricel.isPressed())
    {
        System.out.prinln("KA-BOOM!"):
    }
}

P.P.S.: Видео на английском - плохая идея, а вот туториалы на английском читать надо. В русских интернетах ответов очень мало, считай этот сайт - единственным. :)

P.P.P.S.: Всё, что я написал выше - актуально для версий 1.7.2 и 1.7.10, и (возможно) в 1.6.4 это делается по-другому. Если есть микрофон и храбрость - стучись на Skype.
 
RaVeN_II написал(а):
Деобуфить просто. Архив с модом и пустой зип(нужны) . Скачиваешь bon выбираешь мод и архив пустой. Нажмаеши на кнопку(она одна). В пустом находится мод. Потом декомпилишь с ферном.
Ссылочку можно, а то мне какую-то хрень выдает
 
TaoGunner написал(а):
  1. Перезарядку проще всего сделать на основе прочности вещи. Например, пистолет вмещает 12 пуль - значит сделать прочность 13. Каждый выстрел отнимает 1 прочность, а в конце, когда остается прочность 1 - делаем проверку: если в инвентаре есть патроны - удаляем их и увеличиваем прочность, если патронов нет - просто не стреляем.
  2. Можно. Прицеливание можно подглядеть у лука. Если конкретнее, то у Forge есть один замечательный клиентский эвент - FOVUpdateEvent . В нем делаешь нужную тебе проверку и играешься с параметром event.newfov;
  3. Ищи в EntityArrow (либо где-то еще, не помню точно) метод setThrowableHeading(double par1, double par3, double par5, float par7, float par8), где:
  • par1, par3, par5 - определяют направление
  • par7 - определяет скорость
  • par9 - определяет разброс (типа this.rand.nextGaussian() и т.д.)
P.S.: На CTRL прицеливание сделать можно, например:
Код:
private KeyBinding key_Pricel = new KeyBinding("Тут описание кнопки", Keyboard.KEY_NUMPAD1, "Тут описание категории кнопки");
ClientRegistry.registerKeyBinding(key_Pricel);
Тут мы определили и зарегистрировали кнопку NUMPAD1. А потом обрабатываем событие(эвент) нажатия кнопки клавиатуры:
Код:
@SubscribeEvent
public void tick(KeyInputEvent event) 
{
    if(key_Pricel.isPressed())
    {
        System.out.prinln("KA-BOOM!"):
    }
}

P.P.S.: Видео на английском - плохая идея, а вот туториалы на английском читать надо. В русских интернетах ответов очень мало, считай этот сайт - единственным. :)

P.P.P.S.: Всё, что я написал выше - актуально для версий 1.7.2 и 1.7.10, и (возможно) в 1.6.4 это делается по-другому. Если есть микрофон и храбрость - стучись на Skype.
Вот объяснил хорошо, но не для меня, я пока начинающий и мне бы код, а я его под себя
 
Сам пиши, это легко.
Тебе все расжували.
 
TaoGunner написал(а):
  1. У тебя был шанс. Я дал тебе шанс (с) Jigsaw
  2. Бесплатно готовый код никто под твою просьбу не напишет.
  3. Хочешь патроны - ищи их в луке.
  4. Хочешь прицел - ищи его в луке.
  5. Хочешь кода - ищи его в github'е.
  6. Ты критически ошибся с ответом.
Ладно, ладно, пробую, не нужно тут большого шрифта
 
Назад
Сверху