- 216
- 6
- 19
Свой эффект от зелья
Почему решил сделать этот тутор? Долго в инете искал и подумал что новичкам в моддинге пригодится...
Приступим:
Для начала нужно залезть в главный файл мода и зарегистрировать наш новоиспеченный эффект(stoppingPotion), а так же заранее регистрируем эвент:
Код:
@Mod (modid = "test", name = "Test", version = "0.1")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)
public class Main {
@Instance("test")
public static Main instance;
public static Potion stoppingPotion;
@EventHandler
public void init(FMLInitializationEvent event)
{
MinecraftForge.EVENT_BUS.register(new EventHooks()); //Регистрация эвента
stoppingPotion = new StoppingPotion(32 //ID МИНИМАЛЬНОЕ: 32//, false, 0, true).setIconIndex(0, 0).setPotionName("potion.stoppingPotion");
LanguageRegistry.instance().addStringLocalization("potion.stoppingPotion", "Stopping Effect");
}
}
После чего создаем файл для этого эффекта, в моем случае - StoppingPotion.java и прописываем туда совсем небольшой код:
Код:
public class StoppingPotion extends Potion {
public StoppingPotion(int par1, boolean par2, int par3) {
super(par1, par2, par3);
}
public Potion setIconIndex(int par1, int par2) {
super.setIconIndex(par1, par2);
return this;
}
public boolean isBadEffect() //Этот метод предназначен для
{ //выбора - Плохой или хороший этот эффект.
return true; //В моем случае - плохой
} //Этот метод можно опустить, если он вам не нужен.
}
А теперь, чтобы указать, что должно происходить при наложении этого эффека (На моба или игрока), нужно зайти в наш, недавно зарегистрированный эвент и написать:
Код:
public class EventHooks {
@ForgeSubscribe
public void onEntityUpdate(LivingUpdateEvent event) {
if (event.entityLiving.isPotionActive(Main.StoppingPotion)) { //Проверка - Активен ли наш эффект?
//Тут можно написать все что угодно, что будет происходить, когда эффект активен.
event.entityLiving.setSneaking(true);
event.entityLiving.worldObj.spawnParticle("crit", x, y-0.7, z, 0.0d, 0.0d, 0.0d);
}
}
}
Так же чтобы зелье регистрировалось, пропишите этот код в главный файл:
(Эта часть кода дает возможность добавлять свои эффекты, без нее у тебя свободных ID для поушенов не будет.)
Код:
@EventHandler
public void preinit(FMLPreInitializationEvent event)
{
Potion[] potionTypes = null;
for (Field f : Potion.class.getDeclaredFields()) {
f.setAccessible(true);
try {
if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) {
Field modfield = Field.class.getDeclaredField("modifiers");
modfield.setAccessible(true);
modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL);
potionTypes = (Potion[])f.get(null);
final Potion[] newPotionTypes = new Potion[256];
System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length);
f.set(null, newPotionTypes);
}
}
catch (Exception e) {
System.err.println("Severe error, please report this to the mod author:");
System.err.println(e);
}
}
}