Раскрашиваем стороны блока без meta

Версия Minecraft
1.7.10

Led

291
3
0
Вопрос такой, нужно раскрашивать верхушку блока в различные текстуры (top и top2) в зависимости от направления, куда смотрит игрок. Проблема в том, что для этого использовать meta не желательно, ибо meta уже используется (речь о торте, где meta используется, насколько торт съеден). 
Лично у самого была идея расширить пул meta в 4 раза, что бы была получилась матрица вроде:
meta = 0 торт целый, текстура  обращена на восток,
meta = 1 торт целый, текстура обращена на юг,
meta = 2 торт целый, текстура обращена на запад,
meta = 3 торт целый, текстура обращена на север,
meta = 4 отъеден 1 кусок, текстура обращена на восток,
meta = 5 отъеден 1 кусок, текстура обращена на юг,
meta = 6 объеден 1 кусок, текстура обращена на запад,
meta = 7 отъеден 1 кусок, текстура обращена на север,
meta = 8 отъедено 2 куска, текстура обращена на восток
.....
meta = 19 остался 1 кусок, текстура на восток


Но выглядит как то костыльно.

Вообще не работал с NTB, и интересна эта тема. Может его использовать? NTB же есть и у блоков так же?

Заранее спасибо!
 
7,099
324
1,510
Сделай абстракцию и не будет казаться костыльно
 
4,045
63
645
Не очень понял, как ты хочешь подобное реализовать. Игрок смотри в одну сторону: текстура одна, а если поворачивается - другая? Странно будет смотреться. Но тут придётся свой рендер писать...
Если хочешь просто изменять текстуру или вид блока без меты, то лестница и заснеженная трава тебе в помощь.
 

Led

291
3
0
"Менять текстуру" - обобщённо. Имеется в виду, что на верхушке тортика изображение, имеет низ. по сути, нужно лишь крутить верхнюю текстуру.

А зачем писать рендер, если я меняю лишь текстуру, а модель остаётся той же?
 
7,099
324
1,510
Led написал(а):
hohserg написал(а):
Сделай абстракцию и не будет казаться костыльно

Можно подробнее?
Сделай методы: 
getType(int meta)//возвращает цвет блока или чем у тя они отличаются
getFaceSide(int meta)//возвращает сторону, на которой лицевая сторона блока
getMeta(int type,int side//создает метадату по типу и стороне
Эти методы для установки и извлечения сочетаний цвет/ориентация из метадаты.
 
7,099
324
1,510
getType - возвращает сколько кусков осталось, я же написал ,что это не обязательно цвет
 

Led

291
3
0
Мы другу друга недопонимаем.
Я про то, что метод геттайп уже используется для того, что бы вывести количество кусков. И я не могу использовать ещё раз. Ибо эта переменная уже занята под куски.
 
7,099
324
1,510
Ты можешь расширять эту самую матрицу метадаты скольким хочешь кол-вом параметров(и как хочешь обзывать эти методы), пока верхняя граница значения матрицы не превысит максимальное значение метадаты
 

Led

291
3
0
То есть количество значений meta ограниченно 16 (От нуля до пятнадцати)?
И как я написал в первом посте, реализовать не получиться?

И тогда как реализовать мой запрос?

Заранее спасибо!
 
398
4
7
Я вижу два простых варианта.
1) На сколько я знаю, NBT в блоках можно использовать только совместно с TileEntity.
В чем проблема сделать TileEntity? Конечно, любые тайлы создадут дополнительную нагрузку на сервер, но не будет же кто-то строить из тортиков?
2) Использовать несколько блоков. В таком случае не обязательно на каждый блок создавать по классу. Так что это может оказаться проще первого варианта.
 

Led

291
3
0
Asd73 написал(а):
Я вижу два простых варианта.
1) На сколько я знаю, NBT в блоках можно использовать только совместно с TileEntity.
В чем проблема сделать TileEntity? Конечно, любые тайлы создадут дополнительную нагрузку на сервер, но не будет же кто-то строить из тортиков?
2) Использовать несколько блоков. В таком случае не обязательно на каждый блок создавать по классу. Так что это может оказаться проще первого варианта.

Можно поподробнее поподробней о втором варианте? А если есть возможность, о и о первом?)
 
4,045
63
645
Ну конеееееееечно... мои ответы никто не читаааааааает...
Я ж написал в сообщении №6, смотри лестницу. Количество вариантов лестницы гораздо больше 16-ти.
Только решается это не через методату, а через проверку соседних блоков.
Для этого нужен спец-рендер, которые будет это проверять и отрисовывать блок как надо.
Однако запоминаться игрой это не будет. Запомнятся только меты.
В 1.10 есть удобный метод для таких целей getActualState(). Подбирает варианты блока в зависимости от текущего (сохранённого в мету) варианта и условий окружающей среды... В 1.7.10 не знаю... Только рендер, наверное...
Однако, мне совсем недавно таким макаром удалось реализовать аж 63 различных варианта блока в одном. Всё отлично работает )
 
398
4
7
Это конечно хорошо, но ни угол поворота торта ни его степень съеденности от соседних блоков зависеть не будет.

По второму варианту достаточно вспомнить как регистрируются блоки:

Код:
block = new НашБлок();
GameRegistry.registerBlock(block, "имя");
Как видно, регистрируется не сам класс блока, а его экземпляр. Поэтому никто не мешает насоздавать несколько экземпляров класса блока с разными параметрами и зарегистрировать их.
Пример. Класс блока:

Код:
public class ExampleBlock extends Block {
    public ExampleBlock(String name) {
         super(Material.iron);
         setCreativeTab(CreativeTabs.tabRedstone);
        setBlockName(name);
    }
}
Регистрация:

Код:
ExampleBlock block1 = new ExampleBlock("test 1");
GameRegistry.registerBlock(block1, "block1");
ExampleBlock block2 = new ExampleBlock("test 2");
GameRegistry.registerBlock(block2, "block2");
ExampleBlock block3 = new ExampleBlock("test 3");
GameRegistry.registerBlock(block3, "block3");

В результате получаем в инвентаре три блока с разными именами. То же можно сделать с текстурой, моделью и прочим.

Второй вариант - насколько я помню, так сохраняется имя игрока в отрубленной голове для отображения скина.
 
Сверху