adding tuner interaction handling

master
Soper Aylamo 2021-05-26 03:15:51 -04:00
parent 73c72cbe41
commit dc4871bd3b
Signed by: Soper
GPG Key ID: A27AC885ACC3BEAE
1 changed files with 46 additions and 19 deletions

View File

@ -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(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){
if(Mortar.isMortar(event.getClickedBlock())){
MortarHandler.linkTuner(block, item);
player.updateInventory();
player.sendMessage(ChatColor.GOLD + "Linked Tuner with to Mortar at "
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();
}
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---");
}
}