Доброго Вам всем дня!
Всем известна ситуация в новой версии МК, когда:
Чем дольше удерживаешь правую кнопку мыши при стрельбе из ЛУКА, то тем сильнее натягивается тетива, и тем дальше летит стрела.
Вопрос в следующем:
1. Где находится код, который отслеживает процесс удерживания ПРАВОЙ кнопки мышки при стрельбе из лука ?
2. Где прописано изменение КАРТИНКИ лука в процессе натягивания тетивы?
Нотч __ __
Заранее спасибо) По возможности как обычно сам буду дописывать сюда то, что найду.
-= Натягивание ЛУКА =-
Started by
LordKmon
, 10.02.2012 09:35
5 replies to this topic
#1
Posted 10.02.2012 - 09:35
#2
Posted 10.02.2012 - 09:40
1. Он прописан функцией. Только хз где. 2. Оно в самой функции.Вопрос в следующем: 1. Где находится код, который отслеживает процесс удерживания ПРАВОЙ кнопки мышки при стрельбе из лука ? 2. Где прописано изменение КАРТИНКИ лука в процессе натягивания тетивы?
#3
Posted 10.02.2012 - 09:48
Ты бы еще посоветовал в папке scr поискать.... =)))
В классе ItemBow есть функция ,
Класс EnumAction кстати, очень маленький, и не дает подробного ответа про механизм прицеливания и смены картинки лука.
Вообще, поиск по слову "getItemUseAction" дает очень мало. Можно только узнать, что эта функция есть просто у многих предметов, в том числе и меча.
В классе ItemBow есть функция ,
public EnumAction getItemUseAction(ItemStack itemstack) { return EnumAction[paste][/paste]bow; }если поменять "EnumAction.bow" на "EnumAction.none" , то процесса прицеливания не будет.
Класс EnumAction кстати, очень маленький, и не дает подробного ответа про механизм прицеливания и смены картинки лука.
Вообще, поиск по слову "getItemUseAction" дает очень мало. Можно только узнать, что эта функция есть просто у многих предметов, в том числе и меча.
#4
Posted 10.02.2012 - 09:53
Я последний раз запускал MCP год назад >_>. Поэтому и сказал наугад
#5
Posted 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; Просто исходник луком был
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
Posted 12.02.2012 - 19:44
Проблема решилась, все дело в файлах, EntityPlayer -> EntityController -> Minecraft.java дело в том, что пока у вас в руке Используется какой-либо предмет (UseItem != null) то зажатая ПРАВАЯ кнопка мышки обрабатывается только один раз. Если же UseItem ==null , то игра будет много много раз обрабатывать Нажатие правой кнопки мышки. Как все же много раз стрелять без остановки из лука? Ответ прост, в EntityPlayer в функции Update (она выполняется часто в секунду) надо поставить счетчик-переменную time_var , и каждый раз в функции Update увеличивать ее на единицу, когда она допустим будет равна 4 , то просто выполнить команду "StopUsingItem", то есть обходя класс Minecraft и будем сами вызвать событие остановки использования предмета - следовательно UseItem станет равной нули и Программа снова среагирует на нажатие Правой Кнопки МЫшки, и там много много раз пока мы ее не отпустим (кнопку).
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users