Опять про многосторонние блоки

397
8
33
В общем-то все ясно и понятно, как их делать, только есть проблема. Верхняя сторона, не меняется в зависимости от того, в какую сторону "смотрит" блок. Возможно исправить?
 
Это все элементарно, достаточно понимать код который пишешь.
Если посмотреть код "Поворот разностороннего блока" то видно, что на основе rotationYaw вычисляется метадата блока, в соответствии с которой блок поворачивается. Но rotationYaw это угол направления взгляда в горизонтальной плоскости (курс). А тебе нужно учитывать еще и тангаж - rotationPitch.
Пример: https://bitbucket.org/Shuleshkin/nedocomputers/src/03c412b336f99789a778f3042bab1303c9c9cd3f/src/main/java/nedocomputers/BlockIOExpander.java?at=default#cl-80
 
Ой как все тяжело для меня... Ну, буду пробовать разобраться, спасибо
 
Смотри.
Регистрируешь несколько иконок для верха - 4 или 2, сколько тебе нужно.
Дальше в методе по стороне и метадате легко определяешь нужную текстуру.


Код:
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2) //par1 вроде сторона, par2 метадата 
{
    int indexTop = 2;
    if (par1 == 1) //или 0, я не помню что там топ
        return icons[indexTop + par2 /* можно par2 % 2, если всего 2 ориентации для верха */];
        //indexTop - начальный индекс, где хранится текстура верха
}

//хранилище иконок, начиная с 3 слота идут текстуры верха
@SideOnly(Side.CLIENT)
@Override
public void registerIcons(IconRegister par1) {
    icons = new Icon[6];
    icons[0] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_front");
    icons[1] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_side");
    icons[2] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_top");
    icons[3] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_top2");
    icons[4] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_top3");
    icons[5] = par1.registerIcon(Dopbox.MODID+":"+"sandbag_top4");
}

//задаем метадату в соответствии с направлением взгляда при установке
@Override
public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack par6ItemStack) {
    int l = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3;        
    world.setBlockMetadataWithNotify(i, j, k, l, 0);
}

Ничего сложного.
Как писали выше, надо всего лишь понимать свой код.
 
[font=Verdana, Helvetica, Arial, sans-serif]Как писали выше, надо всего лишь понимать свой код.[/font]
Как раз для меня пока не все понятно, я еще нуп в этом деле)


А еще не могу понять момент 
Код:
 return icons[indexTop + par2];
Просто на него ругается программа, и никак не исправить это.
 
Ну непонятно - изучай основы. Если не хочешь изучать основы - то и нечего писать на форум. Выходит, ты просишь помощи, но сам разбираться не хочешь.
Я не говорю конкретно про данный момент и про тебя, но все идет к тому. Ты, вроде, пытаешься что-то изменить сам. Если я правильно тебя понял:
MrUser написал(а):
Ну, буду пробовать разобраться, спасибо

Раз "нуп" - становись не "нупом". Для этого тебе надо чуточку желания и усердия.

Обычно моддинг подразумевает знание основ программирования, но сюда идут все и ждут, что по их велению бедный компьютер, которого уже задолбали сталкер-модами, как и меня, сделает всё прям как они представляют в голове, а выходит почему-то совсем другое.

Кстати, это не ТВ3 и ясновидящих тут нет.
Если есть ошибка - угадай, что надо сделать, чтобы тебе помогли её решить?
 
Помимо моддинга, я занимаюсь программированием сайтов. Пожалуйста, созданием, если Вам так воспринимать удобнее. Я довольно хорошо разбираюсь в нем и некоторых языках.Это я к чему? А к тому, что хоть я и понимаю Ваше волнение, но когда меня о чем-то спрашивают, я всегда объясняю, и бывает, даже поясняю как и для чего что делается. Я не высказываю свое фи тем, кто ничего в этом не понимает. И уж тем более я сам стараюсь всегда во всем разобраться без помощи. А вот если не получается самому - тогда уже и иду за помощью. Которую, кстати, никого не обязываю оказывать. Так что давайте мы будем лояльно относиться к тем, кто плохо в чем-то разбирается! Не хотим объяснять что-то - проходим мимо, может быть, помогут другие. У меня же попросту нет достаточного времени для изучения книг и учебников, а есть только чтобы все изучать на ходу. Пожалуй, я сказал все, что меня волнует в данный момент. ​
 
MrUser написал(а):
У меня же попросту нет достаточного времени для изучения книг и учебников, а есть только чтобы все изучать на ходу.​
Тогда на подобное тупление уйдет несоизмеримо больше времени.
Icons – это массив. Значит, этот массив должен быть определен. Раз выдает ошибку, значит, он не определен и его нужно определить тебе.

У меня тоже нет ни малейшего желания изучать (да и знать) джаву, но пару дней для чтения учебника я нашел, а большего для простых модов не нужно. Тебе же должно быть проще, так как в PHP тоже есть классы.
Главное надо писать код, который хоть немного понимаешь.

Да, я вначале неправильно понял вопрос.
 
MrUser написал(а):
Я не высказываю свое фи тем, кто ничего в этом не понимает. И уж тем более я сам стараюсь всегда во всем разобраться без помощи.​
Вас часто просят о помощи?
Я за 3 тысячи сообщений (включая другие форумы) навидался очень много.
Это не было высказыванием "своего фи", я уже говорил, что не наблюдаю тут пока особой наглости аля "сделайте всё за меня!", которая встречается в каждом N топике, где N - M\количество-участников-форума, а M - магическое число. Следовательно, к Вашей личности я ничего плохого, как мне показалось, не приплел.

Сайтостроение далеко не лучший показатель скилла в программировании, ровно как и если человек годами писал на ассемблере - с ООП он будет страдать. Независимо от того, чего он там добился.
Именно поэтому так важен широкий кругозор в эти наши дни. И, следовательно, Ваш навык создания\написания сайтов тут не очень уместен.
А действительно хороший программист способен освоить новые технологии за считанные недели.

Выше человек Вам пояснил ошибку, не был определен массив, поэтому среда Вам выдавала ошибку, которой можно было и поделиться. Уж базовые понятия о переменных-то должны входить в основы сайтостроения\веб-программирования?
 
MrUser написал(а):
если Вам так воспринимать удобнее​
Ухты,на вы обращаешься,как будто с какой то зазнайкой.Тебе помогают,радуйся.А не выпендривайся.Равносильно тому,если тебе протягивают руку,а ты говоришь"Вы не достойно моей руки"
 
блин народ что вы вечно выяснять отношения любите? нет ну серьезно? почему всем обязательно выпендриваться, отличиться своим взглядом на мир, поучить человека уму разуму... но по делу некто не говорит... этот форум и создан для того(я в этом уже сомневаюсь) чтобы нубы задовали свои идеоцкие вопросы, на то они и нубы... извините меня конечно, но меня бомбонуло.
 
Извини, но у нас тоже бомбануло.

Примеры, которые давали, показывают лишь принцип, и никто не ожидал что ты их скопируешь полностью.
Попробую объяснить принцип на русском:
1) Метод registerIcons в какой-то момент времени вызывается майнкрафтом, в этом методе нужно получить объекты, соответствующие иконкам. Ссылки на эти объекты нужно сохранить в полях класса блока. Иконок может быть сколько угодно. Имена полей класса, в которых сохраняются иконки, можно выбирать произвольно. Иконки можно сохранять в массиве или массивах или в отдельных полях.
2) Метод onBlockPlacedBy вызывается при установке блока, в этом методе дается энтити, у которой есть направление взгляда. В соответствии с направлением взгляда устанавливается метадата. И ничто не обязывает в этом методе писать MathHelper.floor_double(и т.д.) Можно просто сравнивать углы if-ами.
3) В методе getIcon два аргумента - сторона и метадата. В этом методе нужно в зависимости от метадаты и стороны возвращать определенную иконку. В нашем случае метадата показывает ориентацию блока. Хочется чтобы иконка на верхней грани поворачивалась? Можно нарисовать 4 иконки, повернутых в разные стороны и возвращать нужную в зависимости от метадаты.
Псевдокод для наглядности:
Код:
if (сторона == верх) {
    if (метадата == 1) return (иконка верха №1)
    if (метадата == 2) return (иконка верха №2)
    if (метадата == 3) return (иконка верха №3)
    if (метадата == 4) return (иконка верха №4)
}

Элементарно, не правда ли? И знание джавы тут ни при чем.
 
Ухты,на вы обращаешься,как будто с какой то зазнайкой.Тебе помогают,радуйся.А не выпендривайся.Равносильно тому,если тебе протягивают руку,а ты говоришь"Вы не достойно моей руки"
Можешь тыкать всему и вся. Покажи свое бескультурье, и все равно, что это интернет. Если ты в этой теме не принимал участия - проходи мимо, и без тебя ругани хватает. Тоже, умник нашелся, сам ничего, а кричит поболее других.

Сайтостроение далеко не лучший показатель скилла в программировании, ровно как и если человек годами писал на ассемблере - с ООП он будет страдать. Независимо от того, чего он там добился.
Нет, я хотел сказать о другом. О том, что и мне приходится и приходилось терпеть много такие тем и вопросов.

П.С. Спасибо за объяснение про массивы.
 
tl;dr
 
MrUser написал(а):
Ухты,на вы обращаешься,как будто с какой то зазнайкой.Тебе помогают,радуйся.А не выпендривайся.Равносильно тому,если тебе протягивают руку,а ты говоришь"Вы не достойно моей руки"
Можешь тыкать всему и вся. Покажи свое бескультурье, и все равно, что это интернет. Если ты в этой теме не принимал участия - проходи мимо, и без тебя ругани хватает. Тоже, умник нашелся, сам ничего, а кричит поболее других.

Сайтостроение далеко не лучший показатель скилла в программировании, ровно как и если человек годами писал на ассемблере - с ООП он будет страдать. Независимо от того, чего он там добился.
Нет, я хотел сказать о другом. О том, что и мне приходится и приходилось терпеть много такие тем и вопросов.


П.С. Спасибо за объяснение про массив
Я хотя бы книгу читал перед моддингом,сайтострой
 
LazyRavenMan написал(а):
Я хотя бы книгу читал перед моддингом,сайтострой
А я вот книг не читал.
Офигенный повод для гордости, да?
И поэтому я даун.

P.S. Книги читать хорошо, но это ещё сильнее нифига не значит. Любая практика зачастую полезнее книжек. Если ты не прошарен в предметной области. В противном случае книга очень неплохо помогает, если шаришь.
 
Назад
Сверху