diff --git a/src/main/java/ho/artisan/bdo/event/BDOPlayerEvent.java b/src/main/java/ho/artisan/bdo/event/BDOPlayerEvent.java index b24ca16..d7c6fbc 100644 --- a/src/main/java/ho/artisan/bdo/event/BDOPlayerEvent.java +++ b/src/main/java/ho/artisan/bdo/event/BDOPlayerEvent.java @@ -62,18 +62,20 @@ private static void openDoor(Level level, BlockPos pos, BlockState state, Player level.gameEvent(player, GameEvent.BLOCK_OPEN, pos); var side = state.getValue(DoorBlock.HINGE); - pos = side == DoorHingeSide.RIGHT - ? pos.offset(-face.getStepZ(), face.getStepY(), -face.getStepX()) - : pos.offset(face.getStepZ(), face.getStepY(), face.getStepX()); + + var flag = side == DoorHingeSide.RIGHT; + var reverse = (flag ? -1 : 1) * ((face == Direction.NORTH || face == Direction.SOUTH) ? -1 : 1); + pos = pos.offset(face.getStepZ() * reverse, face.getStepY(), face.getStepX() * reverse); state = level.getBlockState(pos); if (!state.is(BlockTags.DOORS)) return; if (state.getValue(BlockStateProperties.OPEN)) return; + if (state.getValue(DoorBlock.HINGE) != (flag ? DoorHingeSide.LEFT : DoorHingeSide.RIGHT)) return; state = state.cycle(DoorBlock.OPEN); level.setBlock(pos, state, 10); level.gameEvent(player, GameEvent.BLOCK_OPEN, pos); - } + } @SuppressWarnings("unused")