если сломалась броня.....

Версия Minecraft
1.7.10
у меня есть два типа брони: основная и улучшенная... мне нужно, чтобы если сломалась улучшенная броня, то на её месте появилась обычная... вопросы:
1) как отследить брейк брони?
2) как реплейсить слоты брони?
 
PlayerDestroyItemEvent попробуй
 
Кажется, это не поможет. Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)


asdqwertypro написал(а):
вродь сделал "слежку"... а как реплейсить то слот?
Ну так player.setCurrentItemOrArmor
 
hohserg написал(а):
Кажется, это не поможет. Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)


asdqwertypro написал(а):
вродь сделал "слежку"... а как реплейсить то слот?
Ну так player.setCurrentItemOrArmor



вот ошибку выдаёт, мб я наговнокодил)


hohserg написал(а):
Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)

эмм... я короче исправил ошибку, но не работает, поставил этот метод и... короче можно строчку с самой заменой при этом методе? я сам не могу допереть
 

Вложения

  • IMG_11072017_125748_0.png
    IMG_11072017_125748_0.png
    111.4 KB · Просмотры: 16
Тебе нужен TickEvent.PlayerTickEvent. (ивент регистрируется так - FMLCommonHandler.instance().bus().register())
Вроде он успевает засечь момент, когда предмет еще не пропал и у него прочность 0,
если нет, то простой заменяй армор на обычный, если у него прочность == 1


hohserg написал(а):
Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)

эмм... я короче исправил ошибку, но не работает, поставил этот метод и... короче можно строчку с самой заменой при этом методе? я сам не могу допереть



Ты пытаешься вставить в метод setCurrentItemOrArmor() предмет, а нужен ItemStack.
Просто создавай новый ItemStack -> new ItemStack(Main.TVOYITEM);
 
Onneros написал(а):
Тебе нужен TickEvent.PlayerTickEvent. (ивент регистрируется так - FMLCommonHandler.instance().bus().register())
Вроде он успевает засечь момент, когда предмет еще не пропал и у него прочность 0,
если нет, то простой заменяй армор на обычный, если у него прочность == 1


hohserg написал(а):
Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)

эмм... я короче исправил ошибку, но не работает, поставил этот метод и... короче можно строчку с самой заменой при этом методе? я сам не могу допереть



Ты пытаешься вставить в метод setCurrentItemOrArmor() предмет, а нужен ItemStack.
Просто создавай новый ItemStack -> new ItemStack(Main.TVOYITEM);



я же сказал: я исправил ошибку! короче вот код, я хз что там дописать надо
Код:
Customnanoglasses = new CustomelectroArmor(0, 0){
     public void setDamage(ItemStack item, int damage){
     
     .setCurrentItemOrArmor(0, new ItemStack(Main.anonimous));
     }


hohserg написал(а):
Кажется, это не поможет. Точно поможет переопределение в классе брони метода
public void setDamage(ItemStack stack, int damage)

так. я что-то не допераю... как через setdamage можно отследить поломку брони? гуглил, гуглил... мб реал можно... а нашёл всякую дичь не связанную с проблемой! ну... или мой дерьмяндекс опять выдал дичь
 
Не знаю успевает ли setDamage проверить нулевую прочность, но можно проверять, что она равна 1, через данный itemStack, и если да, то ставить в слот другую броню. А вообще, как сказано выше, проще использовать TickEvent.PlayerTickEvent.
 
Крокодил написал(а):
Не знаю успевает ли setDamage проверить нулевую прочность, но можно проверять, что она равна 1, через данный itemStack, и если да, то ставить в слот другую броню. А вообще, как сказано выше, проще использовать TickEvent.PlayerTickEvent.

... ок, как через setDamage проверить прочность вообще (строчку кода можно?) а про TickEvent я погуглю и выше что-то я не припомню про это...


Крокодил написал(а):
Не знаю успевает ли setDamage проверить нулевую прочность, но можно проверять, что она равна 1, через данный itemStack, и если да, то ставить в слот другую броню. А вообще, как сказано выше, проще использовать TickEvent.PlayerTickEvent.

... ок, как через setDamage проверить прочность вообще (строчку кода можно?) а про TickEvent я погуглю и выше что-то я не припомню про это...


вот скажите мне пожалуйста, что сдесь не так? 
Код:
public void setDamage(ItemStack item, int damage, EntityPlayer p){
     if(item.getItemDamage() == 1){
     p.setCurrentItemOrArmor(0, new ItemStack(Main.anonimous));
     }}
 
Крокодил написал(а):
У тебя метод перезаписан?


В смысле, может аргумент EntityPlayer лишний? У меня под рукой кода нет.



аргумент я добавил, типа кому менять то шлем? игроку? а так там не должно быть этого... я не знаю, ничего не работало, делал хрен знает что!
 
Onneros написал(а):
Тебе нужен TickEvent.PlayerTickEvent.
Onneros написал(а):
Onneros написал(а):
Как будто броня ломается каждый тик.

Ошибся с методом в классе предмета - там ведь нету объекта игрока.
Но можно почитать тему в учебнике про трансформеры и вставить в начало метода InventoryPlayer#damageArmor(float p_70449_1_) хук с проверкой на броню и ее повреждения.
 
Назад
Сверху