- 57
- 2
- 0
Здравствуйте, форумчане! Всех с Новым 2020 Годом!
У меня есть проблема с отображением текстур блока в инвентаре, у которого есть мета (в мир всё ставится нормально, с текстурой). Всё делал по гайду @Maxik. Во время компиляции в консоли нашел это:
Мне кажется, что гайд немного устарел (слова deprecated api). И вот еще, нелокализованное имя выглядит как tile.structblock.cobblestone.name и на втором блоке tile.structblock.mossy_cobblestone.name. Хотя, по моей задумке, должно быть tile.structblock.0.name (вместо нуля 1, 2 и т.д.) Помогите, пожалуйста, с решением проблемы. Весь код прилагается.
У меня есть проблема с отображением текстур блока в инвентаре, у которого есть мета (в мир всё ставится нормально, с текстурой). Всё делал по гайду @Maxik. Во время компиляции в консоли нашел это:
Note: C:\Users\sasha\OneDrive\Рабочий стол\Ultimate Technology\root\build\sources\main\java\com\sqcode\utech\blocks\StructureBlock.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Мне кажется, что гайд немного устарел (слова deprecated api). И вот еще, нелокализованное имя выглядит как tile.structblock.cobblestone.name и на втором блоке tile.structblock.mossy_cobblestone.name. Хотя, по моей задумке, должно быть tile.structblock.0.name (вместо нуля 1, 2 и т.д.) Помогите, пожалуйста, с решением проблемы. Весь код прилагается.
Код метаблока:
package com.sqcode.utech.blocks;
import com.sqcode.utech.Main;
import com.sqcode.utech.items.ItemsRegister;
import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.NonNullList;
public class StructureBlock extends Block
{
public static final PropertyEnum<StructureBlock.EnumType> VARIANT = PropertyEnum.<StructureBlock.EnumType>create("variant", StructureBlock.EnumType.class);
public StructureBlock(String name, Material material, int picklvl)
{
super(material);
setRegistryName(name);
setUnlocalizedName(name);
setHardness(5.5F);
setHarvestLevel("pickaxe", picklvl);
setCreativeTab(Main.TAB);
setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, StructureBlock.EnumType.REFRACTORY_BRICKS));
ItemBlockStructure ibs = new ItemBlockStructure(this);
BlocksRegister.BLOCKS.add(this);
ItemsRegister.ITEMS.add(ibs.setRegistryName(this.getRegistryName()));
}
public int damageDropped(IBlockState state)
{
return ((StructureBlock.EnumType)state.getValue(VARIANT)).getMetadata();
}
public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items)
{
for(StructureBlock.EnumType enumtype : StructureBlock.EnumType.values())
{
items.add(new ItemStack(this, 1, enumtype.getMetadata()));
}
}
public IBlockState getStateFromMeta(int meta)
{
return this.getDefaultState().withProperty(VARIANT, StructureBlock.EnumType.byMetadata(meta));
}
public int getMetaFromState(IBlockState state)
{
return ((StructureBlock.EnumType)state.getValue(VARIANT)).getMetadata();
}
protected BlockStateContainer createBlockState()
{
return new BlockStateContainer(this, new IProperty[]{VARIANT});
}
public static enum EnumType implements IStringSerializable
{
REFRACTORY_BRICKS(0, MapColor.BROWN, "0", false),
BRONZE(1, MapColor.ORANGE_STAINED_HARDENED_CLAY, "1", false);
private static final StructureBlock.EnumType[] META_LOOKUP = new StructureBlock.EnumType[values().length];
private final int meta;
private final String name;
private final String unlocalizedName;
private final MapColor mapColor;
private final boolean isNatural;
private EnumType(int meta, MapColor mapColor, String name, boolean isNatural)
{
this(meta, mapColor, name, name, isNatural);
}
private EnumType(int meta, MapColor mapColor, String name, String uname, boolean isNatural)
{
this.meta = meta;
this.name = name;
this.unlocalizedName = uname;
this.mapColor = mapColor;
this.isNatural = isNatural;
}
public int getMetadata()
{
return this.meta;
}
public MapColor getMapColor()
{
return this.mapColor;
}
public String toString()
{
return this.name;
}
public static StructureBlock.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;
}
public boolean isNatural()
{
return this.isNatural;
}
static
{
for(StructureBlock.EnumType enumtype : values())
{
META_LOOKUP[enumtype.getMetadata()] = enumtype;
}
}
}
}
ItemBlock метаблока:
package com.sqcode.utech.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.BlockWall.EnumType;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemMultiTexture;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
public class ItemBlockStructure extends ItemMultiTexture
{
public ItemBlockStructure(Block block)
{
super(block, block, new String[] {"refractory_bricks", "bronze"});
setHasSubtypes(true);
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items)
{
if(this.isInCreativeTab(tab))
{
this.block.getSubBlocks(tab, items);
}
}
@Override
public String getUnlocalizedName(ItemStack stack)
{
return super.getUnlocalizedName() + "." + EnumType.byMetadata(stack.getMetadata()).getName();
}
}
Регистрация моделей:
package com.sqcode.utech.blocks;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
public class RegMetaBlocks
{
@SubscribeEvent
public void registerMetaBlocks(ModelRegistryEvent event)
{
register(BlocksRegister.STRUCTURE_BLOCK);
}
public void register(Block block)
{
for(StructureBlock.EnumType type : StructureBlock.EnumType.values())
{
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), type.getMetadata(), new ModelResourceLocation(block.getRegistryName() + "_" + type.getName(), "inventory"));
}
}
}
ClientProxy:
package com.sqcode.utech.proxy;
import com.sqcode.utech.blocks.RegMetaBlocks;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
public class ClientProxy extends CommonProxy
{
@EventHandler
public void preInit(FMLInitializationEvent event)
{
MinecraftForge.EVENT_BUS.register(new RegMetaBlocks());
}
public void registerItemRenderer(Item item, int meta, String id)
{
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
}
}
BlocksRegister:
package com.sqcode.utech.blocks;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
public class BlocksRegister
{
public static final List<Block> BLOCKS = new ArrayList<Block>();
public static final Block CHALCOPYRITE = new OreBase("chalcopyrite", Material.ROCK, 1, "CuFeS2");
public static final Block MALACHITE = new OreBase("malachite", Material.ROCK, 2, "CuHCO4");
public static final Block TETRAHEDRITE = new OreBase("tetrahedrite", Material.ROCK, 2, "Cu3SbS3");
public static final Block COVELLITE = new OreBase("covellite", Material.ROCK, 1, "CuS");
public static final Block STRUCTURE_BLOCK = new StructureBlock("structblock", Material.ROCK, 1);
}