package me.illusion.throwanything.listener; import me.illusion.throwanything.ThrowAnythingPlugin; import me.illusion.throwanything.event.PlayerPressHotkeyEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; 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.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.util.Vector; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class BlockLaunchListener implements Listener { private final ThrowAnythingPlugin main; private final Map grabbing = new HashMap<>(); public BlockLaunchListener(ThrowAnythingPlugin main) { this.main = main; } @EventHandler private void grab(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block block = event.getClickedBlock(); Player player = event.getPlayer(); Location eyeLocation = player.getEyeLocation(); Vector eyeDirection = eyeLocation.getDirection().normalize().multiply(1.3); Location targetLocation = eyeLocation.add(eyeDirection); FallingBlock fallingBlock = player.getWorld().spawnFallingBlock(targetLocation, block.getBlockData()); fallingBlock.setGravity(false); block.setType(Material.AIR); grabbing.put(player.getUniqueId(), fallingBlock.getUniqueId()); } @EventHandler private void onMove(PlayerMoveEvent event) { Player player = event.getPlayer(); UUID uuid = player.getUniqueId(); if (!grabbing.containsKey(uuid)) { System.out.println("No entity grabbed"); return; } FallingBlock fallingBlock = (FallingBlock) player.getWorld().getEntity(grabbing.get(uuid)); if (fallingBlock == null) { System.out.println("Entity not found"); return; } fallingBlock.teleport(player.getLocation()); } @EventHandler private void onHotkey(PlayerPressHotkeyEvent event) { Player player = event.getPlayer(); UUID entityId = grabbing.remove(player.getUniqueId()); if (entityId == null) { return; } Entity entity = Bukkit.getEntity(entityId); if (entity == null) { return; } entity.setGravity(true); Location eyeLocation = player.getEyeLocation(); Vector eyeDirection = eyeLocation.getDirection().normalize().multiply(1.8); entity.setVelocity(eyeDirection); } }