From 030bfbc6a160acd598b819c8b67e0ae9994dea21 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 30 Nov 2020 20:05:07 +0100 Subject: [PATCH] Improving --- .../fightsystem/utils/ArrowStopper_14.java | 8 ++-- .../fightsystem/utils/ArrowStopper_8.java | 4 +- .../fightsystem/utils/ArrowStopper.java | 48 ++++++++++++------- 3 files changed, 38 insertions(+), 22 deletions(-) rename FightSystem_15/src/de/steamwar/fightsystem/utils/ArrowStopper_15.java => FightSystem_14/src/de/steamwar/fightsystem/utils/ArrowStopper_14.java (83%) rename FightSystem_12/src/de/steamwar/fightsystem/utils/ArrowStopper_12.java => FightSystem_8/src/de/steamwar/fightsystem/utils/ArrowStopper_8.java (93%) diff --git a/FightSystem_15/src/de/steamwar/fightsystem/utils/ArrowStopper_15.java b/FightSystem_14/src/de/steamwar/fightsystem/utils/ArrowStopper_14.java similarity index 83% rename from FightSystem_15/src/de/steamwar/fightsystem/utils/ArrowStopper_15.java rename to FightSystem_14/src/de/steamwar/fightsystem/utils/ArrowStopper_14.java index 00aba0a..6a16357 100644 --- a/FightSystem_15/src/de/steamwar/fightsystem/utils/ArrowStopper_15.java +++ b/FightSystem_14/src/de/steamwar/fightsystem/utils/ArrowStopper_14.java @@ -20,12 +20,12 @@ package de.steamwar.fightsystem.utils; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_15_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock; -public class ArrowStopper_15 { - private ArrowStopper_15(){} +public class ArrowStopper_14 { + private ArrowStopper_14(){} static int blockToId(Block block){ - return net.minecraft.server.v1_15_R1.Block.REGISTRY_ID.getId(((CraftBlock)block).getNMS()); + return net.minecraft.server.v1_14_R1.Block.REGISTRY_ID.getId(((CraftBlock)block).getNMS()); } } diff --git a/FightSystem_12/src/de/steamwar/fightsystem/utils/ArrowStopper_12.java b/FightSystem_8/src/de/steamwar/fightsystem/utils/ArrowStopper_8.java similarity index 93% rename from FightSystem_12/src/de/steamwar/fightsystem/utils/ArrowStopper_12.java rename to FightSystem_8/src/de/steamwar/fightsystem/utils/ArrowStopper_8.java index f4bf992..01a4972 100644 --- a/FightSystem_12/src/de/steamwar/fightsystem/utils/ArrowStopper_12.java +++ b/FightSystem_8/src/de/steamwar/fightsystem/utils/ArrowStopper_8.java @@ -21,8 +21,8 @@ package de.steamwar.fightsystem.utils; import org.bukkit.block.Block; -public class ArrowStopper_12 { - private ArrowStopper_12(){} +public class ArrowStopper_8 { + private ArrowStopper_8(){} @SuppressWarnings("deprecation") static int blockToId(Block block){ diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java index 920ebae..f4e33b3 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/ArrowStopper.java @@ -31,17 +31,22 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.AbstractArrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.player.PlayerPickupArrowEvent; import org.bukkit.scheduler.BukkitTask; import java.util.*; -public class ArrowStopper implements StateDependent { +public class ArrowStopper implements StateDependent, Listener { private BukkitTask task; private static final HashMap LAST_LOCATION = new HashMap<>(); public static void init() { - if(Config.ArrowTechhiderCollision == -1) + if(Config.ArrowTechhiderCollision == 0) return; FightSystem.registerStateDependent(new ArrowStopper()); } @@ -50,22 +55,30 @@ public class ArrowStopper implements StateDependent { Collection arrows = Bukkit.getWorlds().get(0).getEntitiesByClasses(AbstractArrow.class); if(arrows.isEmpty()) return; - for (Entity entity : arrows) { - if(entity.getTicksLived() > Config.ArrowTechhiderCollision || - ((AbstractArrow) entity).isInBlock()){ - LAST_LOCATION.remove(entity); - continue; + for (Map.Entry e : LAST_LOCATION.entrySet()) { + if(checkBlocks(e.getKey().getLocation().getBlock(), e.getValue().getBlock())) + e.getKey().remove(); + else { + if(e.getKey().getTicksLived() <= Config.ArrowTechhiderCollision || + !((AbstractArrow) e.getKey()).isInBlock()) { + LAST_LOCATION.put(e.getKey(), e.getKey().getLocation()); + } } - if(!LAST_LOCATION.containsKey(entity)) - LAST_LOCATION.put(entity, ((Player) ((AbstractArrow) entity).getShooter()).getEyeLocation()); - Location last = LAST_LOCATION.remove(entity); - if(checkBlocks(entity.getLocation().getBlock(), last.getBlock())) - entity.remove(); - else - LAST_LOCATION.put(entity, entity.getLocation()); } } + @EventHandler() + public void onEntityShootBow(EntityShootBowEvent event) { + if(!(event.getEntity() instanceof Player)) + return; + LAST_LOCATION.put(event.getProjectile(), event.getEntity().getEyeLocation()); + } + + @EventHandler + public void onPlayerPickupArrow(PlayerPickupArrowEvent event) { + LAST_LOCATION.remove(event.getArrow()); + } + @Override public Set enabled() { return EnumSet.of(FightState.RUNNING); @@ -73,6 +86,7 @@ public class ArrowStopper implements StateDependent { @Override public void enable() { + Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin()); task = Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::run, 1, 1); } @@ -80,6 +94,7 @@ public class ArrowStopper implements StateDependent { public void disable() { task.cancel(); LAST_LOCATION.clear(); + HandlerList.unregisterAll(this); } private static int blockToId(Block block){ @@ -88,10 +103,11 @@ public class ArrowStopper implements StateDependent { case 9: case 10: case 12: - return ArrowStopper_12.blockToId(block); + return ArrowStopper_8.blockToId(block); + case 14: case 15: default: - return ArrowStopper_15.blockToId(block); + return ArrowStopper_14.blockToId(block); } }