Archived
0

Added Mods for repeaters & comparators and updated (and fixed) version

This commit is contained in:
Minenash
2019-01-30 23:58:52 -05:00
parent ffa031a243
commit ce8a0a6813
2 changed files with 70 additions and 1 deletions

View File

@@ -9,6 +9,7 @@ import com.redstoner.misc.CommandHolderType;
import com.redstoner.misc.Main; import com.redstoner.misc.Main;
import com.redstoner.modules.Module; import com.redstoner.modules.Module;
import com.redstoner.modules.blockplacemods.mods.ModLogDirectional; import com.redstoner.modules.blockplacemods.mods.ModLogDirectional;
import com.redstoner.modules.blockplacemods.mods.ModPlayerDirectional;
import com.redstoner.modules.blockplacemods.mods.ModCauldron; import com.redstoner.modules.blockplacemods.mods.ModCauldron;
import com.redstoner.modules.blockplacemods.mods.ModSlab; import com.redstoner.modules.blockplacemods.mods.ModSlab;
import com.redstoner.modules.datamanager.DataManager; import com.redstoner.modules.datamanager.DataManager;
@@ -27,7 +28,7 @@ import java.util.Map;
@Commands (CommandHolderType.File) @Commands (CommandHolderType.File)
@AutoRegisterListener @AutoRegisterListener
@Version (major = 4, minor = 1, revision = 1, compatible = 4) @Version (major = 5, minor = 2, revision = 0, compatible = 4)
public class BlockPlaceMods implements Module, Listener { public class BlockPlaceMods implements Module, Listener {
private static final Map<String, BlockPlaceMod> mods = new HashMap<>(); private static final Map<String, BlockPlaceMod> mods = new HashMap<>();
private static final List<BlockPlaceMod> enabledMods = new ArrayList<>(); private static final List<BlockPlaceMod> enabledMods = new ArrayList<>();
@@ -37,6 +38,8 @@ public class BlockPlaceMods implements Module, Listener {
new ModSlab(), new ModSlab(),
new ModLogDirectional("Observer", Material.OBSERVER, "observers", false), new ModLogDirectional("Observer", Material.OBSERVER, "observers", false),
new ModLogDirectional("Piston", Material.PISTON, "pistons", false), new ModLogDirectional("Piston", Material.PISTON, "pistons", false),
new ModPlayerDirectional("Repeater", Material.REPEATER, "repeaters", true, true, false),
new ModPlayerDirectional("Comparator", Material.COMPARATOR, "comparators", true, true, false),
}; };
@Override @Override

View File

@@ -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);
}
}