diff options
Diffstat (limited to 'src/main/java/com/redstoner/modules/blockplacemods/mods')
-rw-r--r-- | src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java (renamed from src/main/java/com/redstoner/modules/blockplacemods/mods/ModBetterDirectional.java) | 6 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java | 66 |
2 files changed, 69 insertions, 3 deletions
diff --git a/src/main/java/com/redstoner/modules/blockplacemods/mods/ModBetterDirectional.java b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java index 99a9f5d..fac5727 100644 --- a/src/main/java/com/redstoner/modules/blockplacemods/mods/ModBetterDirectional.java +++ b/src/main/java/com/redstoner/modules/blockplacemods/mods/ModLogDirectional.java @@ -12,7 +12,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockPlaceEvent; -public class ModBetterDirectional extends BlockPlaceMod { +public class ModLogDirectional extends BlockPlaceMod { private static final BlockFace[][][] dirMap = { { { null, null, null }, @@ -33,14 +33,14 @@ public class ModBetterDirectional extends BlockPlaceMod { private final Material material; - public ModBetterDirectional(String name, Material material, String materialPlural, boolean enabledByDefault) { + 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, - "BetterDirectional" + material.name().toLowerCase() + "LogDirectional" + material.name().toLowerCase() ); this.material = material; 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); + } + +} |