Как создать своё оружие, на подобие лука ?

Статус
В этой теме нельзя размещать новые ответы.
Смотри в исходники майнкрафта.
 
Дай тогда код лука
Ммм, копипаст вещь не хорошая
Ммм, копипаст вещь не хорошая
Да и максимум, что там найдёшь, это декомпилированное говно, не пригодное для нормальной работы.
И всё таки вот код:
Код:
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ItemMyBow extends ItemBow {

    IIcon[] pullIcons = new IIcon[3];

    public ItemMyBow() {
        this();
    }

    public ItemMyBow(String name) {
        super();
        setCreativeTab(КреативТаб);
        setUnlocalizedName(name);
        setMaxDamage(500);
        //Не обязательно, смотря какой лук делаешь (С моделью или без?) setFull3D();
    }

    @Override
    public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) {
        ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
        MinecraftForge.EVENT_BUS.post(event);
        if(event.isCanceled())
            return event.result;

        if(canFire(p_77659_1_, p_77659_2_, p_77659_3_, 0))
            p_77659_3_.setItemInUse(p_77659_1_, getMaxItemUseDuration(p_77659_1_));

        return p_77659_1_;
    }

    @Override
    public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_) {
        int j = (int) ((getMaxItemUseDuration(p_77615_1_) - p_77615_4_) * chargeVelocityMultiplier());

        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
        MinecraftForge.EVENT_BUS.post(event);
        if(event.isCanceled())
            return;
        j = event.charge;

        boolean flag = canFire(p_77615_1_, p_77615_2_, p_77615_3_, p_77615_4_);
        boolean infinity = EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;

        if(flag) {
            float f = j / 20.0F;
            f = (f * f + f * 2.0F) / 3.0F;

            if(f < 0.1D)
                return;

            if(f > 1.0F)
                f = 1.0F;

            EntityArrow entityarrow = makeArrow(p_77615_1_, p_77615_2_, p_77615_3_, p_77615_4_, f);

            if(f == 1.0F)
                entityarrow.setIsCritical(true);

            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);

            if(k > 0)
                entityarrow.setDamage(entityarrow.getDamage() + k * 0.5D + 0.5D);

            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);

            if(l > 0)
                entityarrow.setKnockbackStrength(l);

            if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
                entityarrow.setFire(100);
            p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

            onFire(p_77615_1_, p_77615_2_, p_77615_3_, p_77615_4_, infinity, entityarrow);

            if(!p_77615_2_.isRemote)
                p_77615_2_.spawnEntityInWorld(entityarrow);
        }
    }

    float chargeVelocityMultiplier() {
        return 1F;
    }

    boolean postsEvent() {
        return true;
    }

    EntityArrow makeArrow(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_, float f) {
        return new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
    }

    boolean canFire(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_) {
        return p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0 || p_77615_3_.inventory.hasItem(Items.arrow);
    }

    void onFire(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_, boolean infinity, EntityArrow arrow) {
        if(infinity)
            arrow.canBePickedUp = 2;
        else p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister par1IconRegister) {
        itemIcon = IconHelper.forItem(par1IconRegister, this, 0);
        for(int i = 0; i < 3; i++)
            pullIcons[i] = IconHelper.forItem(par1IconRegister, this, i + 1);
    }

    @Override
    public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5) {
        if(!world.isRemote && player instanceof EntityPlayer && stack.getItemDamage() > 0)
            stack.setItemDamage(stack.getItemDamage() - 1);
    }

    @Override
    public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
        if(stack != usingItem)
            return itemIcon;

        int j = (int) ((getMaxItemUseDuration(stack) - useRemaining) * chargeVelocityMultiplier());

        if(j >= 18)
            return pullIcons[2];
        if(j > 13)
            return pullIcons[1];
        if(j > 0)
            return pullIcons[0];

        return itemIcon;
    }

}
Но это лично мой код лука, естественно я его как смог так и изменил (У меня свои апишки с энергией итд), чтобы не использовался апи.
 
[font=Verdana, Helvetica, Arial, sans-serif]>Ммм, копипаст вещь не хорошая[/font]
[font=Verdana, Helvetica, Arial, sans-serif]Помойму создание оружия на подобие лука,является копипастом.[/font]
[font=Verdana, Helvetica, Arial, sans-serif]Неужели это арбалет.[/font]
 
*Ой, я накосячил, кококок, ты не прав *отговорочка**
14078197642631.png
 
Wilah, это не к месту, у нас есть тима в которой мы общаемся, там есть некита.
Тем более код нормальный, просто когда я переходил на другой дистр - я потерял исходники мода, пришлось декомпильнуть.
 
Код то нормальный(ну так), вот только говорить о недостатках так открыто не очень красиво. Это, считай, личная информация
 
Знаешь, ты прав, но однако безответно так просто я не могу остаться когда говорят о копипасте :)
 
Лол, там достаточно такого:
public Crossbow extends ItemBow{
//сюда методы с иконками и тд
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху