Перейти к содержимому


Фотография

[Tutorial] [Forge] Основы программирования Minecraft 1.4.6


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 345

#241 ROBOCOP

ROBOCOP

    Странник

  • Пользователи
  • Сообщений: 1

Написал 28.12.2012 - 00:24

Решил сделать свою печку с Forge но не знаю как тут GUI своё добавить, вот BlockElectricFurnace.java
par5EntityPlayer.displayGUIFurnace(var10); //вот ошибка
package net[paste][/paste]new[paste][/paste]src;import java[paste][/paste]util[paste][/paste]Random;import cpw[paste][/paste]mods[paste][/paste]fml[paste][/paste]common[paste][/paste]network[paste][/paste]FMLNetworkHandler;import net[paste][/paste]minecraft[paste][/paste]src[paste][/paste]*;public class BlockElectricFurnace extends BlockContainer{/**         * Is the random generator used by furnace to drop the inventory contents in random directions[paste][/paste]         */private Random furnaceRand = new Random();/** True if this is an active furnace, false if idle */private final boolean isActive;/**         * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the         * furnace block changes from idle to active and vice-versa[paste][/paste]         */private static boolean keepFurnaceInventory = false;protected BlockElectricFurnace(int par1, boolean par2){         super(par1, Material[paste][/paste]rock);         this[paste][/paste]isActive = par2;         this[paste][/paste]blockIndexInTexture = 45;         this[paste][/paste]setCreativeTab(CreativeTabs[paste][/paste]tabDecorations);}/**         * Returns the ID of the items to drop on destruction[paste][/paste]         */public int idDropped(int par1, Random par2Random, int par3){         return MeModBase[paste][/paste]electricFurnaceIdle[paste][/paste]blockID;}/**         * Called whenever the block is added into the world[paste][/paste] Args: world, x, y, z         */public void onBlockAdded(World par1World, int par2, int par3, int par4){         super[paste][/paste]onBlockAdded(par1World, par2, par3, par4);         this[paste][/paste]setDefaultDirection(par1World, par2, par3, par4);}/**         * set a blocks direction         */private void setDefaultDirection(World par1World, int par2, int par3, int par4){         if (!par1World[paste][/paste]isRemote)         {                 int var5 = par1World[paste][/paste]getBlockId(par2, par3, par4 - 1);                 int var6 = par1World[paste][/paste]getBlockId(par2, par3, par4 + 1);                 int var7 = par1World[paste][/paste]getBlockId(par2 - 1, par3, par4);                 int var8 = par1World[paste][/paste]getBlockId(par2 + 1, par3, par4);                 byte var9 = 3;                 if (Block[paste][/paste]opaqueCubeLookup[var5] && !Block[paste][/paste]opaqueCubeLookup[var6])                 {                         var9 = 3;                 }                 if (Block[paste][/paste]opaqueCubeLookup[var6] && !Block[paste][/paste]opaqueCubeLookup[var5])                 {                         var9 = 2;                 }                 if (Block[paste][/paste]opaqueCubeLookup[var7] && !Block[paste][/paste]opaqueCubeLookup[var8])                 {                         var9 = 5;                 }                 if (Block[paste][/paste]opaqueCubeLookup[var8] && !Block[paste][/paste]opaqueCubeLookup[var7])                 {                         var9 = 4;                 }                 par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, var9);         }}/**         * A randomly called display update to be able to add particles or other items for display         */public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random){         if (this[paste][/paste]isActive)         {                 int var6 = par1World[paste][/paste]getBlockMetadata(par2, par3, par4);                 float var7 = (float)par2 + 0[paste][/paste]5F;                 float var8 = (float)par3 + 0[paste][/paste]0F + par5Random[paste][/paste]nextFloat() * 6[paste][/paste]0F / 16[paste][/paste]0F;                 float var9 = (float)par4 + 0[paste][/paste]5F;                 float var10 = 0[paste][/paste]52F;                 float var11 = par5Random[paste][/paste]nextFloat() * 0[paste][/paste]6F - 0[paste][/paste]3F;                 if (var6 == 4)                 {                         par1World[paste][/paste]spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                         par1World[paste][/paste]spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                 }                 else if (var6 == 5)                 {                         par1World[paste][/paste]spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                         par1World[paste][/paste]spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                 }                 else if (var6 == 2)                 {                         par1World[paste][/paste]spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                         par1World[paste][/paste]spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                 }                 else if (var6 == 3)                 {                         par1World[paste][/paste]spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                         par1World[paste][/paste]spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0[paste][/paste]0D, 0[paste][/paste]0D, 0[paste][/paste]0D);                 }         }}/**         * Returns the block texture based on the side being looked at[paste][/paste] Args: side         */public int getBlockTextureFromSide(int par1){         return par1 == 1 ? this[paste][/paste]blockIndexInTexture + 17 : (par1 == 0 ? this[paste][/paste]blockIndexInTexture + 17 : (par1 == 3 ? this[paste][/paste]blockIndexInTexture - 1 : this[paste][/paste]blockIndexInTexture));}/**         * Called upon block activation (right click on the block[paste][/paste])         */public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9){         if (par1World[paste][/paste]isRemote)         {                 return true;         }         else         {         TileEntityElectricFurnace var10 = (TileEntityElectricFurnace)par1World[paste][/paste]getBlockTileEntity(par2, par3, par4);         if (var10 != null)                 {                               par5EntityPlayer[paste][/paste]displayGUIFurnace(var10);                  }                 return true;         }}/**         * Update which block ID the furnace is using depending on whether or not it is burning         */public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4){         int var5 = par1World[paste][/paste]getBlockMetadata(par2, par3, par4);         TileEntity var6 = par1World[paste][/paste]getBlockTileEntity(par2, par3, par4);         keepFurnaceInventory = true;         if (par0)         {                 par1World[paste][/paste]setBlockWithNotify(par2, par3, par4, MeModBase[paste][/paste]electricFurnaceActive[paste][/paste]blockID);         }         else         {                 par1World[paste][/paste]setBlockWithNotify(par2, par3, par4, MeModBase[paste][/paste]electricFurnaceIdle[paste][/paste]blockID);         }         keepFurnaceInventory = false;         par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, var5);         if (var6 != null)         {                 var6[paste][/paste]validate();                 par1World[paste][/paste]setBlockTileEntity(par2, par3, par4, var6);         }}/**         * Returns a new instance of a block's tile entity class[paste][/paste] Called on placing the block[paste][/paste]         */public TileEntity createNewTileEntity(World par1World){         return new TileEntityElectricFurnace();}/**         * Called when the block is placed in the world[paste][/paste]         */public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving){         int var6 = MathHelper[paste][/paste]floor_double((double)(par5EntityLiving[paste][/paste]rotationYaw * 4[paste][/paste]0F / 360[paste][/paste]0F) + 0[paste][/paste]5D) & 3;         if (var6 == 0)         {                 par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, 2);         }         if (var6 == 1)         {                 par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, 5);         }         if (var6 == 2)         {                 par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, 3);         }         if (var6 == 3)         {                 par1World[paste][/paste]setBlockMetadataWithNotify(par2, par3, par4, 4);         }}/**         * ejects contained items into the world, and notifies neighbours of an update, as appropriate         */public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6){         if (!keepFurnaceInventory)         {                 TileEntityFurnace var7 = (TileEntityFurnace)par1World[paste][/paste]getBlockTileEntity(par2, par3, par4);                 if (var7 != null)                 {                         for (int var8 = 0; var8 < var7[paste][/paste]getSizeInventory(); ++var8)                         {                                 ItemStack var9 = var7[paste][/paste]getStackInSlot(var8);                                 if (var9 != null)                                 {                                         float var10 = this[paste][/paste]furnaceRand[paste][/paste]nextFloat() * 0[paste][/paste]8F + 0[paste][/paste]1F;                                         float var11 = this[paste][/paste]furnaceRand[paste][/paste]nextFloat() * 0[paste][/paste]8F + 0[paste][/paste]1F;                                         float var12 = this[paste][/paste]furnaceRand[paste][/paste]nextFloat() * 0[paste][/paste]8F + 0[paste][/paste]1F;                                         while (var9[paste][/paste]stackSize > 0)                                         {                                                 int var13 = this[paste][/paste]furnaceRand[paste][/paste]nextInt(21) + 10;                                                 if (var13 > var9[paste][/paste]stackSize)                                                 {                                                         var13 = var9[paste][/paste]stackSize;                                                 }                                                 var9[paste][/paste]stackSize -= var13;                                                 EntityItem var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9[paste][/paste]itemID, var13, var9[paste][/paste]getItemDamage()));                                                 if (var9[paste][/paste]hasTagCompound())                                                 {                                                         var14[paste][/paste]item[paste][/paste]setTagCompound((NBTTagCompound)var9[paste][/paste]getTagCompound()[paste][/paste]copy());                                                 }                                                 float var15 = 0[paste][/paste]05F;                                                 var14[paste][/paste]motionX = (double)((float)this[paste][/paste]furnaceRand[paste][/paste]nextGaussian() * var15);                                                 var14[paste][/paste]motionY = (double)((float)this[paste][/paste]furnaceRand[paste][/paste]nextGaussian() * var15 + 0[paste][/paste]2F);                                                 var14[paste][/paste]motionZ = (double)((float)this[paste][/paste]furnaceRand[paste][/paste]nextGaussian() * var15);                                                 par1World[paste][/paste]spawnEntityInWorld(var14);                                         }                                 }                         }                 }         }         super[paste][/paste]breakBlock(par1World, par2, par3, par4, par5, par6);}public int getBlockTextureFromSideAndMetadata(int side, int metadata){         if(side == 0)                 return 12;         else if(side == 1)                 return 12;         else if((side == 2 && metadata == 2) || (side == 5 && metadata == 3) || (side == 3 && metadata == 0) || (side == 4 && metadata == 1))                 return 3;         else                 return 11;        }public String getTextureFile(){                                 return "/net/textures/terrain_new[paste][/paste]png";}}


#242 KaMiKaZa

KaMiKaZa

    Добытчик дерева

  • Пользователи
  • Сообщений: 184

Написал 28.12.2012 - 04:37

По окончанию второго урока компилировал и получил краш по запуску =_=

М... Которая версия клиента, и есть ли ошибки в Eclipse?

===

Алсо, перерисовал пустой terrain под свои нужды. Держите, если кому-нибудь нужно:
Скрытый текст


#243 Обалдуй

Обалдуй

    Зачарователь

  • Пользователи
  • Сообщений: 1898
  • Ник в Minecraft:
    resursator
  • Откуда: Нижний Новгород

Написал 29.12.2012 - 14:11

Скрытый текст
Скачал я, например, АПИ ИК2, куда его надо положить?

76561198029398229.pngAddFriend.png
Список модов на моей сборке.


#244 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 29.12.2012 - 16:16

Знаешь, права на такие!! глупые ошибки не имеет ни один программист(если только начинающий)

Смешно.

Для форумчан можно просто Олег.

Скрытый текст

#245 Igorkat

Igorkat

    Странник

  • Пользователи
  • Сообщений: 42

Написал 03.01.2013 - 18:57

Повторю свой вопрос: как добавить свойкрафт в стойку для зельеварения?

#246 Allxy

Allxy

    Добытчик камня

  • Пользователи
  • Сообщений: 206

Написал 03.01.2013 - 21:12

Знаешь, права на такие!! глупые ошибки не имеет ни один программист(если только начинающий)

Смешно.

Да да. Хорошей программой не может быть та программа, которая написана без единой ошибки.
Ну прям не смог пройти мимо :3

Изображение

Скрытый текст


#247 kitchip

kitchip

    Странник

  • Пользователи
  • Сообщений: 5

Написал 05.01.2013 - 22:49

От меня сейчас полетят тучи вопросов т.к. мои познания в этом деле примерно равны нулю.1. Когда скачиваю FML есть разница между "javadoc","src","universal" и какой следует скачивать?2. Обыскался файла install.bat , где он лежит?

#248 TheApKoT

TheApKoT

    Добытчик угля

  • Пользователи
  • Сообщений: 363
  • Откуда: The Earth Core

Написал 05.01.2013 - 23:52

Обновлено до 1.4.6. ===
1[paste][/paste] Когда скачиваю FML есть разница между "javadoc","src","universal" и какой следует скачивать?2[paste][/paste] Обыскался файла install[paste][/paste]bat , где он лежит?
1. Да. Javadoc - "подсказки", src - сырцы(они и нужны), universal - скомпилированная версия форджа, для установки на клиент. 2. (папка с MCP)\forge\install.bat.
Скрытый текст

#249 kitchip

kitchip

    Странник

  • Пользователи
  • Сообщений: 5

Написал 06.01.2013 - 12:29

Спасибо большое , я оказывается не тот фаил постоянно качал )

#250 Setap

Setap

    Добытчик алмазов

  • Пользователи
  • Сообщений: 643
  • Откуда: Страна под названием Эквестрия, населённой разумными пони.

Написал 07.01.2013 - 19:22

Как происходит создание/порт мода на баккит?

#251 Sirse

Sirse

    Странник

  • Пользователи
  • Сообщений: 25

Написал 12.01.2013 - 13:40

Столкнулся с интересной проблемой. Запускаю клиент MCP, через startclient.bat, мод подгружается и отлично работает. Запускаю этот же клиент, уже из minecraft.jar - вываливается
Скрытый текст
Подскажите, в чём может быть проблема

#252 Sirse

Sirse

    Странник

  • Пользователи
  • Сообщений: 25

Написал 12.01.2013 - 17:46

Столкнулся с интересной проблемой. Запускаю клиент MCP, через startclient.bat, мод подгружается и отлично работает. Запускаю этот же клиент, уже из minecraft.jar - вываливается

Скрытый текст
Подскажите, в чём может быть проблема

Проблему решил. С версии билда 6.4.2.444 фордж отказывается кушать классы, откомпиленные эклипсом. Решается компиляцией и реобфускацией через скрипты MCP

#253 sydugd

sydugd

    Странник

  • Пользователи
  • Сообщений: 32
  • Откуда: Санкт-Петербург

Написал 13.01.2013 - 20:43

Можно попробовать сделать мод

Отсоединяю руки от жопы, вставляю в плечи, имплантирую мозг безвозмездно
Для форумчан можно просто - Роман
Skype- r00oma


#254 Mr_Supercrafter

Mr_Supercrafter

    Странник

  • Пользователи
  • Сообщений: 1

Написал 13.01.2013 - 23:30

Пожалуйста скиньте ссылку на туториал по добавлению собственного GUI. Заранее благодарен

#255 Dimach

Dimach

    Добытчик угля

  • Пользователи
  • Сообщений: 365
  • Откуда: Киев

Написал 14.01.2013 - 19:30

TheApKoT, в гайде ошибка, а точней в приложенном пастебиновском файле:
newblockID = config[paste][/paste]getBlock("newblock", Configuration[paste][/paste]CATEGORY_BLOCK, 500)[paste][/paste]getInt();
При запуске приведенного кода каждый новый итем или блок будет создаваться в своей собственной категории, первый аргумент - как раз таки категория а второй "имя" ИДшника в конфиге. И еще, гайд по созданию ГУИ будет? И если нет можете кинуть ссыль на какой нибудь другой гайд (можно на английском).
Программист - это симбиоз лени и логики.

Зацените мою прогу Minecraft Web. Каждому скачавшему печенька бесплатно. И пряник. И тортик. Хотя нет, тортик платный.
А ты уже установил MineX? Нет? Тогда бегом устанавливай!
Изображение
Цитатник:
Скрытый текст

#256 Allxy

Allxy

    Добытчик камня

  • Пользователи
  • Сообщений: 206

Написал 15.01.2013 - 00:13

можете кинуть ссыль на какой нибудь другой гайд (можно на английском).

Посмотри тут. http://www.minecraft...egory:Tutorials

Изображение

Скрытый текст


#257 Dimach

Dimach

    Добытчик угля

  • Пользователи
  • Сообщений: 365
  • Откуда: Киев

Написал 15.01.2013 - 00:30

Огромное спасибо!
Программист - это симбиоз лени и логики.

Зацените мою прогу Minecraft Web. Каждому скачавшему печенька бесплатно. И пряник. И тортик. Хотя нет, тортик платный.
А ты уже установил MineX? Нет? Тогда бегом устанавливай!
Изображение
Цитатник:
Скрытый текст

#258 WonderFULL

WonderFULL

    Странник

  • Пользователи
  • Сообщений: 18
  • Откуда: Глубины космоса.

Написал 15.01.2013 - 11:06

ПЛЗ, подскажите что делаю не так. Сделал как написанно в 1-ой главе, все установил. Открываю Eclipse, но с лева нет папки Minecraft, там только Client и Server. НУЖНА ПОМОЩЬ !!! [snowman]Ах да, еше у меня не устанавливаеться FORGE, запускаю install.cmd пишет что произошол сбой по скачиванию FERNFLOWER. Если кто знает как решить, напишите.

#259 KaMiKaZa

KaMiKaZa

    Добытчик дерева

  • Пользователи
  • Сообщений: 184

Написал 15.01.2013 - 11:47

ПЛЗ, подскажите что делаю не так. Сделал как написанно в 1-ой главе, все установил. Открываю Eclipse, но с лева нет папки Minecraft, там только Client и Server. НУЖНА ПОМОЩЬ !!! [snowman]

Именно, что ты делаешь не так, как написано в первой главе. Ты либо не декомпилировал клиент Minecraft через MCP, либо указал рабочее место не в (MCP)/eclipse

#260 WonderFULL

WonderFULL

    Странник

  • Пользователи
  • Сообщений: 18
  • Откуда: Глубины космоса.

Написал 15.01.2013 - 12:14

Я создал папку, в неё закинул все из MCP, после скинул туда папку FORGE из FML. Открыл Eclipse поставил папку (MCP)\eclipse. Декомпилировал клиент Minecraft закинул в (MCP)\jars папки bin и resource. Но в Eclipse нет папки Minecraft.


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных