- 16
- 0
Всем привет.. Предупреждаю сразу (да и вы наверное сами догадались), моддер я начинающий, прошу, объясняйте как можно доступнее =)
Вопрос(старый как сам майнкрафт) в заголовке, мне нужно получить защиту от взрыва если я ношу полный комплект тех или иных доспехов. Снизу припишу код, дабы вы лучше понимали суть моего положения.
Это, собственно класс брони. Как связать всю броню вместе, я благо понял (спасибо ботании и гитхабу за это):
public class TestArmor extends ItemArmor {
public TestArmor(ArmorMaterial materialIn, int renderIndexIn, EntityEquipmentSlot equipmentSlotIn, String unlocalizedName) {
super(materialIn, renderIndexIn, equipmentSlotIn);
this.setUnlocalizedName(unlocalizedName);
this.setRegistryName(new ResourceLocation(Reference.MODID, unlocalizedName));
}
public boolean hasArmorSet(EntityPlayer player) {
return hasArmorSetItem(player, 0) && hasArmorSetItem(player, 1) && hasArmorSetItem(player, 2) && hasArmorSetItem(player, 3);
}
public boolean hasArmorSetItem(EntityPlayer player, int i) {
ItemStack stack=player.inventory.armorInventory.get(3 - i);
if (stack.isEmpty())
return false;
switch (i) {
case 0:
return stack.getItem() == ModArmor.testHelm;
case 1:
return stack.getItem() == ModArmor.testChest;
case 2:
return stack.getItem() == ModArmor.testLegs;
case 3:
return stack.getItem() == ModArmor.testBoots;
}
return false;
}
@SubscribeEvent
public void onPlayerDamage(LivingHurtEvent event, DamageSource source) {
if (event.getEntityLiving() instanceof EntityPlayer) {
EntityPlayer player=(EntityPlayer) event.getEntityLiving();
if (hasArmorSet(player) && source.isExplosion) {
event.setCanceled(true);
}
}
}
}
Вот этот евент.. Всё дело в нём.. Я уже прошерстил всё что мог.. Этот код я взял из Divine RPG, (пусть он и на 1.7.10, но суть похожа) сверял его с Nevermine 2.. да и в Ботании есть предмет, позволяющий тебе блокировать тот или иной тип урона. (Кольцо Одина, если кто в теме).. Код не вызывает ошибки, он просто не работает. Спустя пару дней я примерно понимаю, что дело в регистрации евента, но понятия не имею, что это и где это делается. Заранее благодарю всех, кто откликнется=)
Вопрос(старый как сам майнкрафт) в заголовке, мне нужно получить защиту от взрыва если я ношу полный комплект тех или иных доспехов. Снизу припишу код, дабы вы лучше понимали суть моего положения.
Это, собственно класс брони. Как связать всю броню вместе, я благо понял (спасибо ботании и гитхабу за это):
public class TestArmor extends ItemArmor {
public TestArmor(ArmorMaterial materialIn, int renderIndexIn, EntityEquipmentSlot equipmentSlotIn, String unlocalizedName) {
super(materialIn, renderIndexIn, equipmentSlotIn);
this.setUnlocalizedName(unlocalizedName);
this.setRegistryName(new ResourceLocation(Reference.MODID, unlocalizedName));
}
public boolean hasArmorSet(EntityPlayer player) {
return hasArmorSetItem(player, 0) && hasArmorSetItem(player, 1) && hasArmorSetItem(player, 2) && hasArmorSetItem(player, 3);
}
public boolean hasArmorSetItem(EntityPlayer player, int i) {
ItemStack stack=player.inventory.armorInventory.get(3 - i);
if (stack.isEmpty())
return false;
switch (i) {
case 0:
return stack.getItem() == ModArmor.testHelm;
case 1:
return stack.getItem() == ModArmor.testChest;
case 2:
return stack.getItem() == ModArmor.testLegs;
case 3:
return stack.getItem() == ModArmor.testBoots;
}
return false;
}
@SubscribeEvent
public void onPlayerDamage(LivingHurtEvent event, DamageSource source) {
if (event.getEntityLiving() instanceof EntityPlayer) {
EntityPlayer player=(EntityPlayer) event.getEntityLiving();
if (hasArmorSet(player) && source.isExplosion) {
event.setCanceled(true);
}
}
}
}
Вот этот евент.. Всё дело в нём.. Я уже прошерстил всё что мог.. Этот код я взял из Divine RPG, (пусть он и на 1.7.10, но суть похожа) сверял его с Nevermine 2.. да и в Ботании есть предмет, позволяющий тебе блокировать тот или иной тип урона. (Кольцо Одина, если кто в теме).. Код не вызывает ошибки, он просто не работает. Спустя пару дней я примерно понимаю, что дело в регистрации евента, но понятия не имею, что это и где это делается. Заранее благодарю всех, кто откликнется=)