Спавн частиц

Спавн частиц

Версия(и) Minecraft
1.7.10+
В этом сливе вы можете найти некоторые полезные куски кода касательно частиц. Пока токо два

Спавн частиц на сервере
На некоторых старых версиях, например, 1.7.10 спавнить частицы можно только на клиенте.
Небольшой метод, приведенный ниже, позволяет решить эту проблему

Java:
public void spawnParticle(World world, String particleType, float x, float y, float z, float velX, float velY, float velZ, float dispersion, int count) {
    if (!world.isRemote) {
        S2APacketParticles spacketparticles = new S2APacketParticles(particleType, x, y, z, velX, velY, velZ, dispersion, count);
        ((List<EntityPlayerMP>) world.playerEntities).forEach(player -> player.playerNetServerHandler.sendPacket(spacketparticles));
    }
}


Спавн частиц с кастомными параметрами
У частиц довольно много различных параметров(см. класс net.minecraft.client.particle.Particle)
Допустим, надо заспаунить частицу с определенными значениями этих параметров.
Метод World#spawnParticle последним аргументом принимает int var args, т.е. сколько угодно дополнительных необязательных интов. Эти параметры в виде массива пробрасываются аж до конкретной IParticleFactory, которая создает конкретный экземпляр Particle. Поэтому можем использовать эти инты для настройки параметров частиц.
Сделаем свою реализацию фабрики, которая будет красить частицы стержня края

Java:
public class ParticleColoredEndRodFactory implements IParticleFactory {
    public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... parameters) {
        float r, g, b;
        if (parameters.length >= 3) {
            r = (float) parameters[0] / 255;//0 to 255
            g = (float) parameters[1] / 255;
            b = (float) parameters[2] / 255;
        } else {
            r = 0;
            g = 0;
            b = 0;
        }

        ParticleEndRod p = new ParticleEndRod(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn);
        p.setRBGColorF(r, g, b);
        return p;
    }
}
И зарегаем ее
Java:
//ClientProxy#postInit
Minecraft
    .getMinecraft()
    .effectRenderer
    .registerParticle(EnumParticleTypes.END_ROD.getParticleID(),new ParticleColoredEndRodFactory())
Теперь, когда спавним частицу, то можем настроить ее цвет:
world.spawnParticle(EnumParticleTypes.END_ROD, x, y z, 0, 0, 0, 255, 0, 0)
1583242793165.png
Автор
hohserg
Просмотры
2,407
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя hohserg

Последние обновления

  1. Спавн частиц с кастомными параметрами

    Добавлено еще немного слива про спавн частиц
Сверху