[1.7.10] ItemStack из блока в мире и getItemDamage, цикл

timaxa007 написал(а):
Yarik написал(а):
И столкнулся с тем, что в мире почти не реально чекать метадату блока. Ибо она кривая.
Она не кривая, она другая - так как метадата блока в мире и метадата ItemStack'а имею разные алгоритмы сохранения и их использования в разных видах объектах. По-этому придётся не легко создавать запретные предметы и блоки.
Ну а возможно ли получить ее как то?
Ведь возможно ли получить айтемстак с блока в мире, со всеми параметрами, а потом из айтемстака получить метадату?
Может Вам, как опытному кодеру, придет что то в голову)
 
Yarik, создать то что ты хочешь возможно не получиться. Так как есть моды и даже в ваниле (кровать, тростник, котёл и не только) они от Item объекта ставиться, а не ItemBlock объекта. И опять-же это не удовлетворить для простого использования в коде. По-этому это ещё больше усложнит запрет блоков и предметов.
[merge_posts_bbcode]Добавлено: 23.03.2016 01:34:56[/merge_posts_bbcode]

И это значит - я не как не сделаю, как ты хочешь сделать.
[merge_posts_bbcode]Добавлено: 23.03.2016 01:36:19[/merge_posts_bbcode]

Я бы создал, разные списки запретов: в инвентаре и в мире.

[merge_posts_bbcode]Добавлено: 23.03.2016 01:43:29[/merge_posts_bbcode]

И я обязательно-бы создал GUI с разными видами запретов. Так как ItemStack может иметь NBT и одно из параметров которые не хотелось-бы использовать.
Помню что в IC2 есть бур с каким-то режимом, который позволяет дюпать мутипарты блоков.
Видел на видео, сам не пробовал и не знаю.
Нужно давать на другое значения или иначе есть возможность на не переключаемость на другие виды параметров.
[merge_posts_bbcode]Добавлено: 23.03.2016 01:44:06[/merge_posts_bbcode]

И бла-бла-бла...
 
А если учитывать, что я буду запрещать или другие только обычные блоки или просто тайлы механизмов, которые как обычные блоки только с метадатой больше 0??
 
TileEntity привязывается к блоку с ITileEntityProvider, но не всегда этот блок может иметь один и то-же TileEntity. Смена метадаты у блока с ITileEntityProvider, не обязуется сменой его TileEntity.
У меня блок с ITileEntityProvider, имеет шесть разных TileEntity - меняются взависимости от апгрейда машинки.
Так-что нету привязки TileEntity к метадате блоку.
 
Алло, ты вообще знаешь, что такое метадата? Поворот печки и есть её метадата.
 
Dragon2488, я - да, а Yarik - не до конца понимает использования метадаты у блока.
 
timaxa007 написал(а):
Код:
        int x = mop.blockX;
        int y = mop.blockX;
        int z = mop.blockX;
Ошибся, надо было:
Код:
        int x = mop.blockX;
        int y = mop.blockY;
        int z = mop.blockZ;
[merge_posts_bbcode]Добавлено: 23.03.2016 03:53:54[/merge_posts_bbcode]

По-испытывал:
Код:
@Override
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
    MovingObjectPosition mop = EntityLook.block(player, 1.0F, 4.0D, true);
    if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
        int x = mop.blockX;
        int y = mop.blockY;
        int z = mop.blockZ;
        Block block = world.getBlock(x, y, z);
        ItemStack item = block.getPickBlock(mop, world, x, y, z, player);
        player.inventory.addItemStackToInventory(item);
    }
    return is;
}
Печку, сундук и ещё некоторые машинки из IC2, отдаёт такие-же какие и ставил.
Ставил Item пыли редстоуном, блок редстоун провода - брал от блока редстоун провода Item пыли редстоуна.
Но нужно учитывать, что не каждый мод, будет делать нормальный getPickBlock для своего блока.
 
Матадата - просто бит, который есть в каждом блоке мира и позволяет хранить свои данные.
Печка, например, хранит в этом бите поворот, а шерсть - вариант(цвет шерсти -> текстура).
Ты можешь хранить там что хочешь.
 
М, пришла идея в голову, есть же мод Walia, когда наводишь курсор на блок, то мод его получает и рендерит блок. И с учетом метадаты у айтемстака. Т.к там нет таких багов.. Попробую в нем покопаться.
 
timaxa007 написал(а):
timaxa007 написал(а):
Код:
        int x = mop.blockX;
        int y = mop.blockX;
        int z = mop.blockX;
Ошибся, надо было:
Код:
        int x = mop.blockX;
        int y = mop.blockY;
        int z = mop.blockZ;
[merge_posts_bbcode]Добавлено: 23.03.2016 03:53:54[/merge_posts_bbcode]

По-испытывал:
Код:
@Override
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
    MovingObjectPosition mop = EntityLook.block(player, 1.0F, 4.0D, true);
    if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
        int x = mop.blockX;
        int y = mop.blockY;
        int z = mop.blockZ;
        Block block = world.getBlock(x, y, z);
        ItemStack item = block.getPickBlock(mop, world, x, y, z, player);
        player.inventory.addItemStackToInventory(item);
    }
    return is;
}
Печку, сундук и ещё некоторые машинки из IC2, отдаёт такие-же какие и ставил.
Ставил Item пыли редстоуном, блок редстоун провода - брал от блока редстоун провода Item пыли редстоуна.
Но нужно учитывать, что не каждый мод, будет делать нормальный getPickBlock для своего блока.
А данный способ рабочий, на данный момент его юзаю.
 
Цикл сам сделал:
Вроде костыльно, вроде нет. Как сделать по другому - не знаю.
for(int k = 1; k < 50; k++) {
if(k == 1) {
maxPages = 1;
if(page == 1 && i >= 0 && i < itemsInPage) {
if(xCoord+60 >= scaledWidth-16) {
xCoord = 30;
yCoord = yCoord+35;
} else {
xCoord = xCoord+34;
}
itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, xCoord, yCoord);
}
} else {
if(i >= itemsInPage*(k-1) && i < itemsInPage*k) maxPages = k;
if(page == k && i >= itemsInPage*(k-1) && i < itemsInPage*k) {
if(xCoord+60 >= scaledWidth-16) {
xCoord = 30;
yCoord = yCoord+35;
} else {
xCoord = xCoord+34;
}
itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, xCoord, yCoord);
}
}
}
 
Назад
Сверху