我有一个项目,当使用时,应该删除块/改变它为空气。
我用的是下面这一行:
level.removeBlock(positionClicked, false);一旦我运行了客户机,这个块就会被短暂地移除,然后重新出现。我还尝试用以下方法删除该块:
level.destroyBlock(positionClicked, false);
level.setBlock(positionClicked, Blocks.AIR.defaultBlockState(), 1);我的猜测是,我没有正确地注册某些东西/删除的块没有应用到客户端。
完整代码:
public class TeleportationItem extends Item {
public TeleportationItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
Level level = pContext.getLevel();
if (level.isClientSide){
BlockPos blockpos = pContext.getClickedPos();
BlockState blockstate = level.getBlockState(blockpos);
level.removeBlock(positionClicked, false);
//level.setBlock(positionClicked, Blocks.AIR.defaultBlockState(), 1);
// level.destroyBlock(positionClicked, false);
return super.useOn(pContext);
}
return super.useOn(pContext);
}
}发布于 2022-07-23 08:29:55
你要做的是服务器端而不是客户端。只需将if条件更改为if (!level.isClientSide){
“非客户端”并不意味着你在服务器上,任何像这样的与世界的交互都必须由服务器端完成。所发生的情况是,您只从视图中删除一个块,然后将视图更新到没有删除块的服务器上。
https://stackoverflow.com/questions/73078246
复制相似问题