From 8c93f446df7c3bdcab8165d2884a4eb61ac2b8cc Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 27 Nov 2020 21:31:39 +0100 Subject: [PATCH] Adding Better Tracking --- .../steamwar/fightsystem/utils/ArrowStopper.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java index ac26912..6d5069d 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java @@ -63,7 +63,7 @@ public class ArrowStopper implements StateDependent { LAST_LOCATION.put(entity, ((Player) ((AbstractArrow) entity).getShooter()).getEyeLocation()); int distance = (int) Math.ceil(entity.getLocation().toVector().distance(LAST_LOCATION.get(entity).toVector()) * 1.414213562); try { - checkBlock(entity.getFacing().getOppositeFace(), entity.getLocation().getBlock(), distance, entity.getLocation().getBlockY() - LAST_LOCATION.get(entity).getBlockY()); + checkBlock(entity.getFacing().getOppositeFace(), entity.getLocation().getBlock(), LAST_LOCATION.get(entity).getBlock(), distance, entity.getLocation().getBlockY() - LAST_LOCATION.get(entity).getBlockY()); } catch (TechHiddenBlock techHiddenBlock) { entity.remove(); } @@ -101,16 +101,20 @@ public class ArrowStopper implements StateDependent { } } - private void checkBlock(BlockFace face, Block block, int i, int lastdown) throws TechHiddenBlock { + private void checkBlock(BlockFace face, Block block, Block start, int i, int lastdown) throws TechHiddenBlock { Bukkit.getOnlinePlayers().forEach(player -> player.sendBlockChange(block.getLocation(), Material.RED_STAINED_GLASS.createBlockData())); if(Config.HiddenBlocks.contains(blockToId(block))) throw new TechHiddenBlock(); - if(i != Math.abs(lastdown)) - checkBlock(face, block.getRelative(face), i - 1, lastdown); + if(lastdown != 0) { boolean negativ = lastdown < 0; BlockFace toFace = negativ?BlockFace.UP:BlockFace.DOWN; - checkBlock(face, block.getRelative(toFace), i - 1, lastdown + (negativ?1:-1)); + checkBlock(face, block.getRelative(toFace), start, i - 1, lastdown + (negativ?1:-1)); + return; + } + + if(i != 0) { + checkBlock(face, block.getRelative(face), start, i - 1, lastdown); } }