addInformation

Версия Minecraft
1.7.10
Доброе утро!
Как блоку добавить инфу?
Код от итема не работает.
Код:
public void addInformation(ItemStack is, EntityPlayer player, List list, boolean show) {
 list.add(StatCollector.translateToLocal("txt1.my_block.name"));
}
 
Maxik001 написал(а):
оверрайд не забыл?

*просто промолчу*



Это код для итема, у блока его нет. Для того чтобы добавить информацию блоку нужно зарегистрировать
итемблок, и там уже добавить инфу.
 
1,200
37
237
А? ItemBlock чисто для tooltip'а?

Сделай через событие, сможешь ставить чему угодно текст.

Можешь примерно так сделать:

Код:
@SubscribeEvent
public void itemTooltipEvent(ItemTooltipEvent event) {
 if (event.itemStack != null && event.itemStack.getItem() != null) {
 if(event.itemStack.getItem() == Items.apple)
 event.toolTip.add(ChatFormatting.DARK_GRAY.toString() + ChatFormatting.ITALIC.toString() + "Холо одобряет");
 if(event.itemStack.getItem() == Items.stick)
 event.toolTip.add(ChatFormatting.DARK_GRAY.toString() + ChatFormatting.ITALIC.toString() + "Для выбивания дури");
 }
}
 

timaxa007

Модератор
5,831
409
672
MJaroslav написал(а):
А? ItemBlock чисто для tooltip'а?
Нет, всё что нужно как предмету (блок в инвентаре отличается от блока в мире) - типа на подобии шерсти: метадата, разные имена в зависимости от метадаты, методы которых нет в блоке и т.п.
 
1,976
68
220
mastin.91 написал(а):
> Блоку
> Код от итема
> Не работает
Даже, блин, не знаю, почему не работает!

Код:
public class ItemBlockMyCoolBlock extends ItemBlock {
	
	public ItemBlockMyCoolBlock(Block block) {
		super(block);
		// Всяко-разные set'ы и прочее
	}

	@Override // Не забыл -_- хотя он, в принципе, не обязателен
	public void addInformation(ItemStack is, EntityPlayer player, List list, boolean show) {
		list.add(StatCollector.translateToLocal("txt1.my_block.name"));
	}

	// Другие методы
}

Не забудь его зарегать:
Код:
GameRegistry.registerBlock(MyMod.mySuperBlock, ItemBlockMyCoolBlock.class, "MySuperBlock");


ItemBlock'и используют не только для метадаты, но и для хранения NBT. Вспомни хоть Ender IO и то, как у него под блоками тех же капаситор банок была полоса "урона", показывающаяя процент заряда. Это сделано именно через ItemBlock.
 
3,005
192
592
AlexSocol написал(а):
Код:
@SideOnly(Side.CLIENT)
 @Override
 public void addInformation(ItemStack is, EntityPlayer player, List list, boolean show)

Так будет по лучше.
P.S. У предмета так обязательно.
 
1,200
37
237
timaxa007 написал(а):
MJaroslav написал(а):
А? ItemBlock чисто для tooltip'а?
Нет, всё что нужно как предмету (блок в инвентаре отличается от блока в мире) - типа на подобии шерсти: метадата, разные имена в зависимости от метадаты, методы которых нет в блоке и т.п.

Я имел в виду, зачем делать класс ItemBlock'а только для tooltip'а (ведь мета тут не используется, как я понял), если можно сделать событием.
 
Попробовал все вышеперечисленные способы, не получилось. А с ItemBlock'ом в классе блока появляются ошибки, будто ему не знакомы:
super(Material.rock);
this.setBlockName("my_block");
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(1F);
this.setHarvestLevel("pickaxe", 0);
this.setLightLevel(15F);
this.setBlockTextureName("ext:my_block");
 
3,005
192
592
mastin.91 написал(а):
Попробовал все вышеперечисленные способы, не получилось. А с ItemBlock'ом в классе блока появляются ошибки, будто ему не знакомы:
super(Material.rock);
this.setBlockName("my_block");
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(1F);
this.setHarvestLevel("pickaxe", 0);
this.setLightLevel(15F);
this.setBlockTextureName("ext:my_block");

Тебе готовый пример дали, а ты фигню пишешь.
 
Doc написал(а):
mastin.91 написал(а):
Попробовал все вышеперечисленные способы, не получилось. А с ItemBlock'ом в классе блока появляются ошибки, будто ему не знакомы:
super(Material.rock);
this.setBlockName("my_block");
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(1F);
this.setHarvestLevel("pickaxe", 0);
this.setLightLevel(15F);
this.setBlockTextureName("ext:my_block");

Тебе готовый пример дали, а ты фигню пишешь.

Ибо я пока не понял как работает!


timaxa007 написал(а):
Не нужно в класе блока, унаследовать от ItemBlock'а. Нужно два класса: один класс унаследован от Block, второй от ItemBlock.

А по-подробнее можно?
 

timaxa007

Модератор
5,831
409
672
mastin.91 написал(а):
А по-подробнее можно?
Код:
	public static Block myBlock;
	
	@Mod.EventHandler
	public void preInit(FMLPreInitializationEvent event) {
		myBlock = new MyBlock();
		GameRegistry.registerBlock(myBlock, MyItemBlock.class, "myblock");
	}
Код:
public class MyBlock extends Block {

	public MyBlock() {
		super(Material.wood);
	}

}
Код:
public class MyItemBlock extends ItemBlock {

	public MyItemBlock(Block block) {
		super(block);
	}

	@SideOnly(Side.CLIENT)
	@Override
	public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean isAdv) {
		list.add("Bla-bla-bla...");
	}

}
 
timaxa007 написал(а):
mastin.91 написал(а):
А по-подробнее можно?
Код:
 public static Block myBlock;
 
 @Mod.EventHandler
 public void preInit(FMLPreInitializationEvent event) {
 myBlock = new MyBlock();
 GameRegistry.registerBlock(myBlock, MyItemBlock.class, "myblock");
 }
Код:
public class MyBlock extends Block {

 public MyBlock() {
 super(Material.wood);
 }

}
Код:
public class MyItemBlock extends ItemBlock {

 public MyItemBlock(Block block) {
 super(block);
 }

 @SideOnly(Side.CLIENT)
 @Override
 public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean isAdv) {
 list.add("Bla-bla-bla...");
 }

}

А импорты какие для
 super(block);
 

timaxa007

Модератор
5,831
409
672
Код:
import java.util.List;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
 
timaxa007 написал(а):
Код:
import java.util.List;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
Всё равно просит удалить (block) из скобок и  [font=Monaco, Consolas, Courier, monospace]@Override [/font]
 
Сверху