From a3c704462053442c33b2d71493eee9c628d47e23 Mon Sep 17 00:00:00 2001 From: Soper Date: Sun, 20 Jun 2021 02:58:05 -0400 Subject: [PATCH] implemented new setElevation and setDirection methods --- .../arty/event/Listener/MortarInteract.java | 22 +++++------------ src/xyz/soper/arty/item/Mortar.java | 24 ++++++++++++++----- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/xyz/soper/arty/event/Listener/MortarInteract.java b/src/xyz/soper/arty/event/Listener/MortarInteract.java index b5bbff6..ce96316 100644 --- a/src/xyz/soper/arty/event/Listener/MortarInteract.java +++ b/src/xyz/soper/arty/event/Listener/MortarInteract.java @@ -73,25 +73,15 @@ public class MortarInteract implements Listener { if(Mortar.isMortar(linkedLocation.getBlock())){ Block linkedMortar = linkedLocation.getBlock(); Vector playerDirection = player.getLocation().getDirection(); - /*TODO: convert to angles and get unit vector from angles - *right now, this does not properly get a direction vector - it is NOT a unit vector.*/ if(event.getAction() == Action.LEFT_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()); - - player.sendMessage("DEBUG: Angle is " + (180*horizonVector.angle(new Vector(1,0,0))/Math.PI)); - //Using new methods to test: - player.sendMessage("DEBUG: Angle with new basic trig method is " + ArtyMath.calculateDirectionBASICTRIG(playerDirection)); - - player.sendMessage("DEBUG: Angle with new dot product method is " + ArtyMath.calculateDirectionDOTPRODUCT(playerDirection)); + double angle = ArtyMath.calculateDirection(playerDirection); + Mortar.setDirectionAngle(linkedMortar, angle); + player.sendMessage("DEBUG: Angle is " + (180*angle/Math.PI)); } else if(event.getAction() == Action.RIGHT_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()); - player.sendMessage("DEBUG: Angle is " + (180*verticalVector.angle(new Vector(1,0,0))/Math.PI)); + double angle = ArtyMath.calculateElevation(playerDirection); + Mortar.setElevationAngle(linkedMortar, angle); + player.sendMessage("DEBUG: Angle is " + (180*angle/Math.PI)); } } else player.sendMessage(ChatColor.GOLD + "Linked position has no mortar."); diff --git a/src/xyz/soper/arty/item/Mortar.java b/src/xyz/soper/arty/item/Mortar.java index 409d118..102bffe 100644 --- a/src/xyz/soper/arty/item/Mortar.java +++ b/src/xyz/soper/arty/item/Mortar.java @@ -219,15 +219,27 @@ public class Mortar { } /** - * - * @param angle + * Adjust a block's elevation angle metadata. + * @param block Block that represents a mortar. + * @param angle Elevation angle in radians. */ - public static void setElevationAngle(double angle){ - //TODO: setElevationAngle method + public static void setElevationAngle(Block block, double angle){ + if(isMortar(block)){ + block.setMetadata("elevation_angle", new FixedMetadataValue(Artillery.getPlugin(Artillery.class), angle)); + } + else throw new IllegalArgumentException("Cannot set non-mortar block's elevation MetaData"); } - public static void setDirectionAngle(double angle){ - //TODO: setDirectionAngle method + /** + * Adjust a block's directional angle metadata. + * @param block Blocks that represents a mortar. + * @param angle Directional angle from the east in radians, corresponding to the Minecraft coordinate system. + */ + public static void setDirectionAngle(Block block, double angle){ + if(isMortar(block)){ + block.setMetadata("direction_angle", new FixedMetadataValue(Artillery.getPlugin(Artillery.class), angle)); + } + else throw new IllegalArgumentException("Cannot set non-mortar block's directional MetaData"); } private static boolean isStringMortar(String string){