- 917
- 22
- 332
На самом деле, если у кого-то есть советы на более низкие версии, всё равно посоветуёте.
Вчера разбирался с метой, и всё вроде шло хорошо... В качестве примера брал sandstone, eclipse не ругался. А потом я запустил игру, и увидел в инвентаре три одинаковых блока, полностью идентичных, даже если нажать F3 + H. Что я делаю не так:ermm:?.. Код я вроде как и понял, но, как бы это сказать... частями. То-есть я могу сказать что делает та или иная часть кода, но как они работают вместе, понять не могу.
Объясните "умному" человеку, что да как!
Спасибо!
Блок:
Код:
public class Test extends Block {
public static final PropertyEnum<Test.EnumType> TYPE = PropertyEnum.<Test.EnumType>create("type", Test.EnumType.class);
public Test() {
super(Material.ROCK);
setDefaultState(this.blockState.getBaseState().withProperty(TYPE, Test.EnumType.DEFAULT));
setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
setRegistryName("test");
GameRegistry.register(this);
GameRegistry.register(new ItemBlock(this), this.getRegistryName());
setUnlocalizedName(Reference.MODID + ":" + "test");
}
public int damageDropped(IBlockState state) {
return ((Test.EnumType)state.getValue(TYPE)).getMetadata();
}
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item item, CreativeTabs tab, List<ItemStack> list) {
for (Test.EnumType test$enumtype : Test.EnumType.values()) {
list.add(new ItemStack(item, 1, test$enumtype.getMetadata()));
}
}
public MapColor getMapColor(IBlockState state) {
return MapColor.SAND;
}
public IBlockState getStateFromMeta(int meta) {
return this.getDefaultState().withProperty(TYPE, Test.EnumType.byMetadata(meta));
}
public int getMetaFromState(IBlockState state) {
return ((Test.EnumType)state.getValue(TYPE)).getMetadata();
}
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] {TYPE});
}
public static enum EnumType implements IStringSerializable {
DEFAULT(0, "test", "default"),
CHISELED(1, "one_test", "one"),
SMOOTH(2, "four_test", "four");
private static final Test.EnumType[] META_LOOKUP = new Test.EnumType[values().length];
private final int metadata;
private final String name;
private final String unlocalizedName;
private EnumType(int meta, String name, String unlocalizedName) {
this.metadata = meta;
this.name = name;
this.unlocalizedName = unlocalizedName;
}
public int getMetadata() {
return this.metadata;
}
public String toString() {
return name;
}
public static Test.EnumType byMetadata(int meta) {
if (meta < 0 || meta >= META_LOOKUP.length) {
meta = 0;
}
return META_LOOKUP[meta];
}
public String getName() {
return this.name;
}
public String getUnlocalizedName() {
return this.unlocalizedName;
}
static {
for (Test.EnumType test$enumtype : values()) {
META_LOOKUP[test$enumtype.getMetadata()] = test$enumtype;
}
}
}
}
Код:
public class RegistryBlock {
public static Block Test = new Test();
@Nullable
private static Block getRegisteredBlock(Block block) {
GameRegistry.register(block);
return block;
}
public static void initBlocks() {
getRegisteredBlock(Test);
}
}
Кстати, регистратор блоков зареган в commonProxy, а commonProxy в главном классе. Так что здесь всё норм. Под словом "идентичных" я имел в виду одинаковых, без текстуры
[merge_posts_bbcode]Добавлено: 26.07.2016 21:09:43[/merge_posts_bbcode]
Может быть это и не нужно, но всё же:
registerRender
Код:
public class RSBlockRender {
public static void registerBlockRender() {
regBlock(RegistryBlock.Test, 0);
regBlock(RegistryBlock.Test, 1);
regBlock(RegistryBlock.Test, 2);
}
public static void regBlock(Block block, int meta) {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher()
.register(Item.getItemFromBlock(block), meta, new ModelResourceLocation
(block.getRegistryName(), "inventory"));
}
}