made breaking pipes not use playerWillDestroy

closes #220
This commit is contained in:
Ell 2024-11-30 20:23:43 +01:00
parent 4a0cde4435
commit 04f2bf3ea4
3 changed files with 8 additions and 21 deletions

View file

@ -45,11 +45,10 @@ public class WrenchItem extends Item {
if (!world.isClientSide) { if (!world.isClientSide) {
if (tile.cover != null) { if (tile.cover != null) {
// remove the cover // remove the cover
tile.removeCover(player, context.getHand()); tile.removeCover();
Utility.sendBlockEntityToClients(tile); Utility.sendBlockEntityToClients(tile);
} else { } else {
// remove the pipe // remove the pipe
PipeBlock.dropItems(world, pos, player);
Block.dropResources(state, world, pos, tile, null, ItemStack.EMPTY); Block.dropResources(state, world, pos, tile, null, ItemStack.EMPTY);
world.removeBlock(pos, false); world.removeBlock(pos, false);
} }

View file

@ -263,7 +263,12 @@ public class PipeBlock extends BaseEntityBlock implements SimpleWaterloggedBlock
network.removeNode(pos); network.removeNode(pos);
network.onPipeChanged(pos, state); network.onPipeChanged(pos, state);
if (worldIn.getBlockEntity(pos) instanceof PipeBlockEntity pipe) { if (worldIn.getBlockEntity(pos) instanceof PipeBlockEntity pipe) {
Utility.dropInventory(pipe, pipe.modules);
for (var item : pipe.getItems())
item.drop(worldIn, item.getContent());
pipe.getItems().clear(); pipe.getItems().clear();
if (pipe.cover != null)
pipe.removeCover();
for (var craft : pipe.getActiveCrafts()) { for (var craft : pipe.getActiveCrafts()) {
for (var lock : craft.ingredientsToRequest) for (var lock : craft.ingredientsToRequest)
network.resolveNetworkLock(lock); network.resolveNetworkLock(lock);
@ -273,12 +278,6 @@ public class PipeBlock extends BaseEntityBlock implements SimpleWaterloggedBlock
} }
} }
@Override
public BlockState playerWillDestroy(Level worldIn, BlockPos pos, BlockState state, Player player) {
PipeBlock.dropItems(worldIn, pos, player);
return super.playerWillDestroy(worldIn, pos, state, player);
}
@Override @Override
public boolean hasAnalogOutputSignal(BlockState state) { public boolean hasAnalogOutputSignal(BlockState state) {
return true; return true;
@ -320,15 +319,4 @@ public class PipeBlock extends BaseEntityBlock implements SimpleWaterloggedBlock
return BaseEntityBlock.createTickerHelper(type, Registry.pipeBlockEntity, PipeBlockEntity::tick); return BaseEntityBlock.createTickerHelper(type, Registry.pipeBlockEntity, PipeBlockEntity::tick);
} }
public static void dropItems(Level worldIn, BlockPos pos, Player player) {
var tile = Utility.getBlockEntity(PipeBlockEntity.class, worldIn, pos);
if (tile != null) {
Utility.dropInventory(tile, tile.modules);
for (var item : tile.getItems())
item.drop(worldIn, item.getContent());
if (tile.cover != null)
tile.removeCover(player, InteractionHand.MAIN_HAND);
}
}
} }

View file

@ -353,10 +353,10 @@ public class PipeBlockEntity extends BlockEntity implements MenuProvider, IPipeC
return -1; return -1;
} }
public void removeCover(Player player, InteractionHand hand) { public void removeCover() {
if (this.level.isClientSide) if (this.level.isClientSide)
return; return;
var drops = Block.getDrops(this.cover, (ServerLevel) this.level, this.worldPosition, null, player, player.getItemInHand(hand)); var drops = Block.getDrops(this.cover, (ServerLevel) this.level, this.worldPosition, null);
for (var drop : drops) for (var drop : drops)
Containers.dropItemStack(this.level, this.worldPosition.getX(), this.worldPosition.getY(), this.worldPosition.getZ(), drop); Containers.dropItemStack(this.level, this.worldPosition.getX(), this.worldPosition.getY(), this.worldPosition.getZ(), drop);
this.cover = null; this.cover = null;