我想通过postMine这个方法让工具挖掘方块之后直接把掉落物放进背包里,但是实际测试中它没办法找到刚刚挖掉方块的掉落物,只能找到挖掘之前已经存在的掉落物,所以他这是在方块掉落之前执行的方法吗?如果我想让他在方块掉落之后执行该怎么做呢?我的代码如下复制代码
- @Override
- public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) {
- world.getOtherEntities(miner, new Box(pos.getX() + 3, pos.getY() + 3, pos.getZ() + 3, pos.getX() - 3, pos.getY() - 3, pos.getZ() - 3), e -> (e instanceof ItemEntity)).forEach(e -> {
- boolean player = miner instanceof PlayerEntity;
- if (player) {
- boolean hasSlot = ((PlayerEntity) miner).getInventory().getEmptySlot() != -1;
- if (hasSlot) {
- ((PlayerEntity) miner).giveItemStack(((ItemEntity) e).getStack());
- e.kill();
- } else {
- e.teleport(miner.getX(), miner.getY() + 1, miner.getZ());
- }
- }
- });
- return super.postMine(stack, world, state, pos, miner);
可以尝试先进行注册挖掘方块检测事件,获取事件方块,通过getDrops方法获取掉落物,然后将凋落物加入玩家背包。取消挖掘事件,将这个方块的位置用空气方块代替
3061353149 发表于 2023-2-18 11:46
可以尝试先进行注册挖掘方块检测事件,获取事件方块,通过getDrops方法获取掉落物,然后将凋落物加入玩家背 ...
getDrops方法能模拟玩家时运或者精准采集之类的吗
iMoonDay 发表于 2023-2-18 15:52
getDrops方法能模拟玩家时运或者精准采集之类的吗
可以,但必须在getDrops()的括号里加入他手上的物品ItemStack