diff --git a/Anticheat/pom.xml b/Anticheat/pom.xml index 19344bd..1eba2b9 100644 --- a/Anticheat/pom.xml +++ b/Anticheat/pom.xml @@ -115,12 +115,6 @@ 1.0-SNAPSHOT compile - - org.github.spigot - 1.13 - 1.13 - provided - me.mat1337.loader loader diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/CheckStatic.java b/Anticheat/src/main/java/dev/brighten/ac/check/CheckStatic.java index 2f37c34..260259e 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/CheckStatic.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/CheckStatic.java @@ -71,7 +71,7 @@ public class CheckStatic { } } - public Check playerInit(APlayer player) { + public T playerInit(APlayer player) { return initConst.newInstance(player); } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/Hook.java b/Anticheat/src/main/java/dev/brighten/ac/check/Hook.java new file mode 100644 index 0000000..f3eddef --- /dev/null +++ b/Anticheat/src/main/java/dev/brighten/ac/check/Hook.java @@ -0,0 +1,8 @@ +package dev.brighten.ac.check; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface Hook { +} diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/KListener.java b/Anticheat/src/main/java/dev/brighten/ac/check/KListener.java new file mode 100644 index 0000000..59cfca7 --- /dev/null +++ b/Anticheat/src/main/java/dev/brighten/ac/check/KListener.java @@ -0,0 +1,24 @@ +package dev.brighten.ac.check; + +import dev.brighten.ac.data.APlayer; + +import java.util.Optional; + +public class KListener { + + public final APlayer player; + + public KListener(APlayer player) { + this.player = player; + } + + public Optional find(Class checkClass) { + Check check = player.getCheckHandler().findCheck(checkClass); + + if(check != null) { + return Optional.of(checkClass.cast(check)); + } + + return Optional.empty(); + } +} diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java index f456ce3..9b6c2e3 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java @@ -1,9 +1,9 @@ package dev.brighten.ac.check.impl.combat.killaura.calc; -import dev.brighten.ac.api.check.CheckType; -import dev.brighten.ac.check.Check; -import dev.brighten.ac.check.CheckData; +import dev.brighten.ac.check.Hook; +import dev.brighten.ac.check.KListener; import dev.brighten.ac.check.WAction; +import dev.brighten.ac.check.impl.combat.killaura.calc.impl.KAZero; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.packet.wrapper.in.WPacketPlayInFlying; import dev.brighten.ac.utils.EntityLocation; @@ -14,14 +14,11 @@ import dev.brighten.ac.utils.annotation.Bind; import dev.brighten.ac.utils.objects.evicting.EvictingList; import org.bukkit.util.Vector; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -@CheckData(name = "KillAura (Calc)", checkId = "kacalc", type = CheckType.KILLAURA) -public abstract class KACalc extends Check { - - private final List CALCULATION_CHECKS = new ArrayList<>(); +@Hook +public class KACalc extends KListener { public KACalc(APlayer player) { super(player); } @@ -29,8 +26,6 @@ public abstract class KACalc extends Check { private final List YAW_OFFSET = new EvictingList<>(10), PITCH_OFFSET = new EvictingList<>(10); - private int buffer; - @Bind WAction flying = packet -> { if(player.getInfo().getTarget() == null || player.getInfo().lastAttack.isPassed(40)) return; @@ -63,16 +58,6 @@ public abstract class KACalc extends Check { std[0] = MathUtils.stdev(YAW_OFFSET); std[1] = MathUtils.stdev(PITCH_OFFSET); - for (KACalc check : CALCULATION_CHECKS) { - check.runCheck(tuple, std, offset, rotations); - } + find(KAZero.class).ifPresent(zero -> zero.runCheck(tuple, std, offset, rotations)); }; - - /** - * - * @param std double[] - Standard deviation of the offset. Arg 0 is yaw, arg 1 is pitch. - * @param offset double[] - Offset of the target. Arg 0 is yaw, arg 1 is pitch. - * @param rot float[] - Rotations to the target. Arg 0 is yaw, arg 1 is pitch. - */ - public abstract void runCheck(Tuple locs, double[] std, double[] offset, float[] rot); } diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/RotationCheck.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/RotationCheck.java new file mode 100644 index 0000000..3b2b965 --- /dev/null +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/RotationCheck.java @@ -0,0 +1,8 @@ +package dev.brighten.ac.check.impl.combat.killaura.calc; + +import dev.brighten.ac.utils.EntityLocation; +import dev.brighten.ac.utils.Tuple; + +public interface RotationCheck { + void runCheck(Tuple locs, double[] std, double[] offset, float[] rot); +} diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAZero.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAZero.java new file mode 100644 index 0000000..a86f47e --- /dev/null +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAZero.java @@ -0,0 +1,29 @@ +package dev.brighten.ac.check.impl.combat.killaura.calc.impl; + +import dev.brighten.ac.api.check.CheckType; +import dev.brighten.ac.check.Check; +import dev.brighten.ac.check.CheckData; +import dev.brighten.ac.check.impl.combat.killaura.calc.RotationCheck; +import dev.brighten.ac.data.APlayer; +import dev.brighten.ac.utils.EntityLocation; +import dev.brighten.ac.utils.Tuple; + +@CheckData(name = "KillAura (Zero)", checkId = "kacalczero", type = CheckType.KILLAURA) +public class KAZero extends Check implements RotationCheck { + public KAZero(APlayer player) { + super(player); + } + + private int buffer; + + @Override + public void runCheck(Tuple locs, double[] std, double[] offset, float[] rot) { + if(offset[0] == 0) { + if(++buffer > 2) { + flag("y=%.2f dy=.3f", offset[1], player.getMovement().getDeltaYaw()); + } + } else buffer = 0; + + debug("offset=%s", offset[0]); + } +} diff --git a/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java b/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java index 0baaa35..b011355 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java +++ b/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java @@ -29,12 +29,12 @@ import java.util.*; public class LogsCommand extends BaseCommand { @Subcommand("logs") - @Syntax("[player] [check]") + @Syntax("[player] [check] [limit]") @CommandCompletion("@players @checkIds") @CommandPermission("anticheat.command.logs") @Description("Get player logs") public void onLogs(CommandSender sender, @Single String playername, - @Single @Optional @Default("none") String check) { + @Single @Optional @Default("none") String check, @Single @Optional @Default("5000") int limit) { UUID uuid = Bukkit.getOfflinePlayer(playername).getUniqueId(); sender.sendMessage(Color.Red + "Getting logs for " + playername + "..."); @@ -53,7 +53,7 @@ public class LogsCommand extends BaseCommand { List logs = new ArrayList<>(); if(check.equals("none")) { - Anticheat.INSTANCE.getLogManager().getLogs(uuid, logsList -> { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, limit, logsList -> { logsList.forEach(log -> { logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " @@ -75,7 +75,7 @@ public class LogsCommand extends BaseCommand { } }); } else { - Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, logsList -> { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, limit, logsList -> { logsList.forEach(log -> { logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " diff --git a/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java b/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java index 520fc31..f15ba0a 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java +++ b/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java @@ -6,7 +6,9 @@ import dev.brighten.ac.data.APlayer; import dev.brighten.ac.data.obj.ActionStore; import dev.brighten.ac.data.obj.CancellableActionStore; import dev.brighten.ac.data.obj.TimedActionStore; +import dev.brighten.ac.utils.ClassScanner; import dev.brighten.ac.utils.Tuple; +import dev.brighten.ac.utils.reflections.types.WrappedClass; import dev.brighten.ac.utils.reflections.types.WrappedField; import lombok.RequiredArgsConstructor; import org.bukkit.event.Event; @@ -26,6 +28,14 @@ public class CheckHandler { private final APlayer player; + private static final List TO_HOOK = new ArrayList<>(); + + static { + for (WrappedClass aClass : ClassScanner.getClasses(Hook.class)) { + TO_HOOK.add(new CheckStatic(aClass)); + } + } + public synchronized Check findCheck(Class checkClass) { return checkCache.computeIfAbsent(checkClass, key -> { for (Check check : checks) { @@ -39,6 +49,58 @@ public class CheckHandler { public void initChecks() { // Enabling checks for players on join + + for (CheckStatic toHook : TO_HOOK) { + KListener listener = toHook.playerInit(player); + synchronized (EVENTS) { + for (Tuple> tuple : toHook.getActions()) { + WAction action = tuple.one.get(listener); + + EVENTS.compute(tuple.two, (packetClass, array) -> { + if (array == null) { + return new ActionStore[] {new ActionStore(action, toHook.getCheckClass().getParent())}; + } else { + ActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new ActionStore(action, toHook.getCheckClass().getParent()); + return newArray; + } + }); + } + } + synchronized (EVENTS_TIMESTAMP) { + for (Tuple> tuple : toHook.getTimedActions()) { + WTimedAction action = tuple.one.get(listener); + + EVENTS_TIMESTAMP.compute(tuple.two, (packetClass, array) -> { + if (array == null) { + return new TimedActionStore[] {new TimedActionStore(action, toHook.getCheckClass().getParent())}; + } else { + TimedActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new TimedActionStore(action, toHook.getCheckClass().getParent()); + return newArray; + } + }); + } + } + synchronized (EVENTS_CANCELLABLE) { + for (Tuple> tuple : toHook.getCancellableActions()) { + WCancellable action = tuple.one.get(listener); + + if(tuple.one.isAnnotationPresent(Pre.class)) continue; + + EVENTS_CANCELLABLE.compute(tuple.two, (packetClass, array) -> { + if (array == null) { + return new CancellableActionStore[] {new CancellableActionStore(action, toHook.getCheckClass().getParent())}; + } else { + CancellableActionStore[] newArray = Arrays.copyOf(array, array.length + 1); + newArray[array.length] = new CancellableActionStore(action, toHook.getCheckClass().getParent()); + return newArray; + } + }); + } + } + } + for (CheckStatic checkClass : Anticheat.INSTANCE.getCheckManager().getCheckClasses().values()) { CheckData data = checkClass.getCheckClass().getAnnotation(CheckData.class); @@ -113,9 +175,6 @@ public class CheckHandler { }); } } - synchronized (EVENTS_PRE_CANCELLABLE) { - - } } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/gui/Logs.java b/Anticheat/src/main/java/dev/brighten/ac/gui/Logs.java index 2d40dbd..96b008e 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/gui/Logs.java +++ b/Anticheat/src/main/java/dev/brighten/ac/gui/Logs.java @@ -4,6 +4,8 @@ import dev.brighten.ac.Anticheat; import dev.brighten.ac.logging.Log; import dev.brighten.ac.utils.*; import dev.brighten.ac.utils.menu.button.Button; +import dev.brighten.ac.utils.menu.button.UpdatingButton; +import dev.brighten.ac.utils.menu.type.impl.ChestMenu; import dev.brighten.ac.utils.menu.type.impl.PagedMenu; import org.apache.commons.lang.time.DateFormatUtils; import org.bukkit.Material; @@ -17,128 +19,105 @@ public class Logs extends PagedMenu { private final UUID uuid; private boolean generatedItems; - private Set allowedLogs = new HashSet<>(); + private final Set allowedLogs = new HashSet<>(); public Logs(UUID uuid) { + this(uuid, 5000); + } + + public Logs(UUID uuid, int limit) { super(Color.Gold + MojangAPI.getUsername(uuid).orElse("Unknown Player") + "'s Logs", 6); this.uuid = uuid; - generateItems(); + updateLogs(limit, this::generateItems); } public Logs(UUID uuid, String check) { + this(uuid, 5000, check); + } + + public Logs(UUID uuid, int limit, String check) { super(Color.Gold + MojangAPI.getUsername(uuid).orElse("Unknown Player") + "'s Logs", 6); this.uuid = uuid; - generateItems(check); + updateLogs(check, limit, this::generateItems); } - private void generateItems(String check) { - contents.clear(); - Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, 5000, 0, logs -> { - if(allowedLogs.size() > 0) { - Button button = new Button(false, new ItemBuilder(Material.REDSTONE).amount(1) - .name(Color.Red + "Stop Filtering").build(), - (player, info) -> { - allowedLogs.clear(); - setCurrentPage(1); - getFixedItems().remove(getMenuDimension().getSize() - 5); - generateItems(); - }); - getFixedItems().put(getMenuDimension().getSize() - 5, button); + private final List logs = new ArrayList<>(); + + private void showFilterMenu(Player player) { + ChestMenu filterMenu = new ChestMenu(Color.Gold + "Filter Logs", 4); + + this.close(player); + logs.stream().map(Log::getCheckId).distinct().forEach(check -> filterMenu + .addItem(new UpdatingButton(false, (pl, info) -> { + if(!allowedLogs.contains(check)) { + allowedLogs.add(check); + setCurrentPage(1); + pl.sendMessage("Filtering" + check); + generateItems(); + } else { + allowedLogs.remove(check); + setCurrentPage(1); + info.getMenu().setItem(info.getIndex(), info.getButton()); + generateItems(); } - for (Log log : logs) { - ItemBuilder builder = new ItemBuilder(XMaterial.PAPER.parseMaterial()).amount(1) - .name(Color.Gold + log.getCheckId()); - String[] split = MiscUtils.splitIntoLine(log.getData(), 45); - List lore = new ArrayList<>(Arrays.asList("&eVL: &f" + log.getVl(), - "&eTime: &f" + DateFormatUtils.ISO_DATETIME_FORMAT.format(log.getTime()), - "&eData: &f" + split[0])); + }, () -> new ItemBuilder(allowedLogs.contains(check) + ? Material.EMERALD_BLOCK : Material.REDSTONE_BLOCK).amount(1) + .name(Color.Gold + check).build(), 5))); + filterMenu.showMenu(player); + filterMenu.setCloseHandler((pl, menu) -> Logs.this.showMenu(pl)); + } - for (int i = 1; i < split.length; i++) { - lore.add(Color.White + split[i]); - } - - ItemStack stack = builder.lore(lore).build(); - - addItem(new Button(false, stack, (player, info) -> { - switch(info.getClickType()) { - case SHIFT_LEFT: { - if(!allowedLogs.contains(log.getCheckId())) { - allowedLogs.add(log.getCheckId()); - setCurrentPage(1); - generateItems(log.getCheckId()); - } else { - allowedLogs.remove(log.getCheckId()); - setCurrentPage(1); - generateItems(log.getCheckId()); - } - break; - } - } - })); - } - buildInventory(getHolder() == null); - generatedItems = true; + private void updateLogs(int limit, Runnable onUpdate) { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, limit, logs -> { + this.logs.clear(); + this.logs.addAll(logs); + if(onUpdate != null) + onUpdate.run(); }); } + + private void updateLogs(String check, int limit, Runnable onUpdate) { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, limit, 0, logs -> { + this.logs.clear(); + this.logs.addAll(logs); + if(onUpdate != null) + onUpdate.run(); + }); + } + private void generateItems() { contents.clear(); - Anticheat.INSTANCE.getLogManager().getLogs(uuid, logs -> { - if(allowedLogs.size() > 0) { - Button button = new Button(false, new ItemBuilder(Material.REDSTONE).amount(1) - .name(Color.Red + "Stop Filtering").build(), - (player, info) -> { - allowedLogs.clear(); - setCurrentPage(1); - getFixedItems().remove(getMenuDimension().getSize() - 5); - generateItems(); - }); - getFixedItems().put(getMenuDimension().getSize() - 5, button); + Button button = new Button(false, new ItemBuilder(Material.REDSTONE).amount(1) + .name(Color.Red + "Modify Filter").build(), + (player, info) -> showFilterMenu(player)); + + getFixedItems().put(getMenuDimension().getSize() - 5, button); + for (Log log : logs) { + if(allowedLogs.size() > 0 && !allowedLogs.contains(log.getCheckId())) continue; + + ItemBuilder builder = new ItemBuilder(XMaterial.PAPER.parseMaterial()).amount(1) + .name(Color.Gold + log.getCheckId()); + + String[] split = MiscUtils.splitIntoLine(log.getData(), 45); + List lore = new ArrayList<>(Arrays.asList("&eVL: &f" + log.getVl(), + "&eTime: &f" + DateFormatUtils.ISO_DATETIME_FORMAT.format(log.getTime()), + "&eData: &f" + split[0])); + + for (int i = 1; i < split.length; i++) { + lore.add(Color.White + split[i]); } - for (Log log : logs) { - if(allowedLogs.size() > 0 && !allowedLogs.contains(log.getCheckId())) continue; - ItemBuilder builder = new ItemBuilder(XMaterial.PAPER.parseMaterial()).amount(1) - .name(Color.Gold + log.getCheckId()); + ItemStack stack = builder.lore(lore).build(); - String[] split = MiscUtils.splitIntoLine(log.getData(), 45); - List lore = new ArrayList<>(Arrays.asList("&eVL: &f" + log.getVl(), - "&eTime: &f" + DateFormatUtils.ISO_DATETIME_FORMAT.format(log.getTime()), - "&eData: &f" + split[0])); - - for (int i = 1; i < split.length; i++) { - lore.add(Color.White + split[i]); - } - - ItemStack stack = builder.lore(lore).build(); - - final String checkId = log.getCheckId(); - - addItem(new Button(false, stack, (player, info) -> { - switch(info.getClickType()) { - case SHIFT_LEFT: { - if(!allowedLogs.contains(checkId)) { - allowedLogs.add(checkId); - player.sendMessage("Filtering" + checkId); - setCurrentPage(1); - generateItems(checkId); - } else { - allowedLogs.remove(checkId); - setCurrentPage(1); - generateItems(checkId); - } - break; - } - } - })); - } - buildInventory(getHolder() == null); - generatedItems = true; - }); + addItem(new Button(false, stack)); + } + buildInventory(getHolder() == null); + generatedItems = true; } @Override diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/BBRevealHandler.java b/Anticheat/src/main/java/dev/brighten/ac/handler/BBRevealHandler.java index 85fb809..e4d58b4 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/BBRevealHandler.java +++ b/Anticheat/src/main/java/dev/brighten/ac/handler/BBRevealHandler.java @@ -110,8 +110,6 @@ public class BBRevealHandler implements Listener { var blockBox = BlockData.getData(block.getType()) .getBox(player.get(), blockLoc, player.get().getPlayerVersion()); - player.get().getBukkitPlayer().sendMessage(block.getType().name()); - blockBox.draw(EnumParticle.FLAME, player.get().getBukkitPlayer()); }); }); diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/MovementHandler.java b/Anticheat/src/main/java/dev/brighten/ac/handler/MovementHandler.java index 60cfd4c..751ec29 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/MovementHandler.java +++ b/Anticheat/src/main/java/dev/brighten/ac/handler/MovementHandler.java @@ -3,7 +3,7 @@ package dev.brighten.ac.handler; import com.google.common.collect.Sets; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.data.obj.CMove; -import dev.brighten.ac.handler.compat.CompatHandler; +import dev.brighten.ac.compat.CompatHandler; import dev.brighten.ac.packet.ProtocolVersion; import dev.brighten.ac.packet.wrapper.in.WPacketPlayInFlying; import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutPosition; @@ -473,8 +473,8 @@ public class MovementHandler { boolean hasLevitation = ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_9) && player.getPotionHandler().hasPotionEffect(XPotion.LEVITATION.getPotionEffectType()); - player.getInfo().setRiptiding(CompatHandler.getInstance().isRiptiding(player.getBukkitPlayer())); - player.getInfo().setGliding(CompatHandler.getInstance().isGliding(player.getBukkitPlayer())); + player.getInfo().setRiptiding(CompatHandler.getINSTANCE().isRiptiding(player.getBukkitPlayer())); + player.getInfo().setGliding(CompatHandler.getINSTANCE().isGliding(player.getBukkitPlayer())); // Resetting glide/sneak timers if (player.getInfo().isGliding()) player.getInfo().getLastElytra().reset(); diff --git a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java index 5986ce4..0c99215 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java +++ b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java @@ -34,7 +34,7 @@ public class JoinListener implements Listener { Anticheat.INSTANCE.getPacketProcessor().process(EventPriority.HIGHEST, event -> { Optional op = Anticheat.INSTANCE.getPlayerRegistry().getPlayer(event.getPlayer().getUniqueId()); - if(!op.isPresent()) { + if(op.isEmpty()) { return; } @@ -45,7 +45,7 @@ public class JoinListener implements Listener { if(event.getType().equals(PacketType.CLIENT_TRANSACTION)) { if(player.getPacketQueue().size() > 0) { player.setSendingPackets(true); - Object packetToSend = null; + Object packetToSend; synchronized (player.getPacketQueue()) { while((packetToSend = player.getPacketQueue().pollFirst()) != null) { HandlerAbstract.getHandler().sendPacketSilently(player, packetToSend); @@ -55,22 +55,15 @@ public class JoinListener implements Listener { } } else { switch (event.getType()) { - case ENTITY: - case ENTITY_DESTROY: - case ENTITY_HEAD_ROTATION: - case ENTITY_MOVE: - case ENTITY_MOVELOOK: - case ENTITY_LOOK: - case BLOCK_CHANGE: - case MULTI_BLOCK_CHANGE: - case MAP_CHUNK: { - if(player.getLagInfo().getLastClientTransaction().isPassed(200L) && player.getCreation().isPassed(6000L)) { + case ENTITY, ENTITY_DESTROY, ENTITY_HEAD_ROTATION, ENTITY_MOVE, ENTITY_MOVELOOK, ENTITY_LOOK, + BLOCK_CHANGE, MULTI_BLOCK_CHANGE, MAP_CHUNK -> { + if (player.getLagInfo().getLastClientTransaction().isPassed(200L) + && player.getCreation().isPassed(6000L)) { synchronized (player.getPacketQueue()) { player.getPacketQueue().add(event.getPacket()); } event.setCancelled(true); } - break; } } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/logging/LoggerManager.java b/Anticheat/src/main/java/dev/brighten/ac/logging/LoggerManager.java index 0ccdd59..6b88b53 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/logging/LoggerManager.java +++ b/Anticheat/src/main/java/dev/brighten/ac/logging/LoggerManager.java @@ -88,8 +88,13 @@ public class LoggerManager { public void getLogs(UUID uuid, Consumer> logConsumer) { - getLogs(uuid, 2000, 0, logConsumer); + getLogs(uuid, 2000, logConsumer); } + + public void getLogs(UUID uuid, int limit, Consumer> logConsumer) { + getLogs(uuid, limit, 0, logConsumer); + } + public void getLogs(UUID uuid, int limit, int skip, Consumer> logsConsumer) { Anticheat.INSTANCE.getScheduler().execute(() -> { try { @@ -119,6 +124,10 @@ public class LoggerManager { getLogs(uuid, checkId, 500, 0, logConsumer); } + public void getLogs(UUID uuid, String checkId, int limit, Consumer> logConsumer) { + getLogs(uuid, checkId, limit, 0, logConsumer); + } + public void getLogs(UUID uuid, String checkId, int limit, int skip, Consumer> logsConsumer) { Anticheat.INSTANCE.getScheduler().execute(() -> { try { diff --git a/Anticheat/src/main/java/dev/brighten/ac/utils/BlockUtils.java b/Anticheat/src/main/java/dev/brighten/ac/utils/BlockUtils.java index 12160fd..07350a4 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/utils/BlockUtils.java +++ b/Anticheat/src/main/java/dev/brighten/ac/utils/BlockUtils.java @@ -2,10 +2,7 @@ package dev.brighten.ac.utils; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.handler.block.WrappedBlock; -import dev.brighten.ac.packet.ProtocolVersion; import dev.brighten.ac.utils.math.IntVector; -import dev.brighten.ac.utils.reflections.impl.MinecraftReflection; -import dev.brighten.ac.utils.reflections.types.WrappedField; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -14,25 +11,32 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Entity; import org.bukkit.entity.Vehicle; -import org.bukkit.inventory.ItemStack; import java.util.*; public class BlockUtils { - - public static Map collisionBoundingBoxes = new HashMap<>(); private static final EnumMap matchMaterial = new EnumMap<>(Material.class); private static final EnumSet SWORDS = EnumSet.allOf(Material.class), - STAINED_CLAY = EnumSet.allOf(Material.class); + STAINED_CLAY = EnumSet.allOf(Material.class), EDIBLE = EnumSet.allOf(Material.class), + DOOR = EnumSet.allOf(Material.class); + private static final EnumSet XEDIBLE = EnumSet.allOf(XMaterial.class); static { for (Material mat : Material.values()) { - matchMaterial.put(mat, XMaterial.matchXMaterial(mat)); + XMaterial xmat = XMaterial.matchXMaterial(mat); + matchMaterial.put(mat, xmat); if(mat.toString().contains("STAINED_CLAY")) { STAINED_CLAY.add(mat); } else if(mat.toString().contains("SWORD")) { SWORDS.add(mat); + } else if(mat.toString().contains("DOOR") && !mat.toString().contains("TRAP")) { + DOOR.add(mat); + } + + if(mat.isEdible()) { + EDIBLE.add(mat); + XEDIBLE.add(xmat); } } } @@ -67,16 +71,6 @@ public class BlockUtils { return Optional.empty(); } - private static WrappedField fieldBlocksMovement; - public static boolean blocksMovement(Block block) { - return blocksMovement(block.getType()); - } - - public static boolean blocksMovement(Material material) { - return material.isSolid(); - } - - public static Optional getRelativeAsync(Block block, BlockFace face) { return getRelativeAsync(block, face.getModX(), face.getModY(), face.getModZ()); } @@ -92,20 +86,22 @@ public class BlockUtils { return getBlockAsync(block.getLocation().clone().add(modX, modY, modZ)); } + @SuppressWarnings("deprecation") public static Optional getWrappedBlock(APlayer player, Location location) { if(player == null) { - return Optional.ofNullable(getBlockAsync(location.clone()) - .map(b -> new WrappedBlock(b.getLocation(), b.getType(), b.getData())).orElse(null)); + return getBlockAsync(location.clone()) + .map(b -> new WrappedBlock(b.getLocation(), b.getType(), b.getData())); } return Optional.of(player.getBlockUpdateHandler() .getBlock(new IntVector(location.getBlockX(), location.getBlockY(), location.getBlockZ()))); } + @SuppressWarnings("deprecation") public static Optional getRelative(APlayer player, Location location, int modX, int modY, int modZ) { if(player == null) { - return Optional.ofNullable(getBlockAsync(location.clone().add(modX, modY, modZ)) - .map(b -> new WrappedBlock(b.getLocation(), b.getType(), b.getData())).orElse(null)); + return getBlockAsync(location.clone().add(modX, modY, modZ)) + .map(b -> new WrappedBlock(b.getLocation(), b.getType(), b.getData())); } return Optional.of(player.getBlockUpdateHandler() @@ -124,334 +120,70 @@ public class BlockUtils { } public static float getFriction(XMaterial material) { - switch(material) { - case SLIME_BLOCK: - return 0.8f; - case ICE: - case PACKED_ICE: - case FROSTED_ICE: - return 0.98f; - case BLUE_ICE: - return 0.989f; - default: - return 0.6f; - } + return switch (material) { + case SLIME_BLOCK -> 0.8f; + case ICE, PACKED_ICE, FROSTED_ICE -> 0.98f; + case BLUE_ICE -> 0.989f; + default -> 0.6f; + }; } public static boolean isUsable(Material material) { - if(material.isEdible()) return true; + return isUsable(getXMaterial(material)); + } - switch (material) { - case STONE_SWORD: - case DIAMOND_SWORD: - case GOLDEN_SWORD: - case IRON_SWORD: - case WOODEN_SWORD: - case SHIELD: - case BOW: - return true; - default: - return false; - } + public static boolean isUsable(XMaterial xmaterial) { + if(XEDIBLE.contains(xmaterial)) return true; + return switch (xmaterial) { + case STONE_SWORD, DIAMOND_SWORD, GOLDEN_SWORD, IRON_SWORD, WOODEN_SWORD, SHIELD, BOW -> true; + default -> false; + }; } public static boolean isEntityCollidable(Entity entity) { - if(entity instanceof Vehicle) { - return true; - } - - return false; + return entity instanceof Vehicle; } public static boolean isSolid(Block block) { return isSolid(block.getType()); } + @SuppressWarnings("deprecation") public static boolean isSolid(Material material) { int type = material.getId(); - switch (type) { - case 1: - case 2: - case 3: - case 4: - case 5: - case 7: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 29: - case 34: - case 33: - case 35: - case 36: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - case 48: - case 49: - case 52: - case 53: - case 54: - case 56: - case 57: - case 58: - case 60: - case 61: - case 62: - case 64: - case 65: - case 67: - case 71: - case 73: - case 74: - case 78: - case 79: - case 80: - case 81: - case 82: - case 84: - case 85: - case 86: - case 87: - case 88: - case 89: - case 91: - case 92: - case 93: - case 94: - case 95: - case 96: - case 97: - case 98: - case 99: - case 100: - case 101: - case 102: - case 103: - case 106: - case 107: - case 108: - case 109: - case 110: - case 111: - case 112: - case 113: - case 114: - case 116: - case 117: - case 118: - case 120: - case 121: - case 122: - case 123: - case 124: - case 125: - case 126: - case 127: - case 128: - case 129: - case 130: - case 133: - case 134: - case 135: - case 136: - case 137: - case 138: - case 139: - case 140: - case 144: - case 145: - case 146: - case 149: - case 150: - case 151: - case 152: - case 153: - case 154: - case 155: - case 156: - case 158: - case 159: - case 160: - case 161: - case 162: - case 163: - case 164: - case 165: - case 166: - case 167: - case 168: - case 169: - case 170: - case 171: - case 172: - case 173: - case 174: - case 178: - case 179: - case 180: - case 181: - case 182: - case 183: - case 184: - case 185: - case 186: - case 187: - case 188: - case 189: - case 190: - case 191: - case 192: - case 193: - case 194: - case 195: - case 196: - case 197: - case 198: - case 199: - case 200: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 208: - case 210: - case 211: - case 212: - case 213: - case 214: - case 215: - case 216: - case 218: - case 219: - case 220: - case 221: - case 222: - case 223: - case 224: - case 225: - case 226: - case 227: - case 228: - case 229: - case 230: - case 231: - case 232: - case 233: - case 234: - case 235: - case 236: - case 237: - case 238: - case 239: - case 240: - case 241: - case 242: - case 243: - case 244: - case 245: - case 246: - case 247: - case 248: - case 249: - case 250: - case 251: - case 252: - case 255: - case 397: - case 355: - return true; - - } - return false; - } - - public static boolean isLiquid(Block block) { - return block.getType().toString().contains("WATER") || block.getType().toString().contains("LAVA"); + return switch (type) { + case 1, 2, 3, 4, 5, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 34, 33, 35, 36, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54, 56, 57, 58, 60, 61, 62, 64, 65, 67, 71, 73, 74, 78, 79, + 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 133, 134, 135, 136, 137, 138, 139, 140, 144, 145, 146, 149, 150, 151, 152, 153, 154, 155, + 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 216, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 255, 397, 355 -> + true; + default -> false; + }; } public static boolean isClimbableBlock(Block block) { - return block.getType().toString().contains("LADDER") || block.getType().toString().contains("VINE"); - } - - public static boolean isIce(Block block) { - return block.getType().toString().contains("ICE"); - } - - public static boolean isFence(Block block) { - return (block.getType().toString().contains("FENCE") && !block.getType().toString().contains("GATE")) | block.getType().toString().contains("WALL"); + return Materials.checkFlag(block.getType(), Materials.LADDER); } public static boolean isDoor(Material type) { - return type.toString().contains("DOOR") && !type.toString().contains("TRAP"); - } - - public static boolean isDoor(Block block) { - return isDoor(block.getType()); - } - - public static boolean isBed(Block block) { - return block.getType().toString().contains("BED"); - } - - public static boolean isTrapDoor(Block block) { - return block.getType().toString().contains("DOOR") && block.getType().toString().contains("TRAP"); - } - - public static boolean isChest(Block block) { - return block.getType().toString().contains("CHEST") || block.getType().toString().contains("SHULKER"); - } - - public static boolean isWall(Block block) { - return block.getType().toString().contains("WALL"); - } - - public static boolean isPiston(Block block) { - return block.getType().getId() == 36 || block.getType().getId() == 34 || block.getType().getId() == 33 || block.getType().getId() == 29; - } - - public static boolean isFenceGate(Block block) { - return block.getType().toString().contains("FENCE") && block.getType().toString().contains("GATE"); - } - - public static boolean isStair(Block block) { - return block.getType().toString().contains("STAIR"); - } - - public static boolean isSlab(Block block) { - return block.getType().toString().contains("STEP") || block.getType().toString().contains("SLAB"); - } - - public static boolean isTool(ItemStack stack) { - String name = stack.getType().name().toLowerCase(); - - return name.contains("axe") || name.contains("spade") || name.contains("shovel") || name.contains("shear") || name.contains("sword"); + return DOOR.contains(type); } public static Location findGround(World world, Location point) { for (int y = point.toVector().getBlockY(); y > 0; y--) { Location loc = new Location(world, point.getX(), y, point.getZ()); - Block block = BlockUtils.getBlock(loc); + Optional blockOp = BlockUtils.getBlockAsync(loc); + + if(blockOp.isEmpty()) continue; + + Block block = blockOp.get(); if (block.getType().isBlock() && block.getType().isSolid() && !block.isEmpty()) { Location toReturn = loc.clone(); @@ -463,111 +195,5 @@ public class BlockUtils { } return point; } - - private static void setupCollisionBB() { - if(ProtocolVersion.getGameVersion().isBelow(ProtocolVersion.V1_13)) { - collisionBoundingBoxes.put(Material.getMaterial("FIRE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("STONE_PLATE"), new BoundingBox((float) 0.0625, (float) 0.0, (float) 0.0625, (float) 0.9375, (float) 0.0625, (float) 0.9375)); - collisionBoundingBoxes.put(Material.getMaterial("GRAVEL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("COBBLESTONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("NETHER_BRICK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("PUMPKIN"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("CARROT"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.25, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("TNT"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SOUL_SAND"), new BoundingBox(0f, 0f,0f, 1f, 0.875f, 1f)); - collisionBoundingBoxes.put(Material.getMaterial("SAND"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("WOOD_PLATE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SIGN_POST"), new BoundingBox((float) 0.25, (float) 0.0, (float) 0.25, (float) 0.75, (float) 1.0, (float) 0.75)); - collisionBoundingBoxes.put(Material.getMaterial("COCOA"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("DETECTOR_RAIL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.125, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("HARD_CLAY"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("NETHERRACK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("STONE_BUTTON"), new BoundingBox((float) 0.3125, (float) 0.0, (float) 0.375, (float) 0.6875, (float) 0.125, (float) 0.625)); - collisionBoundingBoxes.put(Material.getMaterial("CLAY"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("QUARTZ_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("HUGE_MUSHROOM_1"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("HUGE_MUSHROOM_2"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("LAVA"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("BEACON"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("GRASS"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("DEAD_BUSH"), new BoundingBox((float) 0.09999999403953552, (float) 0.0, (float) 0.09999999403953552, (float) 0.8999999761581421, (float) 0.800000011920929, (float) 0.8999999761581421)); - collisionBoundingBoxes.put(Material.getMaterial("GLOWSTONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("ICE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("BRICK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("REDSTONE_TORCH_ON"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("REDSTONE_TORCH_OFF"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("POWERED_RAIL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.125, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("DISPENSER"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("JUKEBOX"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("EMERALD_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("STONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("BOOKSHELF"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("MYCEL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("OBSIDIAN"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("PORTAL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("GOLD_PLATE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("COAL_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("GOLD_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("STAINED_CLAY"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("MOB_SPAWNER"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("BEDROCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("IRON_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("REDSTONE_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SIGN"), new BoundingBox((float) 0.25, (float) 0.0, (float) 0.25, (float) 0.75, (float) 1.0, (float) 0.75)); - collisionBoundingBoxes.put(Material.getMaterial("IRON_PLATE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("GOLD_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("POTATO"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.25, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("MOSSY_COBBLESTONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("RAILS"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.125, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("HAY_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("TORCH"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("CARPET"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.0625, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("DIRT"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("EMERALD_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("REDSTONE_LAMP_ON"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("REDSTONE_LAMP_OFF"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("NETHER_WARTS"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.25, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SPONGE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("WORKBENCH"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SANDSTONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("LAPIS_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("NOTE_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("WOOL"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("COMMAND"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("ENDER_STONE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("TRIPWIRE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.15625, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SAPLING"), new BoundingBox((float) 0.09999999403953552, (float) 0.0, (float) 0.09999999403953552, (float) 0.8999999761581421, (float) 0.800000011920929, (float) 0.8999999761581421)); - collisionBoundingBoxes.put(Material.getMaterial("PACKED_ICE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("LAPIS_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("SMOOTH_BRICK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("RED_MUSHROOM"), new BoundingBox((float) 0.30000001192092896, (float) 0.0, (float) 0.30000001192092896, (float) 0.699999988079071, (float) 0.4000000059604645, (float) 0.699999988079071)); - collisionBoundingBoxes.put(Material.getMaterial("BROWN_MUSHROOM"), new BoundingBox((float) 0.30000001192092896, (float) 0.0, (float) 0.30000001192092896, (float) 0.699999988079071, (float) 0.4000000059604645, (float) 0.699999988079071)); - collisionBoundingBoxes.put(Material.getMaterial("DIAMOND_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("CROPS"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.25, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("IRON_BLOCK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("MELON"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("DIAMOND_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("LEVER"), new BoundingBox((float) 0.25, (float) 0.0, (float) 0.25, (float) 0.75, (float) 0.6000000238418579, (float) 0.75)); - collisionBoundingBoxes.put(Material.getMaterial("SUGAR_CANE"), new BoundingBox((float) 0.125, (float) 0.0, (float) 0.125, (float) 0.875, (float) 1.0, (float) 0.875)); - collisionBoundingBoxes.put(Material.getMaterial("COAL_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("WATER_LILY"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 0.015625, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("QUARTZ_ORE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("GLASS"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("TRIPWIRE_HOOK"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("VINE"), new BoundingBox((float) 0.0, (float) 0.0, (float) 0.0, (float) 1.0, (float) 1.0, (float) 1.0)); - collisionBoundingBoxes.put(Material.getMaterial("WEB"), new BoundingBox(0, 0, 0, 1, 1, 1)); - collisionBoundingBoxes.put(Material.getMaterial("WATER"), new BoundingBox(0, 0, 0, 0.9f, 0.9f, 0.9f)); - collisionBoundingBoxes.put(Material.getMaterial("STATIONARY_WATER"), new BoundingBox(0, 0, 0, 0.9f, 0.9f, 0.9f)); - collisionBoundingBoxes.put(Material.getMaterial("STATIONARY_LAVA"), new BoundingBox(0, 0, 0, 0.9f, 0.9f, 0.9f)); - } - } - - static { - setupCollisionBB(); - - if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_13)) { - fieldBlocksMovement = MinecraftReflection.classBlockInfo.getFieldByType(boolean.class, 0); - } - } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/utils/XMaterial.java b/Anticheat/src/main/java/dev/brighten/ac/utils/XMaterial.java index 449d384..1d89257 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/utils/XMaterial.java +++ b/Anticheat/src/main/java/dev/brighten/ac/utils/XMaterial.java @@ -31,8 +31,6 @@ import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SpawnEggMeta; import org.bukkit.potion.Potion; import javax.annotation.Nonnull; @@ -1594,7 +1592,7 @@ public enum XMaterial { /** * This is just an extra method that can be used for many cases. * It can be used in {@link org.bukkit.event.player.PlayerInteractEvent} - * or when accessing {@link org.bukkit.entity.Player#getMainHand()}, + * or when accessing org.bukkit.entity.Player#getMainHand(), * or other compatibility related methods. *

* An invocation of this method yields exactly the same result as the expression: @@ -1749,15 +1747,6 @@ public enum XMaterial { String material = item.getType().name(); byte data = (byte) (Data.ISFLAT || item.getType().getMaxDurability() > 0 ? 0 : item.getDurability()); - // They didn't really use the items data value in older versions. - if (!Data.ISFLAT && item.hasItemMeta() && material.equals("MONSTER_EGG")) { - ItemMeta meta = item.getItemMeta(); - if (meta instanceof SpawnEggMeta) { - SpawnEggMeta egg = (SpawnEggMeta) meta; - material = egg.getSpawnedType().name() + "_SPAWN_EGG"; - } - } - // Potions used the items data value to store // information about the type of potion in 1.8 if (!supports(9) && material.endsWith("ION")) { diff --git a/Anticheat/src/main/java/dev/brighten/ac/utils/menu/MenuListener.java b/Anticheat/src/main/java/dev/brighten/ac/utils/menu/MenuListener.java index 4298615..2fb2040 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/utils/menu/MenuListener.java +++ b/Anticheat/src/main/java/dev/brighten/ac/utils/menu/MenuListener.java @@ -69,7 +69,7 @@ public class MenuListener implements Listener { return; } button.getConsumer().accept((Player) event.getWhoClicked(), - new ClickAction.InformationPair(button, event.getClick(), menu)); + new ClickAction.InformationPair(button, event.getClick(), menu, slot)); if (!button.isMoveable()) { event.setResult(Event.Result.DENY); diff --git a/Anticheat/src/main/java/dev/brighten/ac/utils/menu/button/ClickAction.java b/Anticheat/src/main/java/dev/brighten/ac/utils/menu/button/ClickAction.java index d1235f7..48287d5 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/utils/menu/button/ClickAction.java +++ b/Anticheat/src/main/java/dev/brighten/ac/utils/menu/button/ClickAction.java @@ -29,6 +29,7 @@ public interface ClickAction { private Button button; private ClickType clickType; private Menu menu; + private int index; } } diff --git a/Compat/pom.xml b/Compat/pom.xml index 9777deb..316bfdd 100644 --- a/Compat/pom.xml +++ b/Compat/pom.xml @@ -42,18 +42,6 @@ 1.19.4-R0.1-SNAPSHOT provided - - org.github.spigot - 1.8.8 - 1.8.8 - provided - - - org.github.spigot - 1.7.10 - 1.7.10 - provided - \ No newline at end of file diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/CompatHandler.java b/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java similarity index 60% rename from Anticheat/src/main/java/dev/brighten/ac/handler/compat/CompatHandler.java rename to Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java index 29ca278..3a6d49f 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/CompatHandler.java +++ b/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java @@ -1,8 +1,8 @@ -package dev.brighten.ac.handler.compat; +package dev.brighten.ac.compat; -import dev.brighten.ac.handler.compat.impl.CompatHandler1_13; -import dev.brighten.ac.handler.compat.impl.CompatHandler1_8; -import dev.brighten.ac.handler.compat.impl.CompatHandler1_9; +import dev.brighten.ac.compat.impl.CompatHandler1_13; +import dev.brighten.ac.compat.impl.CompatHandler1_8; +import dev.brighten.ac.compat.impl.CompatHandler1_9; import dev.brighten.ac.packet.ProtocolVersion; import org.bukkit.entity.Player; @@ -12,10 +12,10 @@ public abstract class CompatHandler { public abstract boolean isGliding(Player player); - private static CompatHandler instance; + private static CompatHandler INSTANCE; - public static CompatHandler getInstance() { - if (instance == null) { + public static CompatHandler getINSTANCE() { + if (INSTANCE == null) { if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_13)) { return new CompatHandler1_13(); } else if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_9)) { @@ -23,6 +23,6 @@ public abstract class CompatHandler { } else return new CompatHandler1_8(); } - return instance; + return INSTANCE; } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_13.java b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_13.java similarity index 75% rename from Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_13.java rename to Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_13.java index efbb943..f82abdb 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_13.java +++ b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_13.java @@ -1,6 +1,6 @@ -package dev.brighten.ac.handler.compat.impl; +package dev.brighten.ac.compat.impl; -import dev.brighten.ac.handler.compat.CompatHandler; +import dev.brighten.ac.compat.CompatHandler; import org.bukkit.entity.Player; public class CompatHandler1_13 extends CompatHandler { diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_8.java b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_8.java similarity index 73% rename from Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_8.java rename to Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_8.java index 9fe5043..68de01c 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_8.java +++ b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_8.java @@ -1,6 +1,6 @@ -package dev.brighten.ac.handler.compat.impl; +package dev.brighten.ac.compat.impl; -import dev.brighten.ac.handler.compat.CompatHandler; +import dev.brighten.ac.compat.CompatHandler; import org.bukkit.entity.Player; public class CompatHandler1_8 extends CompatHandler { diff --git a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_9.java b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_9.java similarity index 74% rename from Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_9.java rename to Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_9.java index 0d094ab..c7b31b7 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/handler/compat/impl/CompatHandler1_9.java +++ b/Compat/src/main/java/dev/brighten/ac/compat/impl/CompatHandler1_9.java @@ -1,6 +1,6 @@ -package dev.brighten.ac.handler.compat.impl; +package dev.brighten.ac.compat.impl; -import dev.brighten.ac.handler.compat.CompatHandler; +import dev.brighten.ac.compat.CompatHandler; import org.bukkit.entity.Player; public class CompatHandler1_9 extends CompatHandler {