[1.7.10/1.6.4] Метадата блока

2,955
12
ФанКару:
Не знаешь - не лезь, какой раз уже всем обитателям этого форума повторяю.

Травнику:
Меняешь материал на другой, не требующий инструмента.
 
127
0
Dragon2488 написал(а):
ФанКару:
Не знаешь - не лезь, какой раз уже всем обитателям этого форума повторяю.

Травнику:
Меняешь материал на другой, не требующий инструмента.
Пробывал rock ставить, все равно не выпал.
 

timaxa007

Модератор
5,831
409
672
travnik, материал rock всё равно требует инструмент. К примеру материал wood, ground, plants и т.д. у тех в котором материале нет в конструкторе "setRequiresTool()", и не будет требовать инструмент (по идеи). (Можно создать свой материал для блока.)
Если материал поставлен, который не требует инструмента, а дроп не выпадет - значит где-то возможно ошибка: дроп не прописан в случаи его добычи, поставлен не подходящий материал или/и другие ошибки.
 

timaxa007

Модератор
5,831
409
672
...
Не давно начал эксперименты над блоком и его TileEntity. В 1.7.10 в блоке есть метод createNewTileEntity есть два аргумента "World world" и "int metadata". После нескольких экспериментов выяснялось, что аргумент metadata берётся из метадаты блока в мире, onBlockPlacedBy заменить метадату блока, но к сожалению метадата в createNewTileEntity будет равна 0. Получается onBlockPlacedBy срабатывает после createNewTileEntity.
...
Не давно была тема Беда. Текстура блока с метадатой. там нужно было использовать ItemMultiTexture - это является наследником "ItemBlock".

Если вы хотите использовать метадату для декоративных блоков и т.п., то использовать желательно
net.minecraft.item.ItemMultiTexture. Пример:
Код:
public class ItemBlockMetadata extends ItemMultiTexture {

    public ItemBlockMetadata(Block block) {//если ниже 1.7, то "int id"
        super(block, block, BlockMetadata.metadata);
    }

}
Первый аргумент block - блок которому дали в регистрации этот ItemBlock.
Второй аргумент block - блок из которого будем брать иконки/текстуры для ItemBlock. Пока-что это использовалось для рендеров, которые блоки в инвентаре рендерались как предметы.
Третий аргумент BlockMetadata.metadata - объект массива String, нужен для getUnlocalizedName, чтобы у каждого метадата блока (в инвентаре) типа было каждое своё имя для локализации.

Если не хотите использовать массив String или сделать по своему в методе getUnlocalizedName, то можно использовать net.minecraft.item.ItemBlockWithMetadata. К примеру:
Код:
public class ItemBlockMetadata extends ItemBlockWithMetadata {

    public ItemBlockMetadata(Block block) {
        super(block, block);
    }

}
Первый аргумент block - блок которому дали в регистрации этот ItemBlock.
Второй аргумент block - блок из которого будем брать иконки/текстуры для ItemBlock.

Если используете ItemBlockWithMetadata и ItemMultiTexture, то метод в onBlockPlacedBy в блоке для установки не нужен - так как в ItemBlockWithMetadata и ItemMultiTexture есть:
Код:
public int getMetadata(int metadata) {
return metadata;
}
И где-то ItemBlock'е это используется для установки с определённой метадатой.

Но всё-же метадата может по разному использовать. К примеру в печке и не только, использовалось типа для поворотов, для этого не нужно будет использовать ItemBlock. Так что смотря на что вам надо метадата.
В близлежащее время я изменю свой код, по типу для мульти-текстур (ItemMultiTexture).
Спасибо, за внимание.
[merge_posts_bbcode]Добавлено: 17.04.2016 00:49:00[/merge_posts_bbcode]

Код обновил.
 
Сверху