diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java index b6e85f86f..36e9d9b1a 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java @@ -24,20 +24,19 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.format.C; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.plugin.VolmitSender; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.EnderSignal; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.event.world.WorldUnloadEvent; +import org.bukkit.inventory.EquipmentSlot; import java.util.concurrent.atomic.AtomicBoolean; @@ -100,35 +99,40 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent } @EventHandler - public void on(EntitySpawnEvent e) { - if(e.getEntity().getWorld().equals(getTarget().getWorld().realWorld())) { - if(e.getEntityType().equals(EntityType.ENDER_SIGNAL)) { - KList p = getEngine().getDimension().getStrongholds(getEngine().getSeedManager().getSpawn()); - Position2 px = new Position2(e.getEntity().getLocation().getBlockX(), e.getEntity().getLocation().getBlockZ()); - Position2 pr = null; - double d = Double.MAX_VALUE; + public void onItemUse(PlayerInteractEvent e) { + if(e.getItem() == null || e.getHand() != EquipmentSlot.HAND) + return; + if(e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.LEFT_CLICK_AIR) + return; + if(e.getPlayer().getWorld().equals(getTarget().getWorld().realWorld()) && e.getItem().getType() == Material.ENDER_EYE) { + KList positions = getEngine().getDimension().getStrongholds(getEngine().getSeedManager().getSpawn()); + if(positions.isEmpty()) + return; - Iris.debug("Ps: " + p.size()); + Position2 playerPos = new Position2(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockZ()); + Position2 pr = positions.get(0); + double d = pr.distance(playerPos); - for(Position2 i : p) { - Iris.debug("- " + i.getX() + " " + i.getZ()); - } - - for(Position2 i : p) { - double dx = i.distance(px); - if(dx < d) { - d = dx; - pr = i; - } - } - - if(pr != null) { - e.getEntity().getWorld().playSound(e.getEntity().getLocation(), Sound.ITEM_TRIDENT_THROW, 1f, 1.6f); - Location ll = new Location(e.getEntity().getWorld(), pr.getX(), 40, pr.getZ()); - Iris.debug("ESignal: " + ll.getBlockX() + " " + ll.getBlockZ()); - ((EnderSignal) e.getEntity()).setTargetLocation(ll); + for(Position2 pos : positions) { + double distance = pos.distance(playerPos); + if(distance < d) { + d = distance; + pr = pos; } } + + if(e.getPlayer().getGameMode() != GameMode.CREATIVE) { + if(e.getItem().getAmount() > 1) { + e.getPlayer().getInventory().getItemInMainHand().setAmount(e.getItem().getAmount() - 1); + } else { + e.getPlayer().getInventory().setItemInMainHand(null); + } + } + + EnderSignal eye = e.getPlayer().getWorld().spawn(e.getPlayer().getLocation().clone().add(0, 0.5F, 0), EnderSignal.class); + eye.setTargetLocation(new Location(e.getPlayer().getWorld(), pr.getX(), 40, pr.getZ())); + eye.getWorld().playSound(eye, Sound.ENTITY_ENDER_EYE_LAUNCH, 1, 1); + Iris.debug("ESignal: " + eye.getTargetLocation().getBlockX() + " " + eye.getTargetLocation().getBlockX()); } }