关于粒子生成

Billy_tang


Minecraft版本:1.12.2

使用如下代码后,粒子并不生成。
生成粒子似乎要在client进行,在server进行无效果。但我不知道怎么实现。
这段代码位于重写的Block类的neighborChanged方法。

if (worldIn.isRemote) {
    for (int i = 0; i < 120; i++) {
	    worldIn.spawnParticle(EnumParticleTypes.SNOWBALL,
        (double)thisPos.getX() + worldIn.rand.nextDouble(),
        (double)thisPos.getY() +1+ worldIn.rand.nextDouble() * 2D,
        (double)thisPos.getZ() + worldIn.rand.nextDouble(),
        0.0D, 0.0D, 0.0D);
    }
}

原方法并没有SideOnly的注解

@Deprecated
    public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos)
    {
    }

FledgeXu


试试World.playEvent?


Billy_tang


用print检测了一下,neighborChanged似乎只在server调用?


Billy_tang


playEvent看不懂啊。。。type参数是整数完全不知道意义。。。


Snownee


使用 world.addBlockEvent(),配合 block.eventReceived()。 实现可参考 BlockNote


Billy_tang


可以实现,但是还有问题。
我的方法中会将原本的方块替换为空气。
若不执行替换空气,粒子可以生成,但若替换,则不可以。
源代码中world.addBlockEvent()似乎是根据坐标来找方块,传递的Block参数没用。
所以若替换为空气,无论代码先后,都不能检测到这个BlockEvent,而应该变成了一个空气的BlockEvent。

方法的部分:

public void neighborChanged(IBlockState state, World worldIn, BlockPos thisPos, Block blockIn, BlockPos firePos) {
    worldIn.addBlockEvent(thisPos, this, 0, 0);
    worldIn.setBlockToAir(thisPos);
}

好吧我成功犯傻了:sweat:把设置为空气写到eventReceived里面就行了呀。。
成功了,感谢帮助!


system


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。