Нужна помощь с кодом. Партиклы

Доброе утро форумчане)
Так как я не знаю Java, то пишу мод по урокам и шаблонам в интернете. В связи с этим вопрос, на который я не смог найти ответ...
Как приделать частицы к мечу?
А теперь подробнее:
Должно получиться нечто подобное как на картинке, только вокруг меча. Частицы для разных мечей должны быть разного цвета. Очень прошу написать для меня шаблон, с пояснением что к чему, куда писать, может доп. классы надо создать... где прописывать цвет частиц и т.д.

Вот такой код у меча:
package ru.sanx.wom;


import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemSword;


public class Zazubrina extends ItemSword{
protected Zazubrina() {
        super(wom.ZAZUBRINA);
        this.setCreativeTab(CreativeTabs.tabCombat);
        this.setTextureName("wom:zazubrina");
}
}


Буду очень благодарен за помощь!
 
Ну как-бы правельно написать (сказать).
Если использовать частицы с родителем EntityFX, то придётся как-то сравнить на координаты на самого меча. А вот как узнать координаты (а так-же по возможности угол его наклона) меча в руке я не знаю.
Другое решение создать типа свои частицы. С помощью Tessellator'а создавать свои квадратики, потом на эти квадратики присвоить текстуру. Затем в рендере для матрицы с помощью glTranslatef и/или glScalef и/или glRotatef - давать им переменные с нужными значениями, чтобы изменять положения свои частички, дабы выглядело как партикл.
Другого способа я не знаю.
 
timaxa007 написал(а):
Ну как-бы правельно написать (сказать).
Если использовать частицы с родителем EntityFX, то придётся как-то сравнить на координаты на самого меча. А вот как узнать координаты (а так-же по возможности угол его наклона) меча в руке я не знаю.
Другое решение создать типа свои частицы. С помощью Tessellator'а создавать свои квадратики, потом на эти квадратики присвоить текстуру. Затем в рендере для матрицы с помощью glTranslatef и/или glScalef и/или glRotatef - давать им переменные с нужными значениями, чтобы изменять положения свои частички, дабы выглядело как партикл.
Другого способа я не знаю.

Хорошо, а если "приделать" эффект к игроку, когда он держит данный меч?
 
Можно. Скорее всего лучше будет использовать какой-нибудь эвент, типа LivingUpdateEvent на клиентской стороне, проверять есть-ли у моба/игрока в руках меч, то "приделать" эффект к этому мобу/игроку.
 
Данный мод будет использоваться на сервере, главное чтобы игроки видели этот эффект. 
Напишите данный код, будьте любезны.

P.S. Если хотите, пишите в ЛС.
 
Код:
public class EventsForgeClient {

    Minecraft mc = Minecraft.getMinecraft();

    @SubscribeEvent
    public void addEffectEntitySplashFX(LivingUpdateEvent event) {
        if (!(event.entityLiving instanceof EntityClientPlayerMP)) {
            if (event.entityLiving.getEquipmentInSlot(0) != null && 
                    event.entityLiving.getEquipmentInSlot(0).getItem() == Items.golden_sword) {
                double radius = 0.37D;

                for (float l = 0F; l < 2 * Math.PI; l += Math.PI / 6) {
                    double px = event.entityLiving.posX + radius * Math.cos(l);
                    double py = event.entityLiving.posZ + radius * Math.sin(l);
                    mc.effectRenderer.addEffect(new EntitySplashFX(mc.theWorld, 
                            px, event.entityLiving.posY + 1.5D, py, 
                            0F, 0.4F, 0F));
                }
            }
        }
    }

}
 
Зарегистрировать на клиентской стороне:
Код:
MinecraftForge.EVENT_BUS.register(new EventsForgeClient());
Items.golden_sword заменить на свой предмет.
EntitySplashFX - это ванильный эффект, можешь заменить на свой, если есть.
Не знаю, что ещё добавить для тебя.
 
По родителю EntityFX, переменные:
Код:
    /** The red amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */
    protected float particleRed;
    /** The green amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */
    protected float particleGreen;
    /** The blue amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */
    protected float particleBlue;
    /** Particle alpha */
    protected float particleAlpha;
[merge_posts_bbcode]Добавлено: 04.05.2016 14:41:37[/merge_posts_bbcode]

Для переменной с родителем EntityFX, типа так:
Код:
EntitySplashFX eFX = new EntitySplashFX(mc.theWorld, px, event.entityLiving.posY + 1.5D, py, 0F, 0.4F, 0F);
eFX.setRBGColorF(1F, 0.5F, 0F);
mc.effectRenderer.addEffect(eFX);
 
Может лучше не ивент использовать, а onUpdate в итеме? Так не будет ненужных проверок, если итема нет у игрока.
[merge_posts_bbcode]Добавлено: 04.05.2016 16:14:48[/merge_posts_bbcode]

Например, так:
Код:
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int par1, boolean par2)
{
    if (!world.isRemote && entity instanceof EntityLivingBase) {
        if (((EntityLivingBase) entity).getEquipmentInSlot(0) != null &&
            ((EntityLivingBase) entity).getEquipmentInSlot(0).getItem() == this) {
            double radius = 0.37D;

            for (float l = 0F; l < 2 * Math.PI; l += Math.PI / 6) {
                double px = entity.posX + radius * Math.cos(l);
                double py = entity.posZ + radius * Math.sin(l);
                Minecraft.getMinecraft().effectRenderer.addEffect(new EntitySplashFX(
                        Minecraft.getMinecraft().theWorld, 
                        px, entity.posY + 1.5D, py, 0F, 0.4F, 0F));
            }
        }
    }
}

[merge_posts_bbcode]Добавлено: 04.05.2016 16:15:16[/merge_posts_bbcode]

По идее, это уберет ненужную нагрузку с игрока.
 
  • Like
Реакции: lnti
Назад
Сверху