- Регистрация
- 4 Апр 2025
- Сообщения
- 24
- Реакции
- 0
- Баллы
- 1
- Город
- Санкт-Петербург
- Веб-сайт
- paxgame.ru
- Discord
- nicolayka
В этом туториале мы разберём возможность создания кастомной брони, которая может быть будет имунна к определённому виду урона, или которая будет иметь эффекты зелий.
Это руководство предполагает, что вы знаете основы Java, моддинга Minecraft. Для начала создайте новый класс, который расширяет ItemArmor и реализует ISpecialArmor.
Если вы просто хотите броню, которая добавляет эффект зелья, пропустите эту часть и прочитайте следующий раздел!
Очень важной частью этого будет некоторое «Armorperperties», это позволяет нам изменить урон, нанесенный игроку, который носит эту броню. Его конструктор имеет три части: Priority, AbsorbRatio, и AbsorbMax, в этом порядке. Priority определяет, какой кусок брони сначала повреждается, я обычно устанавливаю его на 1, поэтому все части будут повреждены одновременно. Я не совсем уверен, что делает Abristbratio (извините), а Abripmax - это максимальное количество урона, которое может поглотить один кусок брони.
Для этого примера мы собираемся использовать набор брони, который устойчив к огню, он называется Itempyrusarmor:
В этом примере мы будем использовать класс, который я создал, под названием ItemThoriteArmor, который замедляет игрока, пока он надет на него
Это действительно так просто! Однако НЕ стоит делать ничего с игроком, что будет отключено после снятия брони. Например, не следует устанавливать player.capabilities.canFly в значение true, а затем пытаться установить его в false, когда игрок не носит броню, потому что метод больше не будет вызываться, когда броня снята.
Эффекты зелий — это нормально, потому что игра удаляет их, как только истекает время.
Как добавить эффект зелья к мечу?
Необходимо добавить этот код в класс ItemSword
Как добавить эффект зелья только после того, как вся броня будет надета?
Это руководство предполагает, что вы знаете основы Java, моддинга Minecraft. Для начала создайте новый класс, который расширяет ItemArmor и реализует ISpecialArmor.
Я не собираюсь держать вас за руку и писать это за вас строка за строкой. Я собираюсь показать вам код из мода, и объясню его в закомментированных строках.
Если вы просто хотите броню, которая добавляет эффект зелья, пропустите эту часть и прочитайте следующий раздел!
Очень важной частью этого будет некоторое «Armorperperties», это позволяет нам изменить урон, нанесенный игроку, который носит эту броню. Его конструктор имеет три части: Priority, AbsorbRatio, и AbsorbMax, в этом порядке. Priority определяет, какой кусок брони сначала повреждается, я обычно устанавливаю его на 1, поэтому все части будут повреждены одновременно. Я не совсем уверен, что делает Abristbratio (извините), а Abripmax - это максимальное количество урона, которое может поглотить один кусок брони.
Для этого примера мы собираемся использовать набор брони, который устойчив к огню, он называется Itempyrusarmor:
Java:
package me.tyler15555.metalworking.item;
import me.tyler15555.metalworking.util.Resources;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.ISpecialArmor;
public class ItemPyrusArmor extends ItemArmor implements ISpecialArmor {
public ItemPyrusArmor(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) {
super(p_i45325_1_, p_i45325_2_, p_i45325_3_);
}
// Это самый важный метод в этом классе! Это вызывается каждый раз, когда игрок, носящий ваши доспехи, получает урон, однако его вызывают до нанесения урона, чтобы вы могли изменить его.
@Override
public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
if(source == source.inFire || source == source.lava || source == source.onFire) { // Проверьте на повреждение от огня, вы также можете использовать другие виды повреждений.
return new ArmorProperties(1, 1, MathHelper.floor_double(damage * .25D));
}
return new ArmorProperties(0, 0, 0);
}
@Override
public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
return 4; // Сколько половинок щита заполняет каждая часть брони на панели брони
}
@Override
public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
stack.damageItem(damage * 2, entity); // Позволяет контролировать количество урона, наносимого каждой части брони, полезно для ослабления некоторых комплектов брони.
}
@Override // Это довольно понятно само по себе
public String getArmorTexture(ItemStack armor, Entity entity, int slot, String type) {
if(armor.getItem() == MWItems.pyrusLegs) {
return "metalworking:textures/armor/pyrus_2.png";
} else {
return "metalworking:textures/armor/pyrus_1.png";
}
}
@Override
public CreativeTabs[] getCreativeTabs() {
return new CreativeTabs[] {CreativeTabs.tabCombat, Resources.tabMW}; // Это позволяет мне разместить свою броню в столько вкладок, сколько я захочу, круто, не правда ли?
}
@Override
public boolean getIsRepairable(ItemStack armor, ItemStack stack) {
return stack.getItem() == MWItems.ingotPyrus; // Разрешает определённым предметам чинить эту броню.
}
}
Эффекты зелья и броня
Броня выше довольно сложна в создании и требует внедрения новых классов, однако добавление эффектов зелий очень простое, и нужно переопределить всего один метод!В этом примере мы будем использовать класс, который я создал, под названием ItemThoriteArmor, который замедляет игрока, пока он надет на него
Java:
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack armor) {
player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 500, 4));
}
Эффекты зелий — это нормально, потому что игра удаляет их, как только истекает время.
Как добавить эффект зелья к мечу?
Необходимо добавить этот код в класс ItemSword
Java:
@Override
public boolean hitEntity(ItemStack stack, EntityLivingBase hitEntity, EntityLivingBase attackingEntity) {
hitEntity.addPotionEffect(YourPotionEffectHere);
}
Как добавить эффект зелья только после того, как вся броня будет надета?
Java:
if(player.getActivePotionEffects().contains(Your potion effect) && this instanceof YourHelmet) {
ItemStack[] armor = new ItemStack[] {}; //Create a new itemstack with each piece of your armor
int gearCounter = 0;
for(int i = 1; i < 5; i++) {
if(player.getEquipmentInSlot(i) == armor[i - 1] {
gearCounter++;
}
}
if(gearCounter == 4) {
player.addPotionEffect();
gearCounter = 0;
}
Последнее редактирование: