summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java')
-rw-r--r--src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java
new file mode 100644
index 0000000..97b5432
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java
@@ -0,0 +1,66 @@
+package com.redstoner.modules.blockplacemods.mods;
+
+import org.bukkit.GameMode;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.block.BlockPlaceEvent;
+
+import com.redstoner.modules.blockplacemods.BlockPlaceMod;
+import com.redstoner.modules.blockplacemods.ModType;
+
+public class ModPlayerDirectional extends BlockPlaceMod{
+
+ private final Material material;
+ private final boolean towards;
+
+ public ModPlayerDirectional(String name, Material material, String materialPlural, boolean towards, boolean invertLogic, boolean enabledByDefault) {
+ super(
+ name,
+ "With this mod enabled " + materialPlural + " are placed facing " + (towards? "towards you." : "away from you."),
+ ModType.STATELESS, null,
+ enabledByDefault,
+ "PlayerDirectional" + material.name().toLowerCase()
+ );
+
+ this.material = material;
+ this.towards = invertLogic? !towards : towards;
+ }
+
+ @EventHandler (priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onBlockPlace(BlockPlaceEvent event) {
+ Player player = event.getPlayer();
+ Block block = event.getBlock();
+
+ if (block.getType() == material && !player.isSneaking()
+ && hasEnabled(player) && player.getGameMode() == GameMode.CREATIVE) {
+
+ Directional data = (Directional) block.getBlockData();
+
+ data.setFacing(getNewDirection(player, towards));
+ block.setBlockData(data);
+ }
+ }
+
+ private BlockFace getNewDirection(Player player, boolean towards) {
+ double rotation = normalAngle(player.getLocation().getYaw());
+
+ if (rotation >= 315 || rotation < 45) // South
+ return towards? BlockFace.NORTH : BlockFace.SOUTH;
+ if (rotation >= 45 && rotation < 135) // West
+ return towards? BlockFace.EAST : BlockFace.WEST;
+ if (rotation >= 135 && rotation < 225) // North
+ return towards? BlockFace.SOUTH : BlockFace.NORTH;
+ else // East
+ return towards? BlockFace.WEST : BlockFace.EAST;
+ }
+
+ private double normalAngle(double angle) {
+ return (angle %= 360) >= 0 ? angle : (angle + 360);
+ }
+
+}