diff options
author | Minenash <minenash@protonmail.com> | 2019-01-31 15:48:00 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-31 15:48:00 -0500 |
commit | e0714e77b7bceacaba61ed9dc0808ab78df42402 (patch) | |
tree | 1a395b403dea7b2a2cd12a627e22a50080f6315a /src/main/java/com/redstoner/modules/blockplacemods/mods/ModPlayerDirectional.java | |
parent | c996392ba341be7b676238009fa6e3c7ff33022e (diff) | |
parent | 31d1ae29e7a15fe6650544ca381fe6c5e4e3d81b (diff) |
Merge pull request #44 from RedstonerServer/dev
Removed `/anvil` and Added new Mods for BlockPlaceMods
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.java | 66 |
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); + } + +} |