From dead7a0850da0ea2c2c3b39fc94f2016c6e740f6 Mon Sep 17 00:00:00 2001 From: William Burns Date: Thu, 25 Feb 2016 16:09:00 +0000 Subject: [PATCH] Use a different method for targeting blocks. --- .../mineplex/core/common/util/UtilPlayer.java | 45 +++++++++++++++++++ .../game/arcade/game/games/draw/Draw.java | 8 ++-- .../arcade/game/games/draw/tools/Tool.java | 7 ++- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java index 268a3cbc8..35664b776 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java @@ -15,6 +15,7 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory; @@ -30,6 +31,8 @@ import net.minecraft.server.v1_8_R3.EntityPlayer; import net.minecraft.server.v1_8_R3.Packet; import net.minecraft.server.v1_8_R3.PlayerConnection; +import org.apache.commons.lang3.Validate; + public class UtilPlayer { private static Random RANDOM = new Random(); @@ -755,4 +758,46 @@ public class UtilPlayer looking.multiply(distance); return player.getEyeLocation().clone().add(looking); } + + public static Block getTargetBlock(List ignore, Entity entity, int minDistance, int maxDistance) + { + Location location = offset(entity, minDistance, false); + + Validate.isTrue(maxDistance > minDistance, "Max distance must be larger than min distance."); + + for (int i = 0; i < maxDistance - minDistance; i++) + { + Material type = location.getBlock().getType(); + + if (i + maxDistance >= maxDistance) + { + break; + } + + if (ignore != null && !ignore.contains(type) || ignore == null && !type.equals(Material.AIR)) + { + break; + } + + location = offset(entity, 1, false); + } + + return location.getBlock(); + } + + private static Location offset(Entity entity, double strength, boolean reverse) + { + double x = entity.getLocation().getBlockX(); + double y = entity.getLocation().getBlockY(); + double z = entity.getLocation().getBlockZ(); + + double yaw = Math.toRadians(entity.getLocation().getYaw()); + double pitch = Math.toRadians(entity.getLocation().getPitch()); + + x = reverse ? (x + strength * Math.sin(yaw)) : (x - strength * Math.sin(yaw)); + y = reverse ? (y + strength * Math.sin(pitch)) : (y - strength * Math.sin(pitch)); + z = reverse ? (z - strength * Math.cos(yaw)) : (z + strength * Math.cos(yaw)); + + return new Location(entity.getWorld(), x, y, z); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java index c30b0ba1c..d0be4db71 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java @@ -587,7 +587,7 @@ public class Draw extends SoloGame continue; } - Block block = p.getTargetBlock(UtilBlock.blockPassSet, 400); + Block block = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), p, 50, 400); if (block == null || !_canvas.contains(block)) continue; @@ -646,7 +646,7 @@ public class Draw extends SoloGame continue; } - Block block = player.getTargetBlock(UtilBlock.blockPassSet, 400); + Block block = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), player, 50, 400); if (block == null || !_canvas.contains(block)) continue; @@ -760,7 +760,7 @@ public class Draw extends SoloGame } // Get the target block that the player clicks on. - Block target = p.getTargetBlock(UtilBlock.blockPassSet, 400); + Block target = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), p, 50, 400); if (target == null || !_canvas.contains(target)) { @@ -843,7 +843,7 @@ public class Draw extends SoloGame if (!_drawers.HasPlayer(player)) return; - Block block = player.getTargetBlock(UtilBlock.blockPassSet, 400); + Block block = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), player, 50, 400); List possibleBlocks = UtilBlock.getInBoundingBox(WorldData.GetDataLocs("GREEN").get(0), WorldData.GetDataLocs("GREEN").get(1)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/tools/Tool.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/tools/Tool.java index acc0ecceb..042750c22 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/tools/Tool.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/tools/Tool.java @@ -1,12 +1,14 @@ package nautilus.game.arcade.game.games.draw.tools; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilEvent.ActionType; import nautilus.game.arcade.game.games.draw.BlockInfo; @@ -40,7 +42,8 @@ public abstract class Tool { if (!UtilEvent.isAction(event, ActionType.R)) return; - Block block = event.getPlayer().getTargetBlock(UtilBlock.blockPassSet, 400); + + Block block = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), event.getPlayer(), 50, 400); if (block == null) return; @@ -73,7 +76,7 @@ public abstract class Tool _new = new HashMap(); //Calculate New - Block end = _drawer.getTargetBlock(UtilBlock.blockPassSet, 400); + Block end = UtilPlayer.getTargetBlock(Arrays.asList(Material.BARRIER, Material.AIR), _drawer, 50, 400); if (end != null && Host.getCanvas().contains(end)) { customDraw(end);