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


Фотография

-= Натягивание ЛУКА =-


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

#1 LordKmon

LordKmon

    Странник

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

Написал 10.02.2012 - 09:35

Доброго Вам всем дня!
Всем известна ситуация в новой версии МК, когда:

Чем дольше удерживаешь правую кнопку мыши при стрельбе из ЛУКА, то тем сильнее натягивается тетива, и тем дальше летит стрела.

Вопрос в следующем:
1. Где находится код, который отслеживает процесс удерживания ПРАВОЙ кнопки мышки при стрельбе из лука ?
2. Где прописано изменение КАРТИНКИ лука в процессе натягивания тетивы?

Нотч __ [fence] [wheat-animated] __ [wheat-animated] [wheat-animated] [fence]
[soil] [soil] [soil] [soil] [water] [soil] [soil]


Заранее спасибо) По возможности как обычно сам буду дописывать сюда то, что найду. [books] [books] [chest]

#2 Няша

Няша

    Добытчик обсидиана

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

Написал 10.02.2012 - 09:40

Вопрос в следующем: 1. Где находится код, который отслеживает процесс удерживания ПРАВОЙ кнопки мышки при стрельбе из лука ? 2. Где прописано изменение КАРТИНКИ лука в процессе натягивания тетивы?

1. Он прописан функцией. Только хз где. 2. Оно в самой функции.

#3 LordKmon

LordKmon

    Странник

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

Написал 10.02.2012 - 09:48

Ты бы еще посоветовал в папке scr поискать.... =)))

В классе ItemBow есть функция ,

public EnumAction getItemUseAction(ItemStack itemstack)    {        return EnumAction[paste][/paste]bow;    }
если поменять "EnumAction.bow" на "EnumAction.none" , то процесса прицеливания не будет.

Класс EnumAction кстати, очень маленький, и не дает подробного ответа про механизм прицеливания и смены картинки лука.
Вообще, поиск по слову "getItemUseAction" дает очень мало. Можно только узнать, что эта функция есть просто у многих предметов, в том числе и меча.

#4 Няша

Няша

    Добытчик обсидиана

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

Написал 10.02.2012 - 09:53

Я последний раз запускал MCP год назад >_>. Поэтому и сказал наугад

#5 LordKmon

LordKmon

    Странник

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

Написал 10.02.2012 - 10:20

Чтобы оперативно поменять картинку во время стрельбы или после выстрела, надо к примеру в ItemBow в функциях добавить след строки:
public void onPlayerStoppedUsing(Item ...
написать setIconCoord(<координаты картинки спокойного оружия>);

public void onItemRightClick(Item ...
написать setIconCoord(<координаты картинки стреляющего оружия>);



НО ВСЕ РАВНО ОСТАЕТСЯ ВОПРОС:
Где происходит обработка удержания правой кнопкой мыши при СТРЕЛЬБЕ из Лука ???
Это уже не в ItemBow точно, а где-то на уровне EntityPlayer , потому что туда Bow передается в качестве UsingItem. ПРИМЕР - допустим я хочу чтобы зажав ПРАВУЮ кнопку, лук начал стрелять не целясь, не переставая. Что я для этого сделал -

В файле ItemBow немного изменив, перекинул тело функции onPlayerStoppedUsing в функцию public ItemStack onItemRightClick
Причем, если в функции public ItemStack onItemRightClick удалить entityplayer.setItemInUse(itemstack, getMaxItemUseDuration(itemstack)); , то действительно ЛУК будет стрелять не переставая при зажатой ПРАВОЙ кнопки.


НО МНЕ вот обязательно надо чтобы метод entityplayer.setItemInUse(itemstack, getMaxItemUseDuration(itemstack)); использовался в public ItemStack onItemRightClick !!!! Если его не удалять, то при зажатии правой кнопки мышки будет просто ПАУЗА, и выстрел только когда отпустишь правую кнопку мышки.

НАРОД подскажите, как эту ПАУЗУ отключить!!! P.S.У меня уже далеко не ЛУК, и у него return EnumAction.none; Просто исходник луком был

#6 LordKmon

LordKmon

    Странник

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

Написал 12.02.2012 - 19:44

Проблема решилась, все дело в файлах, EntityPlayer -> EntityController -> Minecraft.java дело в том, что пока у вас в руке Используется какой-либо предмет (UseItem != null) то зажатая ПРАВАЯ кнопка мышки обрабатывается только один раз. Если же UseItem ==null , то игра будет много много раз обрабатывать Нажатие правой кнопки мышки. Как все же много раз стрелять без остановки из лука? Ответ прост, в EntityPlayer в функции Update (она выполняется часто в секунду) надо поставить счетчик-переменную time_var , и каждый раз в функции Update увеличивать ее на единицу, когда она допустим будет равна 4 , то просто выполнить команду "StopUsingItem", то есть обходя класс Minecraft и будем сами вызвать событие остановки использования предмета - следовательно UseItem станет равной нули и Программа снова среагирует на нажатие Правой Кнопки МЫшки, и там много много раз пока мы ее не отпустим (кнопку).


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

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