Вверх ↑
Этот топик читают: Гость
Ответов: 4557
#1: 2014-05-07 18:07:24 ЛС | профиль | цитата
Совсем старая тема.
Данный раздел предназначается для публикаций предложений с кодом игры, но не все умеют писать код игры. Исходя из этой темы, Вы научитесь писать код игры.

Рассмотрим создание блока на примере BlockStone.java

package net.minecraft.src;

import java.util.Random;

public class BlockStone extends Block
{
public BlockStone(int par1, int par2)
{
super(par1, par2, Material.rock);
}

public int idDropped(int par1, Random par2Random, int par3)
{
return Block.cobblestone.blockID;
}
}
1) Зададим адрес к файлу:
package net.minecraft.src;
В данном случае: /net/minecraft/src

2) Пропишем классы:
import java.util.Random;

3) Объявим блок Камень с рендером блока
public class BlockStone extends Block
{

4) "Создадим" блок и добавим материал
    public BlockStone(int par1, int par2)
{
super(par1, par2, Material.rock);
}

5) Добавим дроп блоку
    public int idDropped(int par1, Random par2Random, int par3)
{
return Block.cobblestone.blockID;
}
}
Блок создан! Осталось только прописать в файле Block.java
Block.java
Для примера создадим блок на основе камня с возможностью издавать свет и назовём его "Example"
public static final Block Example = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setLightValue(1.0F).setStepSound(soundStoneFootstep).setBlockName("Example");
Растолкую:
1) Объявляем блок
public static final Block Example

2) Подключаем к файлу с исходником (в примере у нас BlockStone)
new BlockStone

3) Пишем ID и номер текстуры блока:
(1, 1)

4) Пишет характеристики блока (В данном случае у нас камень)
.setHardness(1.5F).setResistance(10.0F)

5) Добавим блоку светимость:
.setLightValue(1.0F)

6) Добавим блоку звук:
.setStepSound(soundStoneFootstep)

7) Добавим имя блоку - Example
.setBlockName("Example")

8) Завершим код:
;

Та-дам, блок существует в игре!
Item.java
Создадим итем - кожа.

    public static Item leather = (new Item(78)).setIconCoord(7, 6).setItemName("leather");

1) Публикуем итем
 public static Item leather = 

2) Указываем итем (Если нету пути к определённому файлу, то просто пишем Item) и ID
(new Item(78))

3) добавим иконку (7 столб (ряд), 6 текстура)
.setIconCoord(7, 6)

4) Добавим имя итему
.setItemName("leather");

При желании можно добавить эффект частиц, на пример как у ред-стоуна (если это блок (на пример
))
.setPotionEffect(PotionHelper.redstoneEffect);
CraftingManager.java
Исходя из названия скрола уже всё ясно - здесь мы научимся добавлять крафт нашему итему.
Возьмём к примеру итем "карта":

        this.addRecipe(new ItemStack(Item.map, 1), new Object[] {"###", "#X#", "###", '#', Item.paper, 'X', Item.compass});

1) Добавляем крафт и класс (ItemStack)
this.addRecipe(new ItemStack

2) Добавим итем, который получится на выходе и кол-во
(Item.map, 1),

3) Добавим крафт:
new Object[] {"###", "#X#", "###", '#', Item.paper, 'X', Item.compass});

Получается:
Полублоки
За полублоки отвечает код

Рендер блока:
    public void setBlockBoundsForItemRender()
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}

Чтобы сделать горизонтальный полублок, достаточно сделать так:
    public void setBlockBoundsForItemRender()
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
}

Чтобы сделать вертикальный полублок, достаточно сделать так
    public void setBlockBoundsForItemRender()
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
}

Чтобы сделать 1/4 блока, достаточно сделать так
    public void setBlockBoundsForItemRender()
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F);
}

Но не стоит забывать про X-Ray:
    public boolean isOpaqueCube()
{
return false;
}


Дабы полублок не отталкивал нас:
    public boolean renderAsNormalBlock()
{
return false;

}
[/scroll]

admin писал(а):
- все дополнительные файлы с исходниками оформляются так же, как основной
- все дополнительные файлы с изменениями уже существующих исходников оформляются ввиде diff
- если блок использует несколько текстур, то их индекс должен задаваться в конструкторе только одним числом(baseIndex), а все последующие считаться как baseIndex + N


В данной теме представлен чистый код игры без использования сторонних ресурсов (лоадеров и прочих)

Если Вы собрались выкладывать своё предложением с кодом, то воспользуйтесь данной темой. По всем вопросом ко мне в ЛС.
карма: 6
2
Голосовали:whirr, _Ferdinand_
Ответов: 8913
NeverClan
[W] Constructors
#2: 2014-05-07 18:08:49 ЛС | профиль | цитата
И это туториал № 2147483647 в интернете на эту тему...
карма: -121
0
Ответов: 4557
#3: 2014-05-07 18:10:48 ЛС | профиль | цитата
Shadow, в интернете с использованием всяких лоадеров, а эта тема содержит чистый код игры.
карма: 6
0
Ответов: 8913
NeverClan
[W] Constructors
#4: 2014-05-07 18:12:01 ЛС | профиль | цитата
Flanagun, ну не знаю, полгода назад не было проблемой для меня найти подобный урок для чистого майна. Да и самому разобраться гораздо интереснее, скажу так.
карма: -121
0
Ответов: 4557
#5: 2014-05-07 18:13:30 ЛС | профиль | цитата
Shadow, А почему бы не обновить старую темку администратора? Да и к тому же у админа в теме идёт речь о двери. Будет у начинающий путаница в классах.
карма: 6
0
Ответов: 443
#6: 2014-05-07 18:15:56 ЛС | профиль | цитата
Если делать всё по схемам - не будет великого интереса и креатива. Самому разобраться куда полезнее чем по инструкциям и туторам.
карма: -5
0
Ответов: 8913
NeverClan
[W] Constructors
#7: 2014-05-07 18:16:48 ЛС | профиль | цитата
Flanagun, там описано как происходит добавление новых блоков в игру, ну и код присутствует для добавления блока. Вы лишь немного дополнили и изменили код, ничего такого. Это можно было найти в интернете, той темы вполне было достаточно.
карма: -121
0
Ответов: 4557
#8: 2014-05-07 18:17:45 ЛС | профиль | цитата
RedAvenger писал(а):
Самому разобраться куда полезнее

GUI.java

package net.minecraft.src;

import org.lwjgl.opengl.GL11;

public class Gui
{
protected float zLevel = 0.0F;

protected void drawHorizontalLine(int par1, int par2, int par3, int par4)
{
if (par2 ‹ par1)
{
int var5 = par1;
par1 = par2;
par2 = var5;
}

drawRect(par1, par3, par2 + 1, par3 + 1, par4);
}

protected void drawVerticalLine(int par1, int par2, int par3, int par4)
{
if (par3 ‹ par2)
{
int var5 = par2;
par2 = par3;
par3 = var5;
}

drawRect(par1, par2 + 1, par1 + 1, par3, par4);
}

/**
* Draws a solid color rectangle with the specified coordinates and color.
*/
public static void drawRect(int par0, int par1, int par2, int par3, int par4)
{
int var5;

if (par0 ‹ par2)
{
var5 = par0;
par0 = par2;
par2 = var5;
}

if (par1 ‹ par3)
{
var5 = par1;
par1 = par3;
par3 = var5;
}

float var10 = (float)(par4 ›› 24 & 255) / 255.0F;
float var6 = (float)(par4 ›› 16 & 255) / 255.0F;
float var7 = (float)(par4 ›› 8 & 255) / 255.0F;
float var8 = (float)(par4 & 255) / 255.0F;
Tessellator var9 = Tessellator.instance;
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(var6, var7, var8, var10);
var9.startDrawingQuads();
var9.addVertex((double)par0, (double)par3, 0.0D);
var9.addVertex((double)par2, (double)par3, 0.0D);
var9.addVertex((double)par2, (double)par1, 0.0D);
var9.addVertex((double)par0, (double)par1, 0.0D);
var9.draw();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_BLEND);
}

/**
* Draws a rectangle with a vertical gradient between the specified colors.
*/
protected void drawGradientRect(int par1, int par2, int par3, int par4, int par5, int par6)
{
float var7 = (float)(par5 ›› 24 & 255) / 255.0F;
float var8 = (float)(par5 ›› 16 & 255) / 255.0F;
float var9 = (float)(par5 ›› 8 & 255) / 255.0F;
float var10 = (float)(par5 & 255) / 255.0F;
float var11 = (float)(par6 ›› 24 & 255) / 255.0F;
float var12 = (float)(par6 ›› 16 & 255) / 255.0F;
float var13 = (float)(par6 ›› 8 & 255) / 255.0F;
float var14 = (float)(par6 & 255) / 255.0F;
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glShadeModel(GL11.GL_SMOOTH);
Tessellator var15 = Tessellator.instance;
var15.startDrawingQuads();
var15.setColorRGBA_F(var8, var9, var10, var7);
var15.addVertex((double)par3, (double)par2, (double)this.zLevel);
var15.addVertex((double)par1, (double)par2, (double)this.zLevel);
var15.setColorRGBA_F(var12, var13, var14, var11);
var15.addVertex((double)par1, (double)par4, (double)this.zLevel);
var15.addVertex((double)par3, (double)par4, (double)this.zLevel);
var15.draw();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}

/**
* Renders the specified text to the screen, center-aligned.
*/
public void drawCenteredString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5)
{
par1FontRenderer.drawStringWithShadow(par2Str, par3 - par1FontRenderer.getStringWidth(par2Str) / 2, par4, par5);
}

/**
* Renders the specified text to the screen.
*/
public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5)
{
par1FontRenderer.drawStringWithShadow(par2Str, par3, par4, par5);
}

/**
* Draws a textured rectangle at the stored z-value. Args: x, y, u, v, width, height
*/
public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6)
{
float var7 = 0.00390625F;
float var8 = 0.00390625F;
Tessellator var9 = Tessellator.instance;
var9.startDrawingQuads();
var9.addVertexWithUV((double)(par1 + 0), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + 0) * var7), (double)((float)(par4 + par6) * var8));
var9.addVertexWithUV((double)(par1 + par5), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + par5) * var7), (double)((float)(par4 + par6) * var8));
var9.addVertexWithUV((double)(par1 + par5), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + par5) * var7), (double)((float)(par4 + 0) * var8));
var9.addVertexWithUV((double)(par1 + 0), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + 0) * var7), (double)((float)(par4 + 0) * var8));
var9.draw();
}
}
Хех, удачи)

Shadow писал(а):
изменили код

Это чистый код из игры
карма: 6
0
Ответов: 28
Anarchy
лидер
#9: 2014-05-07 18:20:14 ЛС | профиль | цитата
Спасибо
карма: 1
0
Ответов: 443
#10: 2014-05-07 18:20:33 ЛС | профиль | цитата
Flanagun, я и так знаю как это сделать, я учусь на програмиста и интересуюсь подобным.
карма: -5
0
Ответов: 8913
NeverClan
[W] Constructors
#11: 2014-05-07 18:21:37 ЛС | профиль | цитата
Flanagun писал(а):
Это чистый код из игры
А теперь сравните его с кодом администратора. Тоже самое, что изменить. У него тоже был код чисто из игры.
Flanagun писал(а):
GUI.java
Хех, удачи)
И что тут такого? Разве что от названия переменных может из глаз потечь кровь. А так захочется - сделаешь.
карма: -121
0
Ответов: 4557
#12: 2014-05-07 18:23:38 ЛС | профиль | цитата
Shadow писал(а):
. У него тоже был код чисто из игры.

У него дверь, где много классов, у меня камень.

Почему просто не написать "молодец" или прочее и не пытаться что-либо доказать? Не относится к тебе тема - пройди мимо.
карма: 6
0
Ответов: 8913
NeverClan
[W] Constructors
#13: 2014-05-07 18:24:24 ЛС | профиль | цитата
Flanagun, ну хотя бы потому что у меня к вам плохое отношение.
карма: -121
0
Ответов: 4557
#14: 2014-05-07 18:25:38 ЛС | профиль | цитата
Shadow,
Flanagun писал(а):
Не относится к тебе тема - пройди мимо.

карма: 6
0
Ответов: 8913
NeverClan
[W] Constructors
#15: 2014-05-07 18:26:17 ЛС | профиль | цитата
Flanagun, в смысле не относится? Я просто выразил свою точку зрения, что такого?
карма: -121
0
Ответов: 9711
Eternity
Patriarch
#16: 2014-05-07 19:39:03 ЛС | профиль | цитата
Flanagun писал(а):
package net.minecraft.src;

Это не адрес к файлу.
Flanagun писал(а):
3) Объявим блок Камень с рендером блока

Это же наследование. Не надо путать людей. class Block ведь абстрактный?
Flanagun писал(а):
4) "Создадим" блок и добавим материал

А это конструктор, блок так не создается.
Flanagun писал(а):
public static final Block Example = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setLightValue(1.0F).setStepSound(soundStoneFootstep).setBlockName("Example");

А вот это уже и есть создание.
И.т.д. Я конечно понимаю, что гайд для тех кто не умеет программировать, но хотя бы термины используйте правильно.
карма: 50
ДНИЩЕ ПРОРВАНО КАПИТАН, РАКИ ЗАПОЛОНЯЮТ ТРЮМ, ЧТО ДЕЛАТЬ?!?!
0
Ответов: 712
#17: 2014-05-07 19:46:23 ЛС | профиль | цитата
Мало что понятно..
карма: -18
0
Ответов: 199
DRIB
лидер
#18: 2014-05-09 18:11:32 ЛС | профиль | цитата
Ещё бы описали по подробнее про комментарии, точнее указали их.
карма: -15
Читать и понимать = знать, копировать и не иметь понятия = быть идиотом. Выбирайте сами кто Вы.
0
18
Сообщение
...