- 1,057
- 50
- 234
День добрый формучане.
Возникла проблема с метадатой блоков, а именно: Рендер в инвентаре.
Собственно:
Есть блок с ENUM и параметрами.
Есть рега вариантов
ClientUtil.addVariant(GalaxySpace.MODID, name, variants);
В игре установленные блоки отображаются как надо, а вот в инвентаре не хотят.
Проверял видит ли json файлы - да, видит. Если меняешь название файла - он пишет что нет такого json, возвращаешь - не пишет.
Рега Json тоже есть, вызывается из Init ядра:
Проверял все это на обычных блоках, без ENUM и вариантов, работает прекрасно, блок рендерится. А вот с вариантами такая дичь. Что делать?
Возникла проблема с метадатой блоков, а именно: Рендер в инвентаре.
Собственно:
Есть блок с ENUM и параметрами.
Java:
public class BlockFutureGlasses extends BlockGlass implements ISortableBlock {
public static final PropertyEnum<EnumBlock> BASIC_TYPE = PropertyEnum.create("typefutureglass", EnumBlock.class);
public BlockFutureGlasses()
{
super(Material.GLASS, false);
this.setUnlocalizedName("futureglass");
this.setSoundType(SoundType.GLASS);
}
@Override
public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos)
{
return MapColor.AIR;
}
@SideOnly(Side.CLIENT)
@Override
public CreativeTabs getCreativeTabToDisplayOn()
{
return GSCreativeTabs.GSBlocksTab;
}
@SideOnly(Side.CLIENT)
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> list)
{
for (EnumBlock blockBasic : EnumBlock.values())
{
list.add(new ItemStack(this, 1, blockBasic.getMeta()));
}
}
@Override
public IBlockState getStateFromMeta(int meta)
{
return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlock.byMetadata(meta));
}
@Override
public int getMetaFromState(IBlockState state) {
return ((EnumBlock) state.getValue(BASIC_TYPE)).getMeta();
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state));
}
@Override
protected BlockStateContainer createBlockState()
{
return new BlockStateContainer(this, BASIC_TYPE);
}
@Override
public EnumSortCategoryBlock getCategory(int meta) {
return EnumSortCategoryBlock.GENERAL;
}
@Override
@SideOnly(Side.CLIENT)
public BlockRenderLayer getBlockLayer()
{
return BlockRenderLayer.TRANSLUCENT;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public enum EnumBlock implements IStringSerializable
{
F_GLASS_BLACK(0, "black"),
F_GLASS_RED(1, "red"),
F_GLASS_BLUE(2, "blue"),
F_GLASS_BROWN(3, "brown"),
F_GLASS_CYAN(4, "cyan"),
F_GLASS_GRAY(5, "gray"),
F_GLASS_GREEN(6, "green"),
F_GLASS_LIGHTBLUE(7, "lightblue"),
F_GLASS_LIGHTGRAY(8, "lightgray"),
F_GLASS_LIME(9, "lime"),
F_GLASS_MAGNETA(10, "magneta"),
F_GLASS_ORANGE(11, "orange"),
F_GLASS_PINK(12, "pink"),
F_GLASS_PURPLE(13, "purple"),
F_GLASS_WHITE(14, "white"),
F_GLASS_YELLOW(15, "yellow");
private final int meta;
private final String name;
private EnumBlock(int meta, String name)
{
this.meta = meta;
this.name = name;
}
public int getMeta() { return this.meta; }
public static EnumBlock byMetadata(int meta) { return values()[meta]; }
@Override
public String getName() { return this.name; }
}
}
Есть рега вариантов
ClientUtil.addVariant(GalaxySpace.MODID, name, variants);
Java:
@EventBusSubscriber(modid = MODID)
public static class RegistrationHandler
{
@SubscribeEvent
public static void registerModels(ModelRegistryEvent event) {
proxy.registerVariants();
}
}
private static void addVariants()
{
addCoreVariant("futureglass", "futureglass_black", "futureglass_red", "blue");
}
public static void addVariant(String modID, String name, String... variants)
{
// Item itemBlockVariants = GameRegistry.findItem(modID, name);
Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(modID, name));
ResourceLocation[] variants0 = new ResourceLocation[variants.length];
for (int i = 0; i < variants.length; ++i)
{
variants0[i] = new ResourceLocation(modID + ":" + variants[i]);
}
ModelBakery.registerItemVariants(itemBlockVariants, variants0);
}
В игре установленные блоки отображаются как надо, а вот в инвентаре не хотят.
Проверял видит ли json файлы - да, видит. Если меняешь название файла - он пишет что нет такого json, возвращаешь - не пишет.
Рега Json тоже есть, вызывается из Init ядра:
Java:
for (BlockFutureGlasses.EnumBlock blockBasic : BlockFutureGlasses.EnumBlock.values())
{
ClientUtil.registerBlockJson(GalaxySpace.TEXTURE_PREFIX, FUTURE_GLASS, blockBasic.getMeta(), blockBasic.getName());
}
Проверял все это на обычных блоках, без ENUM и вариантов, работает прекрасно, блок рендерится. А вот с вариантами такая дичь. Что делать?