timaxa007
Модератор
- 5,831
- 409
- 676
PackFurniture
ProxyServer
ProxyClient
TabFurniturePack
BlockCnstorBlock
"addTag" добавляет NBT теги для ItemStack блока, если по-проще то когда блок находиться в инветаре игрока (или как дроп).
Чтобы NBT теги сохранили свои значения, когда блок будет установлен в мире, то мы их передадим и сохраним в NBT тег для TileEntity.
Передача NBT тегов происходит через "onBlockPlacedBy".
Чтобы сломаный блок передал из TileEntity для ItemStack, то выполняеться через "breakBlock". Это пока-что единственая функция в котором TileEntity не равна нулю. И так-же из-за его есть, типа бага - это дроп предмета, даже если игрок в креативе и даже не зависемо от материала блока (т.е. ломаеть рукой и выподает дроп, если даже блок материалом rock).
"getPickBlock" добавлена Forge'ем - больше нужен, кто в кретиве находиться, так как стандартный "idPicked" возращяет, только id блока без всяких NBT тегов, которые нужны для некоторых пользователей игры.
"setTextureName("planks");" нужно чтобы при разрушении блока частицы не были раскрашены в чёрно-фиолетовые цвета.
TileEntityCnstorBlock
"canUpdate()" forge'ское дополнение, при значении "false" наш TileEntity не update'тся.
"getDescriptionPacket" и "onDataPacket" трудно объяснить "простым языком" для чего он во-общем нужены, но я их использую.
RendererCnstorBlockModel
ItemRendererCnstorBlockModel
"is.getTagCompound() != null" бывает, что ItemStack может быть равен нулю, в моём случии он бывает только для иконки креативной вкладки.
TileTexture
GetColors
"GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);" - нужно чтобы прозрачные текстуры были прозрачными на нашей моделе.
Если не использовать "GL11.GL_LIGHTING", то при определёном наклонении камеры блок становиться темнее.
[youtube]AvS1PHTmxj8[/youtube]
Если не использовать "isOpaqueCube()" со значением "false", то блок становиться очень тёмным и в случии использовании прозрачной текстуры, то он становится типа WH. Если использовать, то блок не имеет тени м может вырасти травенной блок (если есть все условия для этого).
[youtube]Q2L_K4b1oBM[/youtube]
Что-то ещё добавить в написании не вижу пока-что смысла, так как возможно: где-то когда об этом было сказано, либо я не знаю что ещё до писать.
[merge_posts_bbcode]Добавлено: 22.06.2014 16:16:17[/merge_posts_bbcode]
Забыл:
И типа у меня все текстуры в общей папке текстур "timaxa007".
[merge_posts_bbcode]Добавлено: 22.06.2014 16:22:55[/merge_posts_bbcode]
У вас типа так:
... или так:
Зависит от вас.
Код:
@Mod (modid=PackInfo.MODID, name=PackInfo.MODNAME, version=PackInfo.VERSION)
@NetworkMod (clientSideRequired=true, serverSideRequired=true, versionBounds=PackInfo.VERSION)
public class PackFurniture {
@Instance(PackInfo.MODID) public static PackFurniture instance;
@SidedProxy(clientSide="mods.timaxa007.Pack.Furniture.ProxyClient", serverSide="mods.timaxa007.Pack.Furniture.ProxyServer")
public static ProxyServer proxy;
@EventHandler
public void init(FMLInitializationEvent event) {
proxy.init();
}
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
proxy.preInit(event);
}
}
Код:
public class ProxyServer {
public static CreativeTabs tabFurniturePack = new TabFurniturePack(CreativeTabs.getNextID(), "tabFurniturePack");
public static Block blockCnstorBlock;
public static int blockCnstorBlockblockID;
public static int renderBlockCnstorBlockModelID;
public void init() {
blockCnstorBlock = new BlockCnstorBlock(blockCnstorBlockblockID);
renderBlockCnstorBlockModelID = -1;
GameRegistry.registerBlock(blockCnstorBlock, "BlockCnstorBlock");
GameRegistry.registerTileEntity(TileEntityCnstorBlock.class, "TileEntityCnstorBlock");
}
public void preInit(FMLPreInitializationEvent event){
Configuration cfg = new Configuration(event.getSuggestedConfigurationFile());
cfg.load();
blockCnstorBlockblockID = cfg.getBlock("cnstorBlock", 2200).getInt();
cfg.save();
}
}
ProxyClient
Код:
public class ProxyClient extends ProxyServer {
@Override
public void init() {
super.init();
renderBlockCnstorBlockModelID = RenderingRegistry.getNextAvailableRenderId();
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCnstorBlock.class, new RendererCnstorBlockModel());
MinecraftForgeClient.registerItemRenderer(PackFurniture.proxy.blockCnstorBlock.blockID, new ItemRendererCnstorBlockModel());
}
public void preInit(FMLPreInitializationEvent event){
super.preInit(event);
}
}
TabFurniturePack
Код:
public class TabFurniturePack extends CreativeTabs {
public TabFurniturePack(int position, String tabID) {
super(position, tabID);
}
@SideOnly(Side.CLIENT)
public int getTabIconItemIndex() {
return PackFurniture.proxy.blockCnstorBlock.blockID;
}
}
BlockCnstorBlock
Код:
public class BlockCnstorBlock extends Block implements ITileEntityProvider {
public BlockCnstorBlock(int id) {
super(id, Material.wood);
setCreativeTab(PackFurniture.proxy.tabFurniturePack);
setHardness(1.0F);
setResistance(3.5F);
setStepSound(soundWoodFootstep);
setTextureName("planks");
setUnlocalizedName("cnstorBlock");
}
@Override
public TileEntity createNewTileEntity(World world) {return new TileEntityCnstorBlock();}
public int quantityDropped(Random radom) {return 0;}
public int getRenderType() {return PackFurniture.proxy.renderBlockCnstorBlockModelID;}
public boolean isOpaqueCube() {return false;}
//public boolean renderAsNormalBlock() {return false;}
//public int idPicked(World world, int x, int y, int z) {return 0;}
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
TileEntity te = world.getBlockTileEntity(x, y, z);
if (te != null && te instanceof TileEntityCnstorBlock) {
return addTag(((TileEntityCnstorBlock)te).getType(), ((TileEntityCnstorBlock)te).getColor());
} else {
return addTag(0, 0);
}
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack is){
TileEntity te = world.getBlockTileEntity(x, y, z);
NBTTagCompound nbt = is.getTagCompound();
if(te!=null && te instanceof TileEntityCnstorBlock && is.getTagCompound() != null){
if (is.getTagCompound().hasKey("Type")) {
((TileEntityCnstorBlock)te).setType(is.stackTagCompound.getInteger("Type"));
} else {
((TileEntityCnstorBlock)te).setType(0);
}
if (is.getTagCompound().hasKey("Color")) {
((TileEntityCnstorBlock)te).setColor(is.stackTagCompound.getInteger("Color"));
} else {
((TileEntityCnstorBlock)te).setColor(0);
}
} else {
((TileEntityCnstorBlock)te).setType(0);
((TileEntityCnstorBlock)te).setColor(0);
}
}
public void breakBlock(World world, int x, int y, int z, int oldID, int oldMeta) {
if (!world.isRemote) {
TileEntity te = world.getBlockTileEntity(x, y, z);
if (te != null && te instanceof TileEntityCnstorBlock) {
dropBlockAsItem_do(world, x, y, z, addTag(((TileEntityCnstorBlock)te).getType(), ((TileEntityCnstorBlock)te).getColor()));
} else {
dropBlockAsItem_do(world, x, y, z, addTag(0, 0));
}
}
super.breakBlock(world, x, y, z, oldID, oldMeta);
}
@SideOnly(Side.CLIENT)
public void getSubBlocks(int id, CreativeTabs table, List list){
for (int j = 0; j < TileTexture.texTest01.length; ++j) {
for (byte i = 0; i < 16; ++i) {
//int j = 74;
//int i = 14;
list.add(addTag(j, GetColors.getHexColors[i]));
}
}
//list.add(new ItemStack(id, 1, 0));
}
private static ItemStack addTag(int par1, int par2){
ItemStack is = new ItemStack(PackFurniture.proxy.blockCnstorBlock);
NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("Type", par1);
tag.setInteger("Color", par2);
is.setTagCompound(tag);
return is;
}
}
Чтобы NBT теги сохранили свои значения, когда блок будет установлен в мире, то мы их передадим и сохраним в NBT тег для TileEntity.
Передача NBT тегов происходит через "onBlockPlacedBy".
Чтобы сломаный блок передал из TileEntity для ItemStack, то выполняеться через "breakBlock". Это пока-что единственая функция в котором TileEntity не равна нулю. И так-же из-за его есть, типа бага - это дроп предмета, даже если игрок в креативе и даже не зависемо от материала блока (т.е. ломаеть рукой и выподает дроп, если даже блок материалом rock).
"getPickBlock" добавлена Forge'ем - больше нужен, кто в кретиве находиться, так как стандартный "idPicked" возращяет, только id блока без всяких NBT тегов, которые нужны для некоторых пользователей игры.
"setTextureName("planks");" нужно чтобы при разрушении блока частицы не были раскрашены в чёрно-фиолетовые цвета.
TileEntityCnstorBlock
Код:
public class TileEntityCnstorBlock extends TileEntity {
private int type;
private int color;
public TileEntityCnstorBlock() {
}
public int getType() {return type;}
public int getColor() {return color;}
public void setType(int i) {type = i;}
public void setColor(int i) {color = i;}
@Override
public void readFromNBT(NBTTagCompound nbt){
super.readFromNBT(nbt);
if (nbt.hasKey("Type")) {type = nbt.getInteger("Type");}
if (nbt.hasKey("Color")) {color = nbt.getInteger("Color");}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("Type", type);
nbt.setInteger("Color", color);
}
public boolean canUpdate() {return false;}
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
writeToNBT(nbt);
return new Packet132TileEntityData(xCoord, yCoord, zCoord, 0, nbt);
}
public void onDataPacket(INetworkManager net, Packet132TileEntityData Packet) {
readFromNBT(Packet.data);
}
}
"getDescriptionPacket" и "onDataPacket" трудно объяснить "простым языком" для чего он во-общем нужены, но я их использую.
RendererCnstorBlockModel
Код:
public class RendererCnstorBlockModel extends TileEntitySpecialRenderer {
public RendererCnstorBlockModel() {
}
public void renderTileEntityAt(TileEntity tileEntity, double d1, double d2, double d3, float f) {
renderTileEntity((TileEntityCnstorBlock)tileEntity, d1, d2, d3, f);
}
public void renderTileEntity(TileEntityCnstorBlock tileEntity, double d1, double d2, double d3, float f) {
//int meta = tileEntity.getBlockMetadata();
int tex = 0;
int clr = 0xFFFFFF;
if (tileEntity != null) {
tex = tileEntity.getType();
clr = tileEntity.getColor();
}
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glTranslated(d1, d2, d3);
bindTexture(new ResourceLocation(TileTexture.texTest01[tex][0], TileTexture.texTest01[tex][1]));
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setColorOpaque_I(clr);
//Down
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 1.0D, 0.0D);
//Up
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0D, 1.0D);
//North
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 0.0D, 0.0D);
//South
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 1.0D, 1.0D);
//West
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
//East
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 0.0D, 0.0D);
tessellator.draw();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
}
}
ItemRendererCnstorBlockModel
Код:
public class ItemRendererCnstorBlockModel implements IItemRenderer {
public ItemRendererCnstorBlockModel() {
}
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
return true;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
return true;
}
@Override
public void renderItem(ItemRenderType type, ItemStack is, Object... data) {
//int tex=is.getItemDamage();
int tex = 0;
int clr = 0xFFFFFF;
if (is.getTagCompound() != null) {
if (is.getTagCompound().hasKey("Type")) {
tex = is.getTagCompound().getInteger("Type");
}
if (is.getTagCompound().hasKey("Color")) {
clr = is.getTagCompound().getInteger("Color");
}
}
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_LIGHTING);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(TileTexture.texTest01[tex][0], TileTexture.texTest01[tex][1]));
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setColorOpaque_I(clr);
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 1.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 1.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 0.0D, 0.0D);
tessellator.draw();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
}
}
TileTexture
Код:
public class TileTexture {
public static final String texTest01[][] = new String[][] {
{"timaxa007", "textures/blocks/woodFrame.png"},
{"minecraft", "textures/blocks/anvil_base.png"},
{"minecraft", "textures/blocks/bedrock.png"},
{"minecraft", "textures/blocks/brick.png"},
{"minecraft", "textures/blocks/clay.png"},
{"minecraft", "textures/blocks/coal_block.png"},
{"minecraft", "textures/blocks/coal_ore.png"},
{"minecraft", "textures/blocks/cobblestone.png"},
{"minecraft", "textures/blocks/cobblestone_mossy.png"},
{"minecraft", "textures/blocks/diamond_block.png"},
{"minecraft", "textures/blocks/diamond_ore.png"},
{"minecraft", "textures/blocks/dirt.png"},
{"minecraft", "textures/blocks/emerald_block.png"},
{"minecraft", "textures/blocks/emerald_ore.png"},
{"minecraft", "textures/blocks/end_stone.png"},
{"minecraft", "textures/blocks/glass.png"},
{"minecraft", "textures/blocks/glowstone.png"},
{"minecraft", "textures/blocks/gold_block.png"},
{"minecraft", "textures/blocks/gold_ore.png"},
{"minecraft", "textures/blocks/gravel.png"},
{"minecraft", "textures/blocks/hardened_clay.png"},
{"minecraft", "textures/blocks/hardened_clay_stained_white.png"},
{"minecraft", "textures/blocks/hay_block_side.png"},
{"minecraft", "textures/blocks/ice.png"},
{"minecraft", "textures/blocks/iron_bars.png"},
{"minecraft", "textures/blocks/iron_block.png"},
{"minecraft", "textures/blocks/iron_ore.png"},
{"minecraft", "textures/blocks/lapis_block.png"},
{"minecraft", "textures/blocks/lapis_ore.png"},
{"minecraft", "textures/blocks/log_birch.png"},
{"minecraft", "textures/blocks/log_jungle.png"},
{"minecraft", "textures/blocks/log_oak.png"},
{"minecraft", "textures/blocks/log_spruce.png"},
{"minecraft", "textures/blocks/melon_side.png"},
{"minecraft", "textures/blocks/mushroom_block_inside.png"},
{"minecraft", "textures/blocks/mushroom_block_skin_brown.png"},
{"minecraft", "textures/blocks/mushroom_block_skin_red.png"},
{"minecraft", "textures/blocks/mushroom_block_skin_stem.png"},
{"minecraft", "textures/blocks/nether_brick.png"},
{"minecraft", "textures/blocks/netherrack.png"},
{"minecraft", "textures/blocks/noteblock.png"},
{"minecraft", "textures/blocks/obsidian.png"},
{"minecraft", "textures/blocks/planks_birch.png"},
{"minecraft", "textures/blocks/planks_jungle.png"},
{"minecraft", "textures/blocks/planks_oak.png"},
{"minecraft", "textures/blocks/planks_spruce.png"},
{"minecraft", "textures/blocks/pumpkin_side.png"},
{"minecraft", "textures/blocks/quartz_block_bottom.png"},
{"minecraft", "textures/blocks/quartz_block_side.png"},
{"minecraft", "textures/blocks/redstone_block.png"},
{"minecraft", "textures/blocks/redstone_ore.png"},
{"minecraft", "textures/blocks/sand.png"},
{"minecraft", "textures/blocks/sandstone_bottom.png"},
{"minecraft", "textures/blocks/sandstone_top.png"},
{"minecraft", "textures/blocks/snow.png"},
{"minecraft", "textures/blocks/soul_sand.png"},
{"minecraft", "textures/blocks/sponge.png"},
{"minecraft", "textures/blocks/stone.png"},
{"minecraft", "textures/blocks/stone_slab_top.png"},
{"minecraft", "textures/blocks/stonebrick.png"},
{"minecraft", "textures/blocks/stonebrick_carved.png"},
{"minecraft", "textures/blocks/stonebrick_cracked.png"},
{"minecraft", "textures/blocks/stonebrick_mossy.png"},
{"minecraft", "textures/blocks/wool_colored_white.png"},
{"timaxa007", "textures/blocks/woodFrame.png"}
};
}
GetColors
Код:
public class GetColors {
public static final int[] getHexColors = new int[] {
0x111111, // 0 Black
0x0000FF, // 1 Blue
0x884400, // 2 Brown
0x008888, // 3 Cyan
0x444444, // 4 Gray
0x008800, // 5 Green
0x00FFFF, // 6 Light-Blue
0xBBBBBB, // 7 Light-Gray
0x00FF00, // 8 Light-Green
0xFF00FF, // 9 Magenta
0xFF8800, //10 Orange
0xFF8888, //11 Pink
0x8800FF, //12 Purple
0xFF0000, //13 Red
0xFFFFFF, //14 White
0xFFFF00 //15 Yellow
};
}
"GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);" - нужно чтобы прозрачные текстуры были прозрачными на нашей моделе.
Если не использовать "GL11.GL_LIGHTING", то при определёном наклонении камеры блок становиться темнее.
[youtube]AvS1PHTmxj8[/youtube]
Если не использовать "isOpaqueCube()" со значением "false", то блок становиться очень тёмным и в случии использовании прозрачной текстуры, то он становится типа WH. Если использовать, то блок не имеет тени м может вырасти травенной блок (если есть все условия для этого).
[youtube]Q2L_K4b1oBM[/youtube]
Что-то ещё добавить в написании не вижу пока-что смысла, так как возможно: где-то когда об этом было сказано, либо я не знаю что ещё до писать.
[merge_posts_bbcode]Добавлено: 22.06.2014 16:16:17[/merge_posts_bbcode]
Забыл:
Код:
public class PackInfo {
public static final String MODID="03furniturepack";
public static final String MODNAME="FurniturePack";
public static final String VERSION="0.1a";
}
[merge_posts_bbcode]Добавлено: 22.06.2014 16:22:55[/merge_posts_bbcode]
У вас типа так:
Код:
{PackInfo.MODID, "textures/blocks/woodFrame.png"}
Код:
{ModInfo.MODID, "textures/blocks/woodFrame.png"}