- Версия(и) Minecraft
- 1.7.10+
В этом сливе вы можете найти некоторые полезные куски кода касательно частиц. Пока токо два
Спавн частиц на сервере
На некоторых старых версиях, например, 1.7.10 спавнить частицы можно только на клиенте.
Небольшой метод, приведенный ниже, позволяет решить эту проблему
Спавн частиц с кастомными параметрами
У частиц довольно много различных параметров(см. класс net.minecraft.client.particle.Particle)
Допустим, надо заспаунить частицу с определенными значениями этих параметров.
Метод World#spawnParticle последним аргументом принимает int var args, т.е. сколько угодно дополнительных необязательных интов. Эти параметры в виде массива пробрасываются аж до конкретной IParticleFactory, которая создает конкретный экземпляр Particle. Поэтому можем использовать эти инты для настройки параметров частиц.
Сделаем свою реализацию фабрики, которая будет красить частицы стержня края
И зарегаем ее
Теперь, когда спавним частицу, то можем настроить ее цвет:
Спавн частиц на сервере
На некоторых старых версиях, например, 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)