summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java')
-rw-r--r--src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java
new file mode 100644
index 0000000..fac5727
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java
@@ -0,0 +1,73 @@
+package com.redstoner.modules.blockplacemods.mods;
+
+import com.redstoner.modules.blockplacemods.BlockPlaceMod;
+import com.redstoner.modules.blockplacemods.ModType;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.block.BlockPlaceEvent;
+
+public class ModLogDirectional extends BlockPlaceMod {
+ private static final BlockFace[][][] dirMap = {
+ {
+ { null, null, null },
+ { null, BlockFace.WEST, null }, // (-1, 0, 0)
+ { null, null, null }
+ },
+ {
+ { null, BlockFace.DOWN, null }, // (0, -1, 0)
+ { BlockFace.NORTH, BlockFace.SELF, BlockFace.SOUTH }, // (0, 0, x)
+ { null, BlockFace.UP, null } // (0, 1, 0)
+ },
+ {
+ { null, null, null },
+ { null, BlockFace.EAST, null }, // (1, 0, 0)
+ { null, null, null }
+ }
+ };
+
+ private final Material material;
+
+ public ModLogDirectional(String name, Material material, String materialPlural, boolean enabledByDefault) {
+ super(
+ name,
+ "With this mod enabled " + materialPlural + " are placed with the bottom on the block clicked.",
+ ModType.STATELESS,
+ null,
+ enabledByDefault,
+ "LogDirectional" + material.name().toLowerCase()
+ );
+
+ this.material = material;
+ }
+
+ @EventHandler (priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onBlockPlace(BlockPlaceEvent event) {
+ if (
+ event.getBlock().getType() == material
+ && !event.getPlayer().isSneaking()
+ && hasEnabled(event.getPlayer())
+ && event.getPlayer().getGameMode() == GameMode.CREATIVE
+ ) {
+ Block block = event.getBlock();
+ Directional data = (Directional) block.getBlockData();
+
+ data.setFacing(getDirection(event));
+ block.setBlockData(data);
+ }
+ }
+
+ private BlockFace getDirection(BlockPlaceEvent event) {
+ Location original = event.getBlockPlaced().getLocation();
+ Location against = event.getBlockAgainst().getLocation();
+
+ Location dir = original.subtract(against);
+
+ return dirMap[dir.getBlockX() + 1][dir.getBlockY() + 1][dir.getBlockZ() + 1];
+ }
+}