[1.7.10]Вопросы нуба

Коротко, чисто код, без комментариев.

MDItems
Код:
public class MDItems {
    public static Item CD_1;

    public static void items()
    {

        CD_1 = new Record(0, "cd1") .setTextureName("records:1") .setUnlocalizedName("1");


        GameRegistry.registerItem(CD_1, "CD_1");
    }
}

Record
Код:
public class Record
        extends ItemRecord
{
    private static final Map records = new HashMap();
    public final String recordName;


    public Record(int par1, String par0Str)
    {
        super(par0Str);
        this.recordName = par0Str;
        this.maxStackSize = 1;
        this.setCreativeTab(ModBase.materials);
        records.put(par0Str, this);
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIconFromDamage(int par1)
    {
        return this.itemIcon;
    }

    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if ((par3World.getBlock(par4, par5, par6) == Blocks.jukebox) && (par3World.getBlockMetadata(par4, par5, par6) == 0))
        {
            if (par3World.isRemote) {
                return true;
            }
            ((BlockJukebox)Blocks.jukebox).func_149926_b(par3World, par4, par5, par6, par1ItemStack);
            par3World.playAuxSFXAtEntity((EntityPlayer)null, 1005, par4, par5, par6, Item.getIdFromItem(this));
            par1ItemStack.stackSize -= 1;
            return true;
        }
        return false;
    }

    @SideOnly(Side.CLIENT)
    public void func_77624_a(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
    {
        par3List.add(getRecordTitle());
    }

    @SideOnly(Side.CLIENT)
    public String getRecordTitle()
    {
        return this.recordName;
    }

    @SideOnly(Side.CLIENT)
    public EnumRarity func_77613_e(ItemStack par1ItemStack)
    {
        return EnumRarity.rare;
    }

    @SideOnly(Side.CLIENT)
    public static Record getRecord(String par0Str)
    {
        return (Record)records.get(par0Str);
    }

    public ResourceLocation getRecordResource(String name)
    {
        return new ResourceLocation("rcservmod:" + name);
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister iconRegister)
    {
        this.itemIcon = iconRegister.registerIcon("rcservmod:" + this.getUnlocalizedName().substring(5));
    }
}

sounds.json
Код:
{
    "records.cd1": {
        "category": "record",
        "sounds": [
            {
                "name": "records/cd1",
                "stream": true
            }
        ]
    }
}

Немного костыльно, но пашет. Основная катка в updateEntity
TileEntityAcrCreator
Код:
public class TileEntityArcCreator extends TileEntity implements IInventory {

    private static final int[] slotsSides = new int[] {0, 1, 2, 3, 4, 5, 6, 7};
    private static final int[] slotsCenter = new int[] {8};
    private ItemStack[] creatorStacks = new ItemStack[9];
    private String name;

    @Override
    public int getSizeInventory() {
        return creatorStacks.length;
    }

    @Override
    public ItemStack getStackInSlot(int slot) {
        return creatorStacks[slot];
    }

    @Override
    public ItemStack decrStackSize(int slot, int par2) {
        if (creatorStacks[slot] != null) {
            ItemStack itemStack;

            if (creatorStacks[slot].stackSize <= par2) {
                itemStack = creatorStacks[slot];
                creatorStacks[slot] = null;
                return itemStack;
            }
            else {
                itemStack = creatorStacks[slot].splitStack(par2);

                if (creatorStacks[slot].stackSize == 0) {
                    creatorStacks[slot] = null;
                }

                return  itemStack;
            }
        }
        else {
            return null;
        }
    }

    @Override
    public ItemStack getStackInSlotOnClosing(int slot) {
        if (creatorStacks[slot] != null) {
            ItemStack itemStack = creatorStacks[slot];
            creatorStacks[slot] = null;
            return  itemStack;
        }
        else {
            return null;
        }
    }

    @Override
    public void setInventorySlotContents(int slot, ItemStack itemStack) {
        creatorStacks[slot] = itemStack;

        if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) {
            itemStack.stackSize = getInventoryStackLimit();
        }
    }

    @Override
    public String getInventoryName() {
        return hasCustomInventoryName() ? name : "container.creator";
    }

    @Override
    public boolean hasCustomInventoryName() {
        return name != null && name.length() > 0;
    }

    @Override
    public void readFromNBT(NBTTagCompound tagCompound) {
        super.readFromNBT(tagCompound);
        NBTTagList tagList = tagCompound.getTagList("Items", 10);
        creatorStacks = new ItemStack[getSizeInventory()];

        for (int i = 0; i < tagList.tagCount(); ++i) {
            NBTTagCompound tagCompound1 = tagList.getCompoundTagAt(i);
            byte b0 = tagCompound1.getByte("Slot");

            if (b0 >= 0 && b0 < creatorStacks.length) {
                creatorStacks[b0] = ItemStack.loadItemStackFromNBT(tagCompound1);
            }

            if (tagCompound.hasKey("CustomName", 8)) {
                name = tagCompound.getString("CustomName");
            }
        }
    }

    @Override
    public void writeToNBT(NBTTagCompound tagCompound) {
        super.writeToNBT(tagCompound);
        NBTTagList tagList = new NBTTagList();

        for (int i = 0; i < creatorStacks.length; ++i) {
            if (creatorStacks[i] != null) {
                NBTTagCompound tagCompound1 = new NBTTagCompound();
                tagCompound1.setByte("Slot", (byte)i);
                creatorStacks[i].writeToNBT(tagCompound1);
                tagList.appendTag(tagCompound1);
            }
        }

        tagCompound.setTag("Items", tagList);
        if (hasCustomInventoryName()) {
            tagCompound.setString("CustomName", name);
        }
    }

    @Override
    public int getInventoryStackLimit() {
        return 64;
    }

    @Override
    public void updateEntity() {
        if (!getWorldObj().isRemote) {
            ItemStack itemStack = getStackInSlot(0);
            ItemStack itemStack1 = getStackInSlot(1);
            ItemStack itemStack2 = getStackInSlot(2);
            ItemStack itemStack3 = getStackInSlot(3);
            ItemStack itemStack4 = getStackInSlot(4);
            ItemStack itemStack5 = getStackInSlot(5);
            ItemStack itemStack6 = getStackInSlot(6);
            ItemStack itemStack7 = getStackInSlot(7);
            try {
            if (itemStack.getItem()==PTItems.arcTubeWithCoil && itemStack1.getItem()==PTItems.arcTubeWithCoil && itemStack2.getItem()==PTItems.arcTubeWithCoil && itemStack3.getItem()==PTItems.arcTubeWithCoil && itemStack4.getItem()==PTItems.arcTubeWithCoil && itemStack5.getItem()==PTItems.arcTubeWithCoil && itemStack6.getItem()==PTItems.arcTubeWithCoil && itemStack7.getItem()==PTItems.arcTubeWithCoil) {
                decrStackSize(0, 8);
                decrStackSize(1, 8);
                decrStackSize(2, 8);
                decrStackSize(3, 8);
                decrStackSize(4, 8);
                decrStackSize(5, 8);
                decrStackSize(6, 8);
                decrStackSize(7, 8);
                if (getStackInSlot(8) != null) {
                    setInventorySlotContents(8 ,new ItemStack(PTItems.arcModel));
                } else {
                    setInventorySlotContents(8, new ItemStack(PTItems.arcModel));
                    markDirty();
                }
            }
            } catch(NullPointerException e) {

            }

        }
    }

    @Override
    public boolean isUseableByPlayer(EntityPlayer player) {
        return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;

    }

    @Override
    public void openInventory() {}

    @Override
    public void closeInventory() {}

    @Override
    public boolean isItemValidForSlot(int par1, ItemStack itemStack) {
        return true;
    }
}

Здесь будет только настройка предметов и регистрация материалов.

ModBase
Код:
public class ModBase {

public static Item.ToolMaterial STEEL = EnumHelper.addToolMaterial("IRON", 4, 150, 5, 0, 10);
public static ItemArmor.ArmorMaterial CELVAR = EnumHelper.addArmorMaterial("IRON", 210, new int[] {5, 20, 10, 5}, 10);
//....
}

Sword
Код:
public class Sword extends ItemSword {
public Sword(ModBase.STEEL) {
}
}

Helmet
Код:
public class CevlarHelmet extends ItemArmor 
{
     public BoneBoots(EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4)
        {
            super(par1, par2EnumArmorMaterial, par3, par4);
            this.setCreativeTab(MArmory.tabMArmory);
        }
                
        public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack)
        {
            /*
             * Любой эффект, когда броня одета (не вся, а только определенный предмет(в данном случае - шлем))
             */
        }
        
        /*
         * Текстура брони на игроке
         */
        public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
        {
            return ModBase.MODID + ":textures/armor/cevlarArmor.png";
        }
}

Items
Код:
public class Items {
public static Item sword;
public static ItemArmor helmet;
public static void items() {
      sword = new Sword().setCreativeTab(ModBase.armory).setUnlocalizedName("sword").setTextureName(ModBase.MODID + ":" + "sword");
      helmet = (ItemArmor) new CevlarHelmet(ModBase.CEVLAR, 0, 0).setCreativeTab(ModBase.armory).setUnlocalizedName("helmet").setTextureName(ModBase.MODID + ":" + "helmet");

    //Ну, с GameRegistry сами разберетесь
}
 
Agravaine написал(а):
Задрал. Гугл научись юзать.
Терпеть не могу американцев. Яндекс есть же, не хуже. Да и ничего кроме рекламы не дает. И на форуме я ниче нужного не нашел.
 
Поискал в гугле, выдает это:
1
2
[merge_posts_bbcode]Добавлено: 26.10.2014 00:11:39[/merge_posts_bbcode]

А юзать better records или your records я не хочу
 
Непобедимая
[merge_posts_bbcode]Добавлено: 26.10.2014 00:17:53[/merge_posts_bbcode]

Серьезно? Добавить ресурс паком? Даже если так, то нужно ставить этот пак по-умолчанию. И при этом обращаться в него из мода. +100 к гемморою.
 
Бл.... черт! не регалось из-за того, что не внутри метода load писал, а за ним. БЛИН
[merge_posts_bbcode]Добавлено: 26.10.2014 00:28:07[/merge_posts_bbcode]

Agravaine написал(а):
Чушь не нести, а.
Я всегда несу чушь. И не потому что я имбицил какой-нибудь, а по незнанию. Лучше бы по башке палкой бил и показывал как правильно.
 
Другого пути то нет. Я бы и обошел, но велосипеды делать не столько не хочу, сколько не могу. Не умею со звуком работать. А так вроде даже пашет. Звука закачаю и проверю.
[merge_posts_bbcode]Добавлено: 26.10.2014 00:41:24[/merge_posts_bbcode]

Не-а не пашет. А ванильный не найти, он у низ в sound.json который хз где.
 
Ура, пашет! Вот исходники файлов, всего 3 штуки. И файл sounds.json кидайте в assets. А дальше настраивайте как угодно.
Record
Код:
public class Record
        extends ItemRecord
{
    private static final Map records = new HashMap();
    public final String recordName;


    public Record(int par1, String par0Str)
    {
        super(par0Str);
        this.recordName = par0Str;
        this.maxStackSize = 1;
        this.setCreativeTab(ModBase.materials);
        records.put(par0Str, this);
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIconFromDamage(int par1)
    {
        return this.itemIcon;
    }

    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if ((par3World.getBlock(par4, par5, par6) == Blocks.jukebox) && (par3World.getBlockMetadata(par4, par5, par6) == 0))
        {
            if (par3World.isRemote) {
                return true;
            }
            ((BlockJukebox)Blocks.jukebox).func_149926_b(par3World, par4, par5, par6, par1ItemStack);
            par3World.playAuxSFXAtEntity((EntityPlayer)null, 1005, par4, par5, par6, Item.getIdFromItem(this));
            par1ItemStack.stackSize -= 1;
            return true;
        }
        return false;
    }

    @SideOnly(Side.CLIENT)
    public void func_77624_a(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
    {
        par3List.add(getRecordTitle());
    }

    @SideOnly(Side.CLIENT)
    public String getRecordTitle()
    {
        return this.recordName;
    }

    @SideOnly(Side.CLIENT)
    public EnumRarity func_77613_e(ItemStack par1ItemStack)
    {
        return EnumRarity.rare;
    }

    @SideOnly(Side.CLIENT)
    public static Record getRecord(String par0Str)
    {
        return (Record)records.get(par0Str);
    }

    public ResourceLocation getRecordResource(String name)
    {
        return new ResourceLocation("rcservmod:" + name);
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister iconRegister)
    {
        this.itemIcon = iconRegister.registerIcon("rcservmod:" + this.getUnlocalizedName().substring(5));
    }
}

sounds.json
Код:
{
    "records.cd1": {
        "category": "record",
        "sounds": [
            {
                "name": "records/cd1",
                "stream": true
            }
        ]
    }
}

MDItems(регистрация итема Record)
Код:
public class MDItems {
    public static Item CD_1;

    public static void items()
    {

        CD_1 = new Record(0, "cd1") .setTextureName("records:1") .setUnlocalizedName("1");


        GameRegistry.registerItem(CD_1, "CD_1");
    }
}

Вопрос считать закрытым, ждите обновлений топика.
[merge_posts_bbcode]Добавлено: 26.10.2014 20:10:38[/merge_posts_bbcode]

Гитхаб исходников самого маленького мода, который я видел https://github.com/goldensilver853/Additional-Records
 
Я заметил что авраигне грубым стал как ботинок. А на месте вовы можно было использовать переводчик и фразу загуглить(в гугле или американском яндексе)
 
68
0
LazyRavenMan написал(а):
Я заметил что авраигне грубым стал как ботинок. А на месте вовы можно было использовать переводчик и фразу загуглить(в гугле или американском яндексе)
Стена оффтопа в защиту Agravaine.
Я поражаюсь вашей логике: "Искать мы не хотим, пусть рабы ищут, не мне же это надо..." И эта ваша брезгливость к гуглу и американцам совершенно безосновательна. Давайте не будем Eclipse использовать- его американцы создали, давайте MCP и Minecraft тоже не будем использовать все же американцы создали, и английский алфавит тоже не будем использовать, все на русском писать будем, тогда Java'y тоже к черту, все же американцы написали, компьютеры, планшеты, телефоны тоже давайте выбросим, создатели же американцы. Логики ну просто никакой нету, вообще. 
И потом такие личности ещё и удивляются почему к ним грубо относятся, хотя никакой грубости и в помине не было.
Накипело.
 
Ты прав. Только большинство не принадлежит американцам(США). Множество принадлежит шведам,австрийцам. Интернет вообще в великобритании изобрели. Кстати можешь его не защищать. Авраигре мог бы быть вежливее,учесть то что туторов по моддингу мало.
 
Сверху