- 388
- 1
Здравствуйте.
Первичная задумка - сделать взрыв без звука (или с кастомным звуком).
Посмотрев, что делает метод World.createExplosion, докопался до класса Explosion.java, где нашел методы doExplosionA() и doExplosionB. Первый помечает блоки, которые должны уничтожиться. Второй убирает эти блоки, спаунит частицы и проигрывает звук взрыва.
Написал код:
Потом в айтеме вызываю его:
Проблема: не спаунятся партиклы. Знаю, что их надо спаунить только на клиенте. Но ведь метод doExplosionB вызывается на сервере и партиклы видно.
Как решать?
Первичная задумка - сделать взрыв без звука (или с кастомным звуком).
Посмотрев, что делает метод World.createExplosion, докопался до класса Explosion.java, где нашел методы doExplosionA() и doExplosionB. Первый помечает блоки, которые должны уничтожиться. Второй убирает эти блоки, спаунит частицы и проигрывает звук взрыва.
Написал код:
Код:
private void makeMyExplosion(World world, EntityPlayer entity, double posX, double posY, double posZ, boolean destroyBlocks){
Explosion explosion = new Explosion(world,entity,posX,posY,posZ,5.0f);
if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(world, explosion)) return;
if (destroyBlocks) {
explosion.doExplosionA();
Iterator iterator = explosion.affectedBlockPositions.iterator();
while (iterator.hasNext()) {
ChunkPosition chunkPosition = (ChunkPosition) iterator.next();
int x = chunkPosition.chunkPosX;
int y = chunkPosition.chunkPosY;
int z = chunkPosition.chunkPosZ;
world.setBlockToAir(x, y, z);
world.markBlockForUpdate(x, y, z);
}
}
// explosion.doExplosionB(true);
boolean spawnParticles = true;
if (spawnParticles) {
if (explosion.explosionSize >= 2.0F) {
world.spawnParticle("hugeexplosion", posX, posY, posZ, 1.0D, 0.0D, 0.0D);
} else {
world.spawnParticle("largeexplode", posX, posY, posZ, 1.0D, 0.0D, 0.0D);
}
}
}
Код:
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (!world.isRemote) {
makeMyExplosion(world,player,player.posX,player.posY,player.posZ, true); // координаты взял для примера
}
}
Как решать?