From e90bf3a46cafebeacb017fb5ae4137fa19456e4f Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Mon, 26 Sep 2022 20:05:10 -0400 Subject: [PATCH] Fix several issues -OnGround check for half-blocks and walls/fences/gates -Improvements to LegacyMats item list --- .../api/agent/legacyagent/LegacyMats.java | 109 +++++++++++++++--- .../nuggetmc/tplus/api/utils/BotUtils.java | 26 +---- .../main/java/net/nuggetmc/tplus/bot/Bot.java | 47 +++++++- 3 files changed, 142 insertions(+), 40 deletions(-) diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyMats.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyMats.java index 53b2a5e..bffc333 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyMats.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyMats.java @@ -10,7 +10,6 @@ public class LegacyMats { public static final Set AIR = new HashSet<>(Arrays.asList( Material.WATER, - Material.OAK_TRAPDOOR, Material.FIRE, Material.LAVA, Material.SNOW, @@ -36,33 +35,64 @@ public class LegacyMats { Material.FIRE, Material.LAVA, Material.CAVE_AIR, + Material.VOID_AIR, + Material.AIR, Material.SOUL_FIRE )); public static final Set SHOVEL = new HashSet<>(Arrays.asList( + Material.CLAY, Material.DIRT, + Material.GRASS_BLOCK, + Material.COARSE_DIRT, + Material.PODZOL, + Material.MYCELIUM, Material.GRAVEL, + Material.MUD, + Material.MUDDY_MANGROVE_ROOTS, Material.SAND, - Material.SNOW + Material.RED_SAND, + Material.SOUL_SAND, + Material.SOUL_SOIL, + Material.SNOW, + Material.SNOW_BLOCK, + Material.BLACK_CONCRETE_POWDER, + Material.BLUE_CONCRETE_POWDER, + Material.CYAN_CONCRETE_POWDER, + Material.GRAY_CONCRETE_POWDER, + Material.GREEN_CONCRETE_POWDER, + Material.LIGHT_BLUE_CONCRETE_POWDER, + Material.LIGHT_GRAY_CONCRETE_POWDER, + Material.LIME_CONCRETE_POWDER, + Material.MAGENTA_CONCRETE_POWDER, + Material.ORANGE_CONCRETE_POWDER, + Material.PINK_CONCRETE_POWDER, + Material.PURPLE_CONCRETE_POWDER, + Material.RED_CONCRETE_POWDER, + Material.WHITE_CONCRETE_POWDER, + Material.YELLOW_CONCRETE_POWDER )); public static final Set AXE = new HashSet<>(Arrays.asList( - Material.OAK_PLANKS, Material.OAK_DOOR, Material.OAK_FENCE, Material.OAK_FENCE_GATE, Material.OAK_LOG, Material.OAK_PLANKS, + Material.OAK_PLANKS, Material.OAK_DOOR, Material.OAK_FENCE, Material.OAK_FENCE_GATE, Material.OAK_LOG, Material.OAK_SIGN, Material.OAK_SLAB, Material.OAK_STAIRS, Material.OAK_TRAPDOOR, Material.OAK_WALL_SIGN, Material.OAK_WOOD, - Material.DARK_OAK_PLANKS, Material.DARK_OAK_DOOR, Material.DARK_OAK_FENCE, Material.DARK_OAK_FENCE_GATE, Material.DARK_OAK_LOG, Material.DARK_OAK_PLANKS, + Material.DARK_OAK_PLANKS, Material.DARK_OAK_DOOR, Material.DARK_OAK_FENCE, Material.DARK_OAK_FENCE_GATE, Material.DARK_OAK_LOG, Material.DARK_OAK_SIGN, Material.DARK_OAK_SLAB, Material.DARK_OAK_STAIRS, Material.DARK_OAK_TRAPDOOR, Material.DARK_OAK_WALL_SIGN, Material.DARK_OAK_WOOD, - Material.ACACIA_PLANKS, Material.ACACIA_DOOR, Material.ACACIA_FENCE, Material.ACACIA_FENCE_GATE, Material.ACACIA_LOG, Material.ACACIA_PLANKS, + Material.ACACIA_PLANKS, Material.ACACIA_DOOR, Material.ACACIA_FENCE, Material.ACACIA_FENCE_GATE, Material.ACACIA_LOG, Material.ACACIA_SIGN, Material.ACACIA_SLAB, Material.ACACIA_STAIRS, Material.ACACIA_TRAPDOOR, Material.ACACIA_WALL_SIGN, Material.ACACIA_WOOD, - Material.BIRCH_PLANKS, Material.BIRCH_DOOR, Material.BIRCH_FENCE, Material.BIRCH_FENCE_GATE, Material.BIRCH_LOG, Material.BIRCH_PLANKS, + Material.BIRCH_PLANKS, Material.BIRCH_DOOR, Material.BIRCH_FENCE, Material.BIRCH_FENCE_GATE, Material.BIRCH_LOG, Material.BIRCH_SIGN, Material.BIRCH_SLAB, Material.BIRCH_STAIRS, Material.BIRCH_TRAPDOOR, Material.BIRCH_WALL_SIGN, Material.BIRCH_WOOD, - Material.JUNGLE_PLANKS, Material.JUNGLE_DOOR, Material.JUNGLE_FENCE, Material.JUNGLE_FENCE_GATE, Material.JUNGLE_LOG, Material.JUNGLE_PLANKS, + Material.JUNGLE_PLANKS, Material.JUNGLE_DOOR, Material.JUNGLE_FENCE, Material.JUNGLE_FENCE_GATE, Material.JUNGLE_LOG, Material.JUNGLE_SIGN, Material.JUNGLE_SLAB, Material.JUNGLE_STAIRS, Material.JUNGLE_TRAPDOOR, Material.JUNGLE_WALL_SIGN, Material.JUNGLE_WOOD, - Material.SPRUCE_PLANKS, Material.SPRUCE_DOOR, Material.SPRUCE_FENCE, Material.SPRUCE_FENCE_GATE, Material.SPRUCE_LOG, Material.SPRUCE_PLANKS, + Material.SPRUCE_PLANKS, Material.SPRUCE_DOOR, Material.SPRUCE_FENCE, Material.SPRUCE_FENCE_GATE, Material.SPRUCE_LOG, Material.SPRUCE_SIGN, Material.SPRUCE_SLAB, Material.SPRUCE_STAIRS, Material.SPRUCE_TRAPDOOR, Material.SPRUCE_WALL_SIGN, Material.SPRUCE_WOOD, - Material.CRIMSON_PLANKS, Material.CRIMSON_DOOR, Material.CRIMSON_FENCE, Material.CRIMSON_FENCE_GATE, Material.CRIMSON_PLANKS, + Material.MANGROVE_PLANKS, Material.MANGROVE_DOOR, Material.MANGROVE_FENCE, Material.MANGROVE_FENCE_GATE, Material.MANGROVE_LOG, + Material.MANGROVE_SIGN, Material.MANGROVE_SLAB, Material.MANGROVE_STAIRS, Material.MANGROVE_TRAPDOOR, Material.MANGROVE_WALL_SIGN, Material.MANGROVE_WOOD, + Material.CRIMSON_PLANKS, Material.CRIMSON_DOOR, Material.CRIMSON_FENCE, Material.CRIMSON_FENCE_GATE, Material.CRIMSON_STEM, Material.CRIMSON_SIGN, Material.CRIMSON_SLAB, Material.CRIMSON_STAIRS, Material.CRIMSON_TRAPDOOR, Material.CRIMSON_WALL_SIGN, - Material.WARPED_PLANKS, Material.WARPED_DOOR, Material.WARPED_FENCE, Material.WARPED_FENCE_GATE, Material.WARPED_PLANKS, - Material.WARPED_SIGN, Material.WARPED_SLAB, Material.WARPED_STAIRS, Material.WARPED_TRAPDOOR, Material.WARPED_WALL_SIGN + Material.WARPED_PLANKS, Material.WARPED_DOOR, Material.WARPED_FENCE, Material.WARPED_FENCE_GATE, Material.WARPED_STEM, + Material.WARPED_SIGN, Material.WARPED_SLAB, Material.WARPED_STAIRS, Material.WARPED_TRAPDOOR, Material.WARPED_WALL_SIGN, + Material.CHEST, Material.TRAPPED_CHEST )); public static final Set BREAK = new HashSet<>(Arrays.asList( @@ -145,24 +175,75 @@ public class LegacyMats { Material.NETHER_BRICK_FENCE, Material.SPRUCE_FENCE, Material.WARPED_FENCE, + Material.MANGROVE_FENCE, Material.COBBLESTONE_WALL, + Material.MOSSY_COBBLESTONE_WALL, + Material.MOSSY_STONE_BRICK_WALL, + Material.STONE_BRICK_WALL, + Material.PRISMARINE_WALL, Material.ANDESITE_WALL, Material.BLACKSTONE_WALL, + Material.POLISHED_BLACKSTONE_BRICK_WALL, + Material.POLISHED_BLACKSTONE_WALL, Material.BRICK_WALL, Material.GRANITE_WALL, Material.DIORITE_WALL, Material.SANDSTONE_WALL, Material.RED_SANDSTONE_WALL, Material.RED_NETHER_BRICK_WALL, - Material.IRON_BARS, - Material.COBWEB + Material.NETHER_BRICK_WALL, + Material.END_STONE_BRICK_WALL, + Material.POLISHED_DEEPSLATE_WALL, + Material.COBBLED_DEEPSLATE_WALL, + Material.DEEPSLATE_BRICK_WALL, + Material.DEEPSLATE_TILE_WALL, + Material.MUD_BRICK_WALL + )); + + public static final Set GATES = new HashSet<>(Arrays.asList( + Material.ACACIA_FENCE_GATE, + Material.BIRCH_FENCE_GATE, + Material.DARK_OAK_FENCE_GATE, + Material.JUNGLE_FENCE_GATE, + Material.OAK_FENCE_GATE, + Material.SPRUCE_FENCE_GATE, + Material.MANGROVE_FENCE_GATE, + Material.CRIMSON_FENCE_GATE, + Material.WARPED_FENCE_GATE + )); + + public static final Set OBSTACLES = new HashSet<>(Arrays.asList( + Material.IRON_BARS, + Material.CHAIN, + Material.END_ROD, + Material.COBWEB, + Material.FLOWER_POT, + Material.GLASS_PANE )); + public static final Set IGNORED = new HashSet<>(Arrays.asList( + Material.ACACIA_BUTTON, + Material.BIRCH_BUTTON, + Material.CRIMSON_BUTTON, + Material.DARK_OAK_BUTTON, + Material.JUNGLE_BUTTON, + Material.MANGROVE_BUTTON, + Material.OAK_BUTTON, + Material.POLISHED_BLACKSTONE_BUTTON, + Material.SPRUCE_BUTTON, + Material.STONE_BUTTON, + Material.WARPED_BUTTON, + Material.TWISTING_VINES, + Material.TWISTING_VINES_PLANT + )); + public static final Set LEAVES = new HashSet<>(Arrays.asList( Material.BIRCH_LEAVES, Material.DARK_OAK_LEAVES, Material.JUNGLE_LEAVES, Material.OAK_LEAVES, - Material.SPRUCE_LEAVES + Material.SPRUCE_LEAVES, + Material.FLOWERING_AZALEA_LEAVES, + Material.MANGROVE_LEAVES )); } diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/utils/BotUtils.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/utils/BotUtils.java index 6349309..ee4a9e4 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/utils/BotUtils.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/utils/BotUtils.java @@ -1,11 +1,7 @@ package net.nuggetmc.tplus.api.utils; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.block.Block; import org.bukkit.util.BoundingBox; -import org.bukkit.util.Vector; - import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -29,24 +25,8 @@ public class BotUtils { return randomSteveUUID(); } - - public static boolean solidAt(Location loc) { // not perfect, still cuts corners of fences - Block block = loc.getBlock(); - BoundingBox box = block.getBoundingBox(); - Vector position = loc.toVector(); - - double x = position.getX(); - double y = position.getY(); - double z = position.getZ(); - - double minX = box.getMinX(); - double minY = box.getMinY(); - double minZ = box.getMinZ(); - - double maxX = box.getMaxX(); - double maxY = box.getMaxY(); - double maxZ = box.getMaxZ(); - - return x > minX && x < maxX && y > minY && y < maxY && z > minZ && z < maxZ; + + public static boolean solidAt(BoundingBox playerBox, BoundingBox blockBox) { + return playerBox.overlaps(blockBox); } } diff --git a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java index cdf8d5e..9ddcfcb 100644 --- a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java +++ b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java @@ -2,8 +2,6 @@ package net.nuggetmc.tplus.bot; import com.mojang.authlib.GameProfile; import com.mojang.datafixers.util.Pair; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; @@ -27,6 +25,7 @@ import net.minecraft.world.phys.Vec3; import net.nuggetmc.tplus.TerminatorPlus; import net.nuggetmc.tplus.api.Terminator; import net.nuggetmc.tplus.api.agent.Agent; +import net.nuggetmc.tplus.api.agent.legacyagent.LegacyMats; import net.nuggetmc.tplus.api.agent.legacyagent.ai.NeuralNetwork; import net.nuggetmc.tplus.api.event.BotDamageByPlayerEvent; import net.nuggetmc.tplus.api.event.BotFallDamageEvent; @@ -35,6 +34,7 @@ import net.nuggetmc.tplus.api.utils.*; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.data.type.Candle; import org.bukkit.craftbukkit.v1_19_R1.CraftEquipmentSlot; import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; @@ -45,6 +45,7 @@ import org.bukkit.entity.Damageable; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; @@ -537,21 +538,61 @@ public class Bot extends ServerPlayer implements Terminator { box.minZ, box.maxZ }; + BoundingBox playerBox = new BoundingBox(box.minX, position().y - 0.01, box.minZ, + box.maxX, position().y + getBbHeight(), box.maxZ); for (double x : xVals) { for (double z : zVals) { Location loc = new Location(world, x, position().y - 0.01, z); Block block = world.getBlockAt(loc); - if (block.getType().isSolid() && BotUtils.solidAt(loc)) { + if ((block.getType().isSolid() || canStandOn(block.getType())) && BotUtils.solidAt(playerBox, block.getBoundingBox())) { return true; } } } + + //Fence/wall check + for (double x : xVals) { + for (double z : zVals) { + Location loc = new Location(world, x, position().y - 0.51, z); + Block block = world.getBlockAt(loc); + BoundingBox blockBox = loc.getBlock().getBoundingBox(); + BoundingBox modifiedBox = new BoundingBox(blockBox.getMinX(), blockBox.getMinY(), blockBox.getMinZ(), blockBox.getMaxX(), + blockBox.getMinY() + 1.5, blockBox.getMaxZ()); + + if ((LegacyMats.FENCE.contains(block.getType()) || LegacyMats.GATES.contains(block.getType())) + && block.getType().isSolid() && BotUtils.solidAt(playerBox, modifiedBox)) { + return true; + } + } + } return false; } + /** + * Checks for non-solid blocks that can hold an entity up. + */ + private boolean canStandOn(Material mat) + { + if(mat == Material.END_ROD || mat == Material.FLOWER_POT || mat == Material.REPEATER || mat == Material.COMPARATOR + || mat == Material.SNOW || mat == Material.LADDER || mat == Material.VINE) + return true; + + if(mat == Material.BLACK_CARPET || mat == Material.BLUE_CARPET || mat == Material.BROWN_CARPET || mat == Material.CYAN_CARPET + || mat == Material.GRAY_CARPET || mat == Material.GREEN_CARPET || mat == Material.LIGHT_BLUE_CARPET + || mat == Material.LIGHT_GRAY_CARPET || mat == Material.LIME_CARPET || mat == Material.MAGENTA_CARPET + || mat == Material.MOSS_CARPET || mat == Material.ORANGE_CARPET || mat == Material.PINK_CARPET + || mat == Material.PURPLE_CARPET || mat == Material.RED_CARPET || mat == Material.WHITE_CARPET + || mat == Material.YELLOW_CARPET) + return true; + + if(mat.data == Candle.class) + return true; + return false; + } + @Override public boolean isBotOnGround() { return groundTicks != 0;