From dc4871bd3b86ae333d735627a6523fed7e3d41dc Mon Sep 17 00:00:00 2001 From: Soper Date: Wed, 26 May 2021 03:15:51 -0400 Subject: [PATCH] adding tuner interaction handling --- .../arty/event/Listener/MortarInteract.java | 65 +++++++++++++------ 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/src/xyz/soper/arty/event/Listener/MortarInteract.java b/src/xyz/soper/arty/event/Listener/MortarInteract.java index d7eac6c..c257e34 100644 --- a/src/xyz/soper/arty/event/Listener/MortarInteract.java +++ b/src/xyz/soper/arty/event/Listener/MortarInteract.java @@ -1,8 +1,9 @@ package xyz.soper.arty.event.Listener; import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.block.Block; -import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -11,6 +12,7 @@ import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; import xyz.soper.arty.item.Mortar; import xyz.soper.arty.item.MortarTuner; import xyz.soper.arty.item.Shell; @@ -33,41 +35,69 @@ public class MortarInteract implements Listener { if(Shell.isShell(item)){ player.sendMessage("DEBUG: Player has a shell in hand."); MortarHandler.fireShell(new Mortar(block), new Shell(item), player); - if(item.getAmount() > 1) item.setAmount(item.getAmount()-1); - else player.getInventory().setItemInMainHand(null); + if(player.getGameMode() != GameMode.CREATIVE){ + if(item.getAmount() > 1) item.setAmount(item.getAmount()-1); + else player.getInventory().setItemInMainHand(null); + } } } } if(MortarTuner.isTuner(item)){ + MortarTuner tuner = new MortarTuner(item); + Location linkedLocation = tuner.getLinkedLocation(); + if(linkedLocation != null) linkedLocation.setWorld(player.getWorld()); + player.sendMessage("DEBUG: Player has a tuner in hand."); if(player.isSneaking()){ if(event.getAction() == Action.RIGHT_CLICK_BLOCK){ - MortarHandler.linkTuner(block, item); + if(Mortar.isMortar(event.getClickedBlock())){ + MortarHandler.linkTuner(block, item); + player.sendMessage(ChatColor.GOLD + "Linked Tuner with Mortar at " + + block.getLocation().getBlockX() + ", " + + block.getLocation().getBlockY() + ", " + + block.getLocation().getBlockZ()); + } + else{ + MortarHandler.linkTuner(null, item); + player.sendMessage(ChatColor.GOLD + "Unlinked tuner."); + } player.updateInventory(); - player.sendMessage(ChatColor.GOLD + "Linked Tuner with to Mortar at " - + block.getLocation().getBlockX() + ", " - + block.getLocation().getBlockY() + ", " - + block.getLocation().getBlockZ()); + } + else if(event.getAction() == Action.RIGHT_CLICK_AIR + || event.getAction() == Action.LEFT_CLICK_AIR){ + if(linkedLocation == null){ + player.sendMessage(ChatColor.GOLD + "Tuner is not linked to anything."); + } + else if(linkedLocation.distance(player.getLocation()) < 2){ + if(Mortar.isMortar(linkedLocation.getBlock())){ + Block linkedMortar = linkedLocation.getBlock(); + Vector playerDirection = player.getLocation().getDirection(); + if(event.getAction() == Action.RIGHT_CLICK_AIR){ + Vector horizonVector = new Vector(playerDirection.getX(), 0, playerDirection.getZ()); + Mortar.setMortarDirection(linkedMortar, horizonVector); + player.sendMessage(ChatColor.GOLD + "Mortar is now pointing towards " + horizonVector.getX() + ", " + horizonVector.getZ()); + } + else if(event.getAction() == Action.LEFT_CLICK_AIR){ + Vector verticalVector = new Vector(0, playerDirection.getY(), 0); + Mortar.setMortarDirection(linkedMortar, verticalVector); + player.sendMessage(ChatColor.GOLD + "Mortar is now pointing up with a vector " + verticalVector.getY()); + } + } + else player.sendMessage(ChatColor.GOLD + "Linked position has no mortar."); + } } } else{ + } } } @EventHandler public void onShellLand(ProjectileHitEvent event){ - //START DEBUG - System.out.println(ChatColor.GOLD + "------ARTY-DEBUG:------"); - System.out.println(event.getEntity().getCustomName()); - System.out.println(event.getEntity().getShooter()); - System.out.println(Shell.isShell(event.getEntity())); - //END DEBUG if(Shell.isShell(event.getEntity())){ Shell shell = new Shell(event.getEntity()); - /*DEBUG*/System.out.println("Projectile is an arrow, not null, and a shell"); if(event.getHitBlock() != null){ - /*DEBUG*/System.out.println("Projectile hit a block, exploding shell in front of block."); shell.explodeShell( event.getHitBlock() .getLocation() @@ -79,12 +109,9 @@ public class MortarInteract implements Listener { event.getEntity().remove(); } else if(event.getHitEntity() != null){ - /*DEBUG*/System.out.println("Projectile hit an entity, exploding shell on entity."); shell.explodeShell(event.getHitEntity().getLocation()); event.getEntity().remove(); } } - /*DEBUG*/System.out.println("Ending onShellLand event"); - /*DEBUG*/System.out.println(ChatColor.GOLD + "---END OF ARTY-DEBUG---"); } }