Скорость атаки

Версия Minecraft
1.7.10
11
0
Привет. Только начал разбираться в создании модов, решил написать небольшой мод, в котором есть различные виды оружия с разной дальностью, отдачей и скоростью атаки. С первыми двумя, благодаря различным англоязычным форумам, я разобрался, но как мне изменить скорость атаки, например, меча?
 
Решение
Cooldown'ы организовать что ли нужно? Если для пуль (то есть скорострельность), то ты все равно больше 20 выстрелов в секунду не сделаешь, если только в тик спавнить сразу несколько пуль, но это по мне не очень хорошая идея. А вот меч я у себя делал так: при левом клике по сущности (Item#onLeftClickEntity(ItemStack, EntityPlayer, Entity)) записывал время удара (можно использовать World#getTotalWorldTime() (тики), тогда будет зависимость от тиков мира, а можно System#currentTimeMillis() (миллисекунды), тогда будет зависимость от времени ПК сервера) в NBT ItemStack'а (не забудь прибавить время твоей задержки в тех единицах, которые выбрал). Затем при каждом ударе проверяй записанное в NBT время с текущим, и если...
1,200
37
237
Cooldown'ы организовать что ли нужно? Если для пуль (то есть скорострельность), то ты все равно больше 20 выстрелов в секунду не сделаешь, если только в тик спавнить сразу несколько пуль, но это по мне не очень хорошая идея. А вот меч я у себя делал так: при левом клике по сущности (Item#onLeftClickEntity(ItemStack, EntityPlayer, Entity)) записывал время удара (можно использовать World#getTotalWorldTime() (тики), тогда будет зависимость от тиков мира, а можно System#currentTimeMillis() (миллисекунды), тогда будет зависимость от времени ПК сервера) в NBT ItemStack'а (не забудь прибавить время твоей задержки в тех единицах, которые выбрал). Затем при каждом ударе проверяй записанное в NBT время с текущим, и если оно превышает текущее, то просто выполняй super этого метода и перезаписывай последнее время, а если же удар был слишком рано, то возвращай false (и перезаписывай время по желанию). Также можно это приделать в событие, и уже там написать настраиваемую задержку для любого предмета.

Для ПКМ (например стрельба из пистолета, с очередью уже придется подумать) используй Item#onItemRightClick(ItemStack, World, EntityPlayer) правда там еще один такой метод с First в названии, один из них отвечает за зажим ПКМ, а друго за нажатие (ну тут вроде можно по названиям догадаться).

Ответ тем, кто спросит, почему я просто не предложил счётчик (например i++): если его записывать в NBT, то предмет в руках будет постоянно дёргаться, будто бы мы меняем слот хотбара колесом мыши. Да и по мне лучше один раз записать и проверять значение, чем каждый раз записывать/обновлять и проверять его.
 
Сверху