Поворот текстуры сверху на блоке

LeonidM/Dasperal написал(а):
сетБлокМета... задаёт блоку стоящему в заданных координатах заданную метадату. в getIcon есть аргумент meta - метадата блока. В getIconе проверяешь:
Код:
Если (side == <номер верхней стороны>) и (meta == <допустим 0>), то
вернуть первую текстуру верха
elseif (side == <номер верхней стороны>) и (meta == <допустим 1>), то
вернуть вторую текстуру верха.
Хорошо объясняешь :) С третьего раза до него дошло.
 
MegaINS написал(а):
Унаследуй от BlockFaling
Хорошо, попробую.

svk, ну, он и тут объяснил довольно невнятно. Но, потыкав в коде чуть ли не наугад, я всё-таки случайно понял, как оно работает. И сделал, как надо. И на том спасибо. Хотя, если бы помочь просили меня - я бы объяснил на порядок доходчивее. И пациент быстрее бы выздоровел.

Еще вопрос: как выяснить ... ммм... азимут направления взгляда (от 0 до 359 градусов)? Пробовал пользоваться rotationYaw, но это что-то с чем-то: я вообще не понимаю логики показаний, которые выдает этот метод. Там вроде как раз угол. Только порой он становится отрицательным (ладно, это решаемо), порой становится больше 360 градусов (это тоже решаемо), а порой он меняется зеркально - где было 50 градусов - там стало 310, а где было 310 - стало 50...
 
Ну, бог с ним, с азимутом...
Два вечера потратил, пытаясь из своих блоков полублоки сделать, и ни на шаг не сдвинулся с мертвой точки. Может, найдется тут хоть один добрый самаритянин и поможет мне доделать начатое? А то уже просто руки опускаются. Думаю либо бросить затею вообще, либо оставить, как есть.

Вот код:

Класс RHBlockSlabMultiTexture: http://pastebin.ru/EFdlKNLp - для блоков с разносторонними текстурами
Класс RHBlockSlabSingleTexture: http://pastebin.ru/eZCprCy3 - для блоков с одной текстурой
Пример инициализации блоков: http://pastebin.ru/7ydF8mxa
Скриншот реализованного:
UxvtfLoWdn.png


Проблемы следующие:
1) (уверен, что все и так уже догадались, так как это, как я понял из многочасовых гуглений, вообще бич этой темы) Так и не смог реализовать подстановку двойных полублоков (нужен код, текстуры-то я сделаю).
2) если в креативке кликнуть средней кнопкой мышки на мой полублок - в руке окажется почему-то обычный каменный полублок.

В принципе, второй пункт не так важен, первый важнее. Конечно, можно забить и оставить, как есть, но если мои игроки наставят этих блоков, а я вдруг, рано или поздно, всё-таки реализую стакаемость, то мало ли какие возникнут проблемы при переходе на "новую версию" моего мода.
 
По первому пункту, как-то так:
Создаешь класс Itema:

Код:
public class YouItemSlab extends ItemSlab {
                      //Для каждого класса Slab'a новый конструктор
                      //Имя класса, 2 и 3 параметра в конструкторе, имя твоего класса 
                      //В твоем случае
public YouItemSlab(Block block1,RHBlockSlabMultiTexture block2,RHBlockSlabMultiTexture block3,Boolean bool) {
          super(block1, block2, block3, bool);
     }
public YouItemSlab(Block block1,RHBlockSlabSingleTexture block2,RHBlockSlabSingleTexture block3,Boolean bool) {
          super(block1, block2, block3, bool);
    }
}

Создавать нужно по два объекта каждого полублока, половинку и целый:

Код:
RHBlockSlabMultiTexture  breadCubeSlabAll;
RHBlockSlabMultiTexture  breadCubeSlab;

breadCubeSlab = new RHBlockSlabMultiTexture(false, Material.rock,"breadcube_slab","breadcube");
breadCubeSlabAll = new RHBlockSlabMultiTexture(true, Material.rock,"breadcube_slab","breadcube");

Затем регистрируем так:

Код:
GameRegistry.registerBlock(Ссылка на регистрируемый блок, Класс предмета.class, Имя, Ссылка на половику, Ссылка на целый, Блок целый?);
GameRegistry.registerBlock(breadCubeSlab, YouItemSlab.class, "slab",breadCubeSlab,breadCubeSlabAll,false);
GameRegistry.registerBlock(breadCubeSlabAll, YouItemSlab.class, "slabAll",breadCubeSlab,breadCubeSlabAll,true);
 
Из всего сказанного я выудил только одну строчку, мною не реализованную - про пары блоков для каждого полублока.

Ладно, попробую порассуждать вслух. Какие проблемы нужно решить?

1. Блоков должно быть два - простой полублок и двойной - на случай, когда они стакануты.
2. Когда я ставлю второй полублок на первый, нужно определить, нужно ли заменить первый на второй.
3. Когда я разрушаю двойной блок, нужно, чтоб выпадало два простых.
4. Когда я делаю блок двойным, нужно чтоб он становился непрозрачным.
5. Когда я в креативке кликаю средней кнопкой мыши по своему полублоку, в руке должен оказаться именно такой полублок, а не стандартный каменный, как в моем случае.

Теперь по решениям.

1. Второй блок я создал. Опробовал - он имеет текстуру и форму, как у родительского блока. То есть, выглядит точно так же, что логично, впрочем. И приемлемо. Но не стакается, разумеется.
2, 3. На этот случай в классах BlockSlab и BlockStoneSlab есть пара методов (createStackedBlock, quantityDropped, onBlockPlaced), но в них такая каша, что я не понимаю, как их прикрутить к своим классам.
4. Наверное, этот вопрос будет легко решить, если решить предыдущие...
5. Вообще понятия не имею, как это изменить.
 
Ладно, видимо, это слишком сложно (или слишком дорого). Вопрос попроще: как запретить какой-нибудь конкретный ванильный рецепт? Ну, чтоб игроки не могли крафтить, например, хлеб. Или каменный забор.
 
Код:
public static void removeCraftingRecipe() {
        List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();

        Iterator<IRecipe> remover = recipes.iterator();

        while (remover.hasNext()) {
            ItemStack itemstack = remover.next().getRecipeOutput();
            if (itemstack != null && itemstack.getItem() == Items.apple) {
                remover.remove();
            } else if (itemstack != null && itemstack.getItem() == Item.getItemFromBlock(Blocks.furnace)) {
                remover.remove();
            } else if (itemstack != null && itemstack.getItem() == Items.arrow) {
                remover.remove();
            }
        }
    }
 
Вот еще вопрос: если я хочу создать подкласс блоков, я делаю public class MyBlock extends Block. Причем все @Override, которые я делаю для своего класса, родительский не затрагивают - работают только для моих блоков (я могу ошибаться, я описываю всё лишь на основе собственных опытов). Так вот, вопрос: как мне через Forge изменить ванильные блоки? Я когда-то хотел повысить максимально разрешенный уровень в наковальне - с 40 до 70. Изменил это где-то в классах MCP через Notepad++, а потом сделал реобфускацию и в minecraft.jar и в minecraft_server.jar сунул классы, которые получил.  Как подобное реализовывать через моды?
 
Спасибо за многочисленные ответы. :)

Новый вопрос: я сделал дерево (всё, как положено - генерацию, комплект саженец-бревно-листва-доска). Один косяк: саженец не ставится в горшок. Почему?
[merge_posts_bbcode]Добавлено: 02.11.2015 21:12:41[/merge_posts_bbcode]

Еще вопрос: каким эвентхендлером отследить событие MiddleClickMouse?
 
0 - левое
1 - правое
2 - колесико мыши.
Код:
if(Mouse.isKeyDown(1)){
code
}

Вроде.
 
Попробовал эвент MouseEvent. Если прописываю перед ним @SubscribeEvent, то игра крашится. Если убираю - эвент не обрабатывается. Наверное, что-то другое нужно прописывать?

По горшкам понял. В коде игры в классе BlockFlowerPot есть такой кусок:
Код:
 private boolean func_149928_a(Block p_149928_1_, int p_149928_2_)
    {
        return p_149928_1_ != Blocks.yellow_flower && p_149928_1_ != Blocks.red_flower && p_149928_1_ != Blocks.cactus && p_149928_1_ != Blocks.brown_mushroom && p_149928_1_ != Blocks.red_mushroom && p_149928_1_ != Blocks.sapling && p_149928_1_ != Blocks.deadbush ? p_149928_1_ == Blocks.tallgrass && p_149928_2_ == 2 : true;
    }

Чтобы мой саженец можно было посадить в него, нужно, очевидно, вписать его сюда.
Можно ли так сделать? И если да, то как?
 
В выше описанном коде есть булеан метод, который определяет, сажается ли предмет или нет
 
Собственно, я об этом и говорю. Я уже раньше задавал вопрос, но никто мне не ответил. Я не знаю, можно ли, а если можно, то не знаю, как редактировать существующие классы блоков. В данном случае нужно в классе из minecraft.jar, находящемся по адресу net/minecraft/block/BlockFlowerPot.class исправить приведенный мною кусок, добавив туда как-то мой модовый саженец. Можно это сделать модом? Как?
 
Можно,но сложность изменения зависити от версии...
 
Была вроде темка,где конь рассказавал,советую поищи )))
 
Назад
Сверху