mirror of
https://github.com/funkemunky/KauriV3.git
synced 2026-05-31 05:51:55 +00:00
Cleaning up p/2
This commit is contained in:
@@ -19,6 +19,10 @@
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>maven-central</id>
|
||||
<url>https://nexus.funkemunky.cc/repository/maven-central/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>viaversion-repo</id>
|
||||
<url>https://repo.viaversion.com</url>
|
||||
@@ -39,6 +43,14 @@
|
||||
<id>lucko</id>
|
||||
<url>https://repo.lucko.me/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>codemc-releases</id>
|
||||
<url>https://repo.codemc.io/repository/maven-releases/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>codemc-snapshots</id>
|
||||
<url>https://repo.codemc.io/repository/maven-snapshots/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -27,7 +27,6 @@ import dev.brighten.ac.utils.config.Configuration;
|
||||
import dev.brighten.ac.utils.config.ConfigurationProvider;
|
||||
import dev.brighten.ac.utils.config.YamlConfiguration;
|
||||
import dev.brighten.ac.utils.math.RollingAverageDouble;
|
||||
import dev.brighten.ac.utils.reflections.types.WrappedMethod;
|
||||
import dev.brighten.ac.utils.timer.Timer;
|
||||
import dev.brighten.ac.utils.timer.impl.TickTimer;
|
||||
import dev.brighten.ac.utils.world.WorldInfo;
|
||||
@@ -58,6 +57,7 @@ import java.util.stream.Collectors;
|
||||
@MavenLibrary(groupId = "it.unimi.dsi", artifactId = "fastutil", version = "8.5.11", repo = @Repository(url = "https://repo1.maven.org/maven2"))
|
||||
@MavenLibrary(groupId = "org.ow2.asm", artifactId = "asm", version = "9.4", repo = @Repository(url = "https://repo1.maven.org/maven2"))
|
||||
@MavenLibrary(groupId = "org.ow2.asm", artifactId = "asm-tree", version = "9.4", repo = @Repository(url = "https://repo1.maven.org/maven2"))
|
||||
@MavenLibrary(groupId = "org.dizitart", artifactId = "nitrite-jackson-mapper", version = "4.3.0", repo = @Repository(url = "https://repo1.maven.org/maven2"))
|
||||
public class Anticheat extends JavaPlugin {
|
||||
|
||||
public static Anticheat INSTANCE;
|
||||
@@ -76,7 +76,6 @@ public class Anticheat extends JavaPlugin {
|
||||
private FakeEntityTracker fakeTracker;
|
||||
private int currentTick;
|
||||
private Deque<Runnable> onTickEnd = new LinkedList<>();
|
||||
private ServerInjector injector;
|
||||
//Lag Information
|
||||
private Timer lastTickLag;
|
||||
private long lastTick;
|
||||
@@ -87,9 +86,8 @@ public class Anticheat extends JavaPlugin {
|
||||
public static boolean allowDebug = true;
|
||||
|
||||
@ConfigSetting(path = "logging", name = "verbose")
|
||||
private static boolean verboseLogging = true;
|
||||
private static final boolean verboseLogging = true;
|
||||
|
||||
private WrappedMethod findClassMethod;
|
||||
private Configuration anticheatConfig;
|
||||
|
||||
public void onEnable() {
|
||||
@@ -155,7 +153,7 @@ public class Anticheat extends JavaPlugin {
|
||||
.orElse(null);
|
||||
}
|
||||
else if(!c.isOptional()) throw new InvalidCommandArgument(MessageKeys.NOT_ALLOWED_ON_CONSOLE,
|
||||
false, new String[0]);
|
||||
false);
|
||||
else return null;
|
||||
}
|
||||
});
|
||||
@@ -168,9 +166,7 @@ public class Anticheat extends JavaPlugin {
|
||||
new AnticheatAPI();
|
||||
|
||||
new ClassScanner().initializeScanner(getClass(), this,
|
||||
null,
|
||||
true,
|
||||
true);
|
||||
null);
|
||||
|
||||
if(!getAnticheatConfig().contains("database.username")) {
|
||||
getAnticheatConfig().set("database.username", "dbuser");
|
||||
@@ -200,13 +196,6 @@ public class Anticheat extends JavaPlugin {
|
||||
alog(Color.Green + "Loading WorldInfo system...");
|
||||
Bukkit.getWorlds().forEach(w -> worldInfoMap.put(w.getUID(), new WorldInfo(w)));
|
||||
|
||||
injector = new ServerInjector();
|
||||
try {
|
||||
injector.inject();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach(HandlerAbstract.getHandler()::add);
|
||||
}
|
||||
public void onDisable() {
|
||||
@@ -234,13 +223,6 @@ public class Anticheat extends JavaPlugin {
|
||||
CheckHandler.TO_HOOK.clear();
|
||||
BBRevealHandler.INSTANCE = null;
|
||||
|
||||
try {
|
||||
injector.eject();
|
||||
injector = null;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
fakeTracker.despawnAll();
|
||||
fakeTracker = null;
|
||||
|
||||
@@ -255,7 +237,6 @@ public class Anticheat extends JavaPlugin {
|
||||
packetProcessor = null;
|
||||
|
||||
packetHandler = null;
|
||||
injector = null;
|
||||
|
||||
onTickEnd.clear();
|
||||
onTickEnd = null;
|
||||
|
||||
@@ -3,14 +3,13 @@ package dev.brighten.ac.check;
|
||||
import dev.brighten.ac.utils.annotation.ConfigSetting;
|
||||
import dev.brighten.ac.utils.annotation.Init;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Init
|
||||
public class CheckConfig {
|
||||
|
||||
@ConfigSetting(name = "punishments.commands")
|
||||
public static List<String> punishmentCommands = Arrays.asList("kick %player% Unfair Advantage (%check%)");
|
||||
public static List<String> punishmentCommands = List.of("kick %player% Unfair Advantage (%check%)");
|
||||
|
||||
@ConfigSetting(name = "alerts.clickCommand")
|
||||
public static String clickCommand = "tp %player%";
|
||||
|
||||
+1
-2
@@ -19,8 +19,7 @@ public class KAGrid extends Check implements RotationCheck {
|
||||
super(player);
|
||||
}
|
||||
|
||||
private int buffer;
|
||||
private List<Double> offsetGrid = new EvictingList<>(50);
|
||||
private final List<Double> offsetGrid = new EvictingList<>(50);
|
||||
|
||||
@Override
|
||||
public void runCheck(Tuple<EntityLocation, EntityLocation> locs, double[] std, double[] offset, float[] rot) {
|
||||
|
||||
@@ -286,11 +286,11 @@ public class VelocityB extends Check {
|
||||
}
|
||||
|
||||
for (int j = 0; j < 4096; ++j) {
|
||||
SIN_TABLE_FAST[j] = (float) Math.sin((double) (((float) j + 0.5F) / 4096.0F * ((float) Math.PI * 2F)));
|
||||
SIN_TABLE_FAST[j] = (float) Math.sin(((float) j + 0.5F) / 4096.0F * ((float) Math.PI * 2F));
|
||||
}
|
||||
|
||||
for (int l = 0; l < 360; l += 90) {
|
||||
SIN_TABLE_FAST[(int) ((float) l * 11.377778F) & 4095] = (float) Math.sin((double) ((float) l * 0.017453292F));
|
||||
SIN_TABLE_FAST[(int) ((float) l * 11.377778F) & 4095] = (float) Math.sin((float) l * 0.017453292F);
|
||||
}
|
||||
|
||||
for (int j = 0; j < SIN_TABLE_FAST_NEW.length; ++j) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@Init(priority = Priority.LOW)
|
||||
@CommandAlias("kauri|anticheat|ac")
|
||||
@@ -61,7 +62,7 @@ public class LogsCommand extends BaseCommand {
|
||||
+ Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: "
|
||||
+ log.getVl() + ") {" + log.getData() + "}");
|
||||
});
|
||||
if(logs.size() == 0) {
|
||||
if(logs.isEmpty()) {
|
||||
sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\"");
|
||||
} else {
|
||||
String url = null;
|
||||
@@ -83,7 +84,7 @@ public class LogsCommand extends BaseCommand {
|
||||
+ Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId())
|
||||
+ "(VL: " + log.getVl() + ") {" + log.getData() + "}");
|
||||
});
|
||||
if(logs.size() == 0) {
|
||||
if(logs.isEmpty()) {
|
||||
sender.sendMessage(Color.Gray + " does not have any violations for check \"" + check + "\"");
|
||||
} else {
|
||||
String url = null;
|
||||
@@ -134,10 +135,10 @@ public class LogsCommand extends BaseCommand {
|
||||
+ Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: "
|
||||
+ log.getVl() + ") {" + log.getData() + "}");
|
||||
});
|
||||
if(logs.size() == 0) {
|
||||
if(logs.isEmpty()) {
|
||||
sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\"");
|
||||
} else {
|
||||
String url = null;
|
||||
String url;
|
||||
try {
|
||||
url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs",
|
||||
Pastebin.Privacy.UNLISTED);
|
||||
@@ -159,8 +160,7 @@ public class LogsCommand extends BaseCommand {
|
||||
@Description("View the logs of a user")
|
||||
public void onLogsWeb(CommandSender sender, String[] args) {
|
||||
if(args.length == 0) {
|
||||
if(sender instanceof Player) {
|
||||
Player player = (Player) sender;
|
||||
if(sender instanceof Player player) {
|
||||
runWebLog(sender, player);
|
||||
} else sender.sendMessage(Color.translate("You cannot view your own logs from console."));
|
||||
} else {
|
||||
@@ -191,13 +191,20 @@ public class LogsCommand extends BaseCommand {
|
||||
}
|
||||
|
||||
|
||||
StringBuilder url = new StringBuilder("https://funkemunky.cc/api/kauri?uuid=" + target.getUniqueId().toString().replaceAll("-", "") + (violations.keySet().size() > 0 ? "&violations=" : ""));
|
||||
StringBuilder url = new StringBuilder("https://funkemunky.cc/api/kauri?uuid="
|
||||
+ target.getUniqueId().toString().replaceAll("-", "")
|
||||
+ (!violations.isEmpty() ? "&violations=" : ""));
|
||||
|
||||
if (violations.keySet().size() > 0) {
|
||||
if (!violations.isEmpty()) {
|
||||
for (String key : violations.keySet()) {
|
||||
if (Anticheat.INSTANCE.getCheckManager().isCheck(key)) {
|
||||
CheckSettings checkData = Anticheat.INSTANCE.getCheckManager().getCheckSettings(Anticheat.INSTANCE.getCheckManager().getCheckClasses()
|
||||
.get(Anticheat.INSTANCE.getCheckManager().getIdToName().get(key)).getCheckClass().getParent());
|
||||
var checkClass = Anticheat.INSTANCE.getCheckManager().getCheckClasses()
|
||||
.get(Anticheat.INSTANCE.getCheckManager().getIdToName().get(key))
|
||||
.getCheckClass().getParent();
|
||||
|
||||
|
||||
CheckSettings checkData = Anticheat.INSTANCE.getCheckManager()
|
||||
.getCheckSettings(checkClass);
|
||||
int vl = violations.get(key), maxVL = checkData.getPunishVl();
|
||||
boolean developer = false;
|
||||
|
||||
@@ -209,7 +216,7 @@ public class LogsCommand extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
if (violations.keySet().size() > 0) {
|
||||
if (!violations.isEmpty()) {
|
||||
url.deleteCharAt(url.length() - 1);
|
||||
}
|
||||
|
||||
@@ -223,7 +230,7 @@ public class LogsCommand extends BaseCommand {
|
||||
|
||||
finalURL = finalURL.replace("%id%", readAll(reader));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.WARNING, "Failed to get logs for " + target.getName(), e);
|
||||
}
|
||||
|
||||
sender.sendMessage(Color.translate("&aView the log here&7: &f" + finalURL));
|
||||
|
||||
@@ -84,12 +84,12 @@ public class APlayer {
|
||||
@Getter
|
||||
private int playerTick;
|
||||
@Getter
|
||||
private Timer creation = new MillisTimer();
|
||||
private final Timer creation = new MillisTimer();
|
||||
@Getter
|
||||
//TODO Actually grab real player version once finished implementing version grabber from Atlas
|
||||
private ProtocolVersion playerVersion = ProtocolVersion.UNKNOWN;
|
||||
@Getter
|
||||
private Object playerConnection;
|
||||
private final Object playerConnection;
|
||||
|
||||
public Emulator EMULATOR;
|
||||
|
||||
@@ -323,8 +323,7 @@ public class APlayer {
|
||||
|
||||
public void sendPacketSilently(Object packet) {
|
||||
if(sniffing) {
|
||||
sniffedPackets.add("(Silent) [" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] " +
|
||||
"" + (packet instanceof WPacket ? ((WPacket)packet).getPacketType()
|
||||
sniffedPackets.add("(Silent) [" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] " + (packet instanceof WPacket ? ((WPacket)packet).getPacketType()
|
||||
: HandlerAbstract.getPacketType(packet)) + ": " + packet);
|
||||
}
|
||||
HandlerAbstract.getHandler().sendPacketSilently(this, packet);
|
||||
|
||||
@@ -22,7 +22,7 @@ import org.bukkit.entity.LivingEntity;
|
||||
import java.util.*;
|
||||
|
||||
public class BlockInformation {
|
||||
private APlayer player;
|
||||
private final APlayer player;
|
||||
public boolean onClimbable, onSlab, onStairs, onHalfBlock, inLiquid, inLava, inWater, inWeb, onSlime, onIce,
|
||||
onSoulSand, blocksAbove, collidesVertically, bedNear, collidesHorizontally, blocksNear, inBlock, miscNear,
|
||||
collidedWithEntity, roseBush, fenceNear, inPortal, blocksBelow, pistonNear, fenceBelow, inScaffolding, inHoney,
|
||||
|
||||
@@ -104,13 +104,13 @@ public final class LibraryLoader {
|
||||
}
|
||||
|
||||
if (!saveLocation.exists()) {
|
||||
throw new RuntimeException("Unable to download dependency: " + d.toString());
|
||||
throw new RuntimeException("Unable to download dependency: " + d);
|
||||
}
|
||||
|
||||
try {
|
||||
URL_INJECTOR.get().addURL(saveLocation.toURI().toURL());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Unable to load dependency: " + saveLocation.toString(), e);
|
||||
throw new RuntimeException("Unable to load dependency: " + saveLocation, e);
|
||||
}
|
||||
|
||||
Anticheat.INSTANCE.info("Loaded dependency '" + name + "' successfully.");
|
||||
@@ -167,8 +167,7 @@ public final class LibraryLoader {
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof Dependency)) return false;
|
||||
final Dependency other = (Dependency) o;
|
||||
if (!(o instanceof Dependency other)) return false;
|
||||
return this.getGroupId().equals(other.getGroupId()) &&
|
||||
this.getArtifactId().equals(other.getArtifactId()) &&
|
||||
this.getVersion().equals(other.getVersion()) &&
|
||||
|
||||
@@ -259,7 +259,7 @@ public class EntityLocationHandler {
|
||||
clientHasEntity.set(false);
|
||||
}
|
||||
|
||||
private double[] offsets = new double[]{-1.25, 0, 1.25};
|
||||
private final double[] offsets = new double[]{-1.25, 0, 1.25};
|
||||
|
||||
private void createFakeMob(int entityId, Location location) {
|
||||
if(!canCreateMob.contains(entityId)) return;
|
||||
|
||||
@@ -369,11 +369,9 @@ public class PacketHandler {
|
||||
|
||||
if(player.sniffing) {
|
||||
if(type != PacketType.UNKNOWN) {
|
||||
player.sniffedPackets.add("[" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] " +
|
||||
"" + type.name() + ": " + packetObject.toString());
|
||||
player.sniffedPackets.add("[" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] " + type.name() + ": " + packetObject.toString());
|
||||
} else {
|
||||
player.sniffedPackets.add("[" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] (UNKNOWN) " +
|
||||
"" + packetObject.getClass().getSimpleName() + ": " + packetObject);
|
||||
player.sniffedPackets.add("[" + Anticheat.INSTANCE.getKeepaliveProcessor().tick + "] (UNKNOWN) " + packetObject.getClass().getSimpleName() + ": " + packetObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@Getter
|
||||
public class FakeMob {
|
||||
private int entityId;
|
||||
private EntityType type;
|
||||
private final int entityId;
|
||||
private final EntityType type;
|
||||
|
||||
private List<APlayer> watching = Collections.emptyList();
|
||||
|
||||
|
||||
@@ -12,5 +12,5 @@ import java.util.UUID;
|
||||
class ListenerEntry {
|
||||
private final EventPriority priority;
|
||||
private final PacketListener listener;
|
||||
private long id = UUID.randomUUID().getMostSignificantBits();
|
||||
private final long id = UUID.randomUUID().getMostSignificantBits();
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package dev.brighten.ac.packet.wrapper;
|
||||
import dev.brighten.ac.utils.reflections.types.WrappedField;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public abstract class WObject {
|
||||
|
||||
@Getter
|
||||
private Object vanillaObject;
|
||||
private final Object vanillaObject;
|
||||
public WObject(Object object) {
|
||||
this.vanillaObject = object;
|
||||
processVanilla();
|
||||
|
||||
+1
-10
@@ -25,15 +25,6 @@ public class WPacketPlayInBlockDig extends WPacket {
|
||||
return null;
|
||||
}
|
||||
|
||||
public enum EnumDirection {
|
||||
DOWN,
|
||||
UP,
|
||||
NORTH,
|
||||
SOUTH,
|
||||
WEST,
|
||||
EAST
|
||||
}
|
||||
|
||||
public enum EnumPlayerDigType {
|
||||
START_DESTROY_BLOCK,
|
||||
ABORT_DESTROY_BLOCK,
|
||||
@@ -42,7 +33,7 @@ public class WPacketPlayInBlockDig extends WPacket {
|
||||
DROP_ITEM,
|
||||
RELEASE_USE_ITEM;
|
||||
|
||||
private EnumPlayerDigType() {
|
||||
EnumPlayerDigType() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ public class WPacketPlayInEntityAction extends WPacket {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static enum EnumPlayerAction {
|
||||
public enum EnumPlayerAction {
|
||||
START_SNEAKING,
|
||||
STOP_SNEAKING,
|
||||
STOP_SLEEPING,
|
||||
@@ -30,7 +30,7 @@ public class WPacketPlayInEntityAction extends WPacket {
|
||||
RIDING_JUMP,
|
||||
OPEN_INVENTORY;
|
||||
|
||||
private EnumPlayerAction() {
|
||||
EnumPlayerAction() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -26,10 +26,6 @@ public class WPacketPlayInUseEntity extends WPacket {
|
||||
return null;
|
||||
}
|
||||
|
||||
public enum EnumHand {
|
||||
MAIN_HAND, OFF_HAND;
|
||||
}
|
||||
|
||||
public Entity getEntity(World world) {
|
||||
for (Entity entity : world.getEntities()) {
|
||||
if(entity.getEntityId() == entityId) {
|
||||
@@ -39,13 +35,13 @@ public class WPacketPlayInUseEntity extends WPacket {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Getter
|
||||
public enum EnumEntityUseAction {
|
||||
INTERACT("INTERACT"),
|
||||
ATTACK("ATTACK"),
|
||||
INTERACT_AT("INTERACT_AT");
|
||||
|
||||
@Getter
|
||||
private String name;
|
||||
private final String name;
|
||||
|
||||
EnumEntityUseAction(String name) {
|
||||
this.name = name;
|
||||
|
||||
@@ -57,14 +57,14 @@ public enum EnumParticle {
|
||||
private static final Map<Integer, EnumParticle> U = Maps.newHashMap();
|
||||
private static final String[] V;
|
||||
|
||||
private EnumParticle(String var3, int var4, boolean var5, int var6) {
|
||||
EnumParticle(String var3, int var4, boolean var5, int var6) {
|
||||
this.Q = var3;
|
||||
this.R = var4;
|
||||
this.S = var5;
|
||||
this.T = var6;
|
||||
}
|
||||
|
||||
private EnumParticle(String var3, int var4, boolean var5) {
|
||||
EnumParticle(String var3, int var4, boolean var5) {
|
||||
this(var3, var4, var5, 0);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public enum EnumParticle {
|
||||
}
|
||||
|
||||
public static EnumParticle a(int var0) {
|
||||
return (EnumParticle)U.get(var0);
|
||||
return U.get(var0);
|
||||
}
|
||||
|
||||
static {
|
||||
|
||||
+6
-6
@@ -47,7 +47,7 @@ public enum WrappedEnumDirection {
|
||||
private final IntVector m;
|
||||
public static WrappedClass enumDirection;
|
||||
|
||||
private WrappedEnumDirection(int order, int offset, String direction, WrappedEnumDirection.EnumAxisDirection axisDirection, WrappedEnumDirection.EnumAxis axis, IntVector offsetPosition) {
|
||||
WrappedEnumDirection(int order, int offset, String direction, WrappedEnumDirection.EnumAxisDirection axisDirection, WrappedEnumDirection.EnumAxis axis, IntVector offsetPosition) {
|
||||
this.i = offset;
|
||||
this.h = order;
|
||||
this.j = direction;
|
||||
@@ -135,7 +135,7 @@ public enum WrappedEnumDirection {
|
||||
return (T) enumDirection.getEnum(name());
|
||||
}
|
||||
|
||||
public static enum EnumDirectionLimit {
|
||||
public enum EnumDirectionLimit {
|
||||
HORIZONTAL,
|
||||
VERTICAL;
|
||||
|
||||
@@ -144,14 +144,14 @@ public enum WrappedEnumDirection {
|
||||
}
|
||||
}
|
||||
|
||||
public static enum EnumAxisDirection {
|
||||
public enum EnumAxisDirection {
|
||||
POSITIVE(1, "Towards positive"),
|
||||
NEGATIVE(-1, "Towards negative");
|
||||
|
||||
private final int c;
|
||||
private final String d;
|
||||
|
||||
private EnumAxisDirection(int var3, String var4) {
|
||||
EnumAxisDirection(int var3, String var4) {
|
||||
this.c = var3;
|
||||
this.d = var4;
|
||||
}
|
||||
@@ -165,7 +165,7 @@ public enum WrappedEnumDirection {
|
||||
}
|
||||
}
|
||||
|
||||
public static enum EnumAxis {
|
||||
public enum EnumAxis {
|
||||
X("x", WrappedEnumDirection.EnumDirectionLimit.HORIZONTAL),
|
||||
Y("y", WrappedEnumDirection.EnumDirectionLimit.VERTICAL),
|
||||
Z("z", WrappedEnumDirection.EnumDirectionLimit.HORIZONTAL);
|
||||
@@ -185,7 +185,7 @@ public enum WrappedEnumDirection {
|
||||
private final String e;
|
||||
private final WrappedEnumDirection.EnumDirectionLimit f;
|
||||
|
||||
private EnumAxis(String var3, WrappedEnumDirection.EnumDirectionLimit var4) {
|
||||
EnumAxis(String var3, WrappedEnumDirection.EnumDirectionLimit var4) {
|
||||
this.e = var3;
|
||||
this.f = var4;
|
||||
}
|
||||
|
||||
+1
-1
@@ -24,6 +24,6 @@ public class WPacketPlayInClientCommand extends WPacket {
|
||||
public enum WrappedEnumClientCommand {
|
||||
PERFORM_RESPAWN,
|
||||
REQUEST_STATS,
|
||||
OPEN_INVENTORY_ACHIEVEMENT;
|
||||
OPEN_INVENTORY_ACHIEVEMENT
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -37,9 +37,9 @@ public class WPacketPlayOutPosition extends WPacket {
|
||||
Y_ROT(3),
|
||||
X_ROT(4);
|
||||
|
||||
private int f;
|
||||
private final int f;
|
||||
|
||||
private EnumPlayerTeleportFlags(int var3) {
|
||||
EnumPlayerTeleportFlags(int var3) {
|
||||
this.f = var3;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,15 +24,6 @@ public class AxisAlignedBB {
|
||||
this.maxZ = Math.max(d2, d5);
|
||||
}
|
||||
|
||||
public AxisAlignedBB(BoundingBox box) {
|
||||
this.minX = box.minX;
|
||||
this.minY = box.minY;
|
||||
this.minZ = box.minZ;
|
||||
this.maxX = box.maxX;
|
||||
this.maxY = box.maxY;
|
||||
this.maxZ = box.maxZ;
|
||||
}
|
||||
|
||||
public AxisAlignedBB(SimpleCollisionBox box) {
|
||||
this.minX = box.minX;
|
||||
this.minY = box.minY;
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class BlockBounds {
|
||||
public List<BoundingBox> bounds = new ArrayList<>();
|
||||
public int id;
|
||||
|
||||
public BlockBounds(int id, BoundingBox... boxes) {
|
||||
bounds.addAll(Arrays.asList(boxes));
|
||||
}
|
||||
}
|
||||
@@ -1,315 +0,0 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
import dev.brighten.ac.utils.world.types.SimpleCollisionBox;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BoundingBox {
|
||||
|
||||
public float minX, minY, minZ, maxX, maxY, maxZ;
|
||||
|
||||
public BoundingBox(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) {
|
||||
this.minX = minX;
|
||||
this.minY = minY;
|
||||
this.minZ = minZ;
|
||||
this.maxX = maxX;
|
||||
this.maxY = maxY;
|
||||
this.maxZ = maxZ;
|
||||
}
|
||||
|
||||
public BoundingBox(Vector min, Vector max) {
|
||||
this.minX = (float) Math.min(min.getX(), max.getX());
|
||||
this.minY = (float) Math.min(min.getY(), max.getY());
|
||||
this.minZ = (float) Math.min(min.getZ(), max.getZ());
|
||||
this.maxX = (float) Math.max(min.getX(), max.getX());
|
||||
this.maxY = (float) Math.max(min.getY(), max.getY());
|
||||
this.maxZ = (float) Math.max(min.getZ(), max.getZ());
|
||||
}
|
||||
|
||||
public BoundingBox(BoundingBox one, BoundingBox two) {
|
||||
this.minX = Math.min(one.minX, two.minX);
|
||||
this.minY = Math.min(one.minY, two.minY);
|
||||
this.minZ = Math.min(one.minZ, two.minZ);
|
||||
this.maxX = Math.max(one.maxX, two.maxX);
|
||||
this.maxY = Math.max(one.maxY, two.maxY);
|
||||
this.maxZ = Math.max(one.maxZ, two.maxZ);
|
||||
}
|
||||
|
||||
public BoundingBox add(float x, float y, float z) {
|
||||
float newMinX = minX + x;
|
||||
float newMaxX = maxX + x;
|
||||
float newMinY = minY + y;
|
||||
float newMaxY = maxY + y;
|
||||
float newMinZ = minZ + z;
|
||||
float newMaxZ = maxZ + z;
|
||||
|
||||
return new BoundingBox(newMinX, newMinY, newMinZ, newMaxX, newMaxY, newMaxZ);
|
||||
}
|
||||
|
||||
public BoundingBox add(Vector vector) {
|
||||
float x = (float) vector.getX(), y = (float) vector.getY(), z = (float) vector.getZ();
|
||||
|
||||
float newMinX = minX + x;
|
||||
float newMaxX = maxX + x;
|
||||
float newMinY = minY + y;
|
||||
float newMaxY = maxY + y;
|
||||
float newMinZ = minZ + z;
|
||||
float newMaxZ = maxZ + z;
|
||||
|
||||
return new BoundingBox(newMinX, newMinY, newMinZ, newMaxX, newMaxY, newMaxZ);
|
||||
}
|
||||
|
||||
public BoundingBox grow(float x, float y, float z) {
|
||||
float newMinX = minX - x;
|
||||
float newMaxX = maxX + x;
|
||||
float newMinY = minY - y;
|
||||
float newMaxY = maxY + y;
|
||||
float newMinZ = minZ - z;
|
||||
float newMaxZ = maxZ + z;
|
||||
|
||||
return new BoundingBox(newMinX, newMinY, newMinZ, newMaxX, newMaxY, newMaxZ);
|
||||
}
|
||||
|
||||
public BoundingBox shrink(float x, float y, float z) {
|
||||
float newMinX = minX + x;
|
||||
float newMaxX = maxX - x;
|
||||
float newMinY = minY + y;
|
||||
float newMaxY = maxY - y;
|
||||
float newMinZ = minZ + z;
|
||||
float newMaxZ = maxZ - z;
|
||||
|
||||
return new BoundingBox(newMinX, newMinY, newMinZ, newMaxX, newMaxY, newMaxZ);
|
||||
}
|
||||
|
||||
public BoundingBox add(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) {
|
||||
return new BoundingBox(this.minX + minX, this.minY + minY, this.minZ + minZ, this.maxX + maxX, this.maxY + maxY, this.maxZ + maxZ);
|
||||
}
|
||||
|
||||
public BoundingBox subtract(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) {
|
||||
return new BoundingBox(this.minX - minX, this.minY - minY, this.minZ - minZ, this.maxX - maxX, this.maxY - maxY, this.maxZ - maxZ);
|
||||
}
|
||||
|
||||
public boolean intersectsWithBox(Vector vector) {
|
||||
return (vector.getX() > this.minX && vector.getX() < this.maxX) && ((vector.getY() > this.minY && vector.getY() < this.maxY) && (vector.getZ() > this.minZ && vector.getZ() < this.maxZ));
|
||||
}
|
||||
|
||||
public Vector getMinimum() {
|
||||
return new Vector(minX, minY, minZ);
|
||||
}
|
||||
|
||||
public Vector getMaximum() {
|
||||
return new Vector(maxX, maxY, maxZ);
|
||||
}
|
||||
|
||||
public List<Block> getAllBlocks(Player player) {
|
||||
Location min = new Location(player.getWorld(), MathUtils.floor(minX), MathUtils.floor(minY), MathUtils.floor(minZ));
|
||||
Location max = new Location(player.getWorld(), MathUtils.floor(maxX), MathUtils.floor(maxY), MathUtils.floor(maxZ));
|
||||
List<Block> all = new ArrayList<>();
|
||||
for (float x = (float) min.getX(); x < max.getX(); x++) {
|
||||
for (float y = (float) min.getY(); y < max.getY(); y++) {
|
||||
for (float z = (float) min.getZ(); z < max.getZ(); z++) {
|
||||
Block block = BlockUtils.getBlock(new Location(player.getWorld(), x, y, z));
|
||||
if (block != null && block.getType().getId() != 0) {
|
||||
all.add(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
public boolean intersectsWithBox(Object other) {
|
||||
if (other instanceof BoundingBox) {
|
||||
BoundingBox otherBox = (BoundingBox) other;
|
||||
return otherBox.maxX > this.minX && otherBox.minX < this.maxX && otherBox.maxY > this.minY && otherBox.minY < this.maxY && otherBox.maxZ > this.minZ && otherBox.minZ < this.maxZ;
|
||||
} else {
|
||||
float otherMinX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "a"), other);
|
||||
float otherMinY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "b"), other);
|
||||
float otherMinZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "c"), other);
|
||||
float otherMaxX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "d"), other);
|
||||
float otherMaxY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "e"), other);
|
||||
float otherMaxZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "f"), other);
|
||||
return otherMaxX > minX && otherMinX < maxX && otherMaxY > minY && otherMinY < maxY && otherMaxZ > minZ && otherMinZ < maxZ;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean collides(Vector vector) {
|
||||
return (vector.getX() >= this.minX && vector.getX() <= this.maxX) && ((vector.getY() >= this.minY && vector.getY() <= this.maxY) && (vector.getZ() >= this.minZ && vector.getZ() <= this.maxZ));
|
||||
}
|
||||
|
||||
public boolean collides(Object other) {
|
||||
if (other instanceof BoundingBox) {
|
||||
BoundingBox otherBox = (BoundingBox) other;
|
||||
return otherBox.maxX >= this.minX && otherBox.minX <= this.maxX && otherBox.maxY >= this.minY && otherBox.minY <= this.maxY && otherBox.maxZ >= this.minZ && otherBox.minZ <= this.maxZ;
|
||||
} else {
|
||||
float otherMinX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "a"), other);
|
||||
float otherMinY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "b"), other);
|
||||
float otherMinZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "c"), other);
|
||||
float otherMaxX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "d"), other);
|
||||
float otherMaxY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "e"), other);
|
||||
float otherMaxZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "f"), other);
|
||||
return otherMaxX >= minX && otherMinX <= maxX && otherMaxY >= minY && otherMinY <= maxY && otherMaxZ >= minZ && otherMinZ <= maxZ;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean collidesHorizontally(Vector vector) {
|
||||
return (vector.getX() >= this.minX && vector.getX() <= this.maxX) && ((vector.getY() > this.minY && vector.getY() < this.maxY) && (vector.getZ() >= this.minZ && vector.getZ() <= this.maxZ));
|
||||
}
|
||||
|
||||
public boolean collidesHorizontally(Object other) {
|
||||
if (other instanceof BoundingBox) {
|
||||
BoundingBox otherBox = (BoundingBox) other;
|
||||
return otherBox.maxX >= this.minX && otherBox.minX <= this.maxX && otherBox.maxY > this.minY && otherBox.minY < this.maxY && otherBox.maxZ >= this.minZ && otherBox.minZ <= this.maxZ;
|
||||
} else {
|
||||
float otherMinX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "a"), other);
|
||||
float otherMinY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "b"), other);
|
||||
float otherMinZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "c"), other);
|
||||
float otherMaxX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "d"), other);
|
||||
float otherMaxY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "e"), other);
|
||||
float otherMaxZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "f"), other);
|
||||
return otherMaxX >= minX && otherMinX <= maxX && otherMaxY > minY && otherMinY < maxY && otherMaxZ >= minZ && otherMinZ <= maxZ;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean collidesVertically(Vector vector) {
|
||||
return (vector.getX() > this.minX && vector.getX() < this.maxX) && ((vector.getY() >= this.minY && vector.getY() <= this.maxY) && (vector.getZ() > this.minZ && vector.getZ() < this.maxZ));
|
||||
}
|
||||
|
||||
public boolean collidesVertically(Object other) {
|
||||
if (other instanceof BoundingBox) {
|
||||
BoundingBox otherBox = (BoundingBox) other;
|
||||
return otherBox.maxX > this.minX && otherBox.minX < this.maxX && otherBox.maxY >= this.minY && otherBox.minY <= this.maxY && otherBox.maxZ > this.minZ && otherBox.minZ < this.maxZ;
|
||||
} else {
|
||||
float otherMinX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "a"), other);
|
||||
float otherMinY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "b"), other);
|
||||
float otherMinZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "c"), other);
|
||||
float otherMaxX = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "d"), other);
|
||||
float otherMaxY = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "e"), other);
|
||||
float otherMaxZ = (float) (double) ReflectionsUtil.getFieldValue(ReflectionsUtil.getFieldByName(other.getClass(), "f"), other);
|
||||
return otherMaxX > minX && otherMinX < maxX && otherMaxY >= minY && otherMinY <= maxY && otherMaxZ > minZ && otherMinZ < maxZ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if instance and the argument bounding boxes overlap in the Y and Z dimensions, calculate the offset between them
|
||||
* in the X dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the
|
||||
* calculated offset. Otherwise return the calculated offset.
|
||||
*/
|
||||
public double calculateXOffset(BoundingBox other, double offsetX) {
|
||||
if (other.maxY > this.minY && other.minY < this.maxY && other.maxZ > this.minZ && other.minZ < this.maxZ) {
|
||||
if (offsetX > 0.0D && other.maxX <= this.minX) {
|
||||
double d1 = this.minX - other.maxX;
|
||||
|
||||
if (d1 < offsetX) {
|
||||
offsetX = d1;
|
||||
}
|
||||
} else if (offsetX < 0.0D && other.minX >= this.maxX) {
|
||||
double d0 = this.maxX - other.minX;
|
||||
|
||||
if (d0 > offsetX) {
|
||||
offsetX = d0;
|
||||
}
|
||||
}
|
||||
|
||||
return offsetX;
|
||||
} else {
|
||||
return offsetX;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if instance and the argument bounding boxes overlap in the X and Z dimensions, calculate the offset between them
|
||||
* in the Y dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the
|
||||
* calculated offset. Otherwise return the calculated offset.
|
||||
*/
|
||||
public double calculateYOffset(BoundingBox other, double offsetY) {
|
||||
if (other.maxX > this.minX && other.minX < this.maxX && other.maxZ > this.minZ && other.minZ < this.maxZ) {
|
||||
if (offsetY > 0.0D && other.maxY <= this.minY) {
|
||||
double d1 = this.minY - other.maxY;
|
||||
|
||||
if (d1 < offsetY) {
|
||||
offsetY = d1;
|
||||
}
|
||||
} else if (offsetY < 0.0D && other.minY >= this.maxY) {
|
||||
double d0 = this.maxY - other.minY;
|
||||
|
||||
if (d0 > offsetY) {
|
||||
offsetY = d0;
|
||||
}
|
||||
}
|
||||
|
||||
return offsetY;
|
||||
} else {
|
||||
return offsetY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if instance and the argument bounding boxes overlap in the Y and X dimensions, calculate the offset between them
|
||||
* in the Z dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the
|
||||
* calculated offset. Otherwise return the calculated offset.
|
||||
*/
|
||||
public double calculateZOffset(BoundingBox other, double offsetZ) {
|
||||
if (other.maxX > this.minX && other.minX < this.maxX && other.maxY > this.minY && other.minY < this.maxY) {
|
||||
if (offsetZ > 0.0D && other.maxZ <= this.minZ) {
|
||||
double d1 = this.minZ - other.maxZ;
|
||||
|
||||
if (d1 < offsetZ) {
|
||||
offsetZ = d1;
|
||||
}
|
||||
} else if (offsetZ < 0.0D && other.minZ >= this.maxZ) {
|
||||
double d0 = this.maxZ - other.minZ;
|
||||
|
||||
if (d0 > offsetZ) {
|
||||
offsetZ = d0;
|
||||
}
|
||||
}
|
||||
|
||||
return offsetZ;
|
||||
} else {
|
||||
return offsetZ;
|
||||
}
|
||||
}
|
||||
|
||||
public BoundingBox addCoord(float x, float y, float z) {
|
||||
float d0 = this.minX;
|
||||
float d1 = this.minY;
|
||||
float d2 = this.minZ;
|
||||
float d3 = this.maxX;
|
||||
float d4 = this.maxY;
|
||||
float d5 = this.maxZ;
|
||||
|
||||
if (x < 0.0D) {
|
||||
d0 += x;
|
||||
} else if (x > 0.0D) {
|
||||
d3 += x;
|
||||
}
|
||||
|
||||
if (y < 0.0D) {
|
||||
d1 += y;
|
||||
} else if (y > 0.0D) {
|
||||
d4 += y;
|
||||
}
|
||||
|
||||
if (z < 0.0D) {
|
||||
d2 += z;
|
||||
} else if (z > 0.0D) {
|
||||
d5 += z;
|
||||
}
|
||||
|
||||
return new BoundingBox(d0,d1,d2,d3,d4,d5);
|
||||
}
|
||||
|
||||
public SimpleCollisionBox toCollisionBox() {
|
||||
return new SimpleCollisionBox(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "[" + minX + ", " + minY + ", " + minZ + ", " + maxX + ", " + maxY + ", " + maxZ + "]";
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import dev.brighten.ac.utils.reflections.types.WrappedMethod;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.tree.AnnotationNode;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
@@ -27,6 +28,7 @@ import java.net.URL;
|
||||
import java.nio.file.*;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
@@ -38,14 +40,11 @@ public class ClassScanner {
|
||||
private final PathMatcher CLASS_FILE = create("glob:*.class");
|
||||
private final PathMatcher ARCHIVE = create("glob:*.{jar}");
|
||||
|
||||
public void initializeScanner(Class<? extends Plugin> mainClass, Plugin plugin, ClassLoader loader,
|
||||
boolean loadListeners, boolean loadCommands) {
|
||||
initializeScanner(mainClass, plugin, loader, scanFile(null, mainClass), loadListeners,
|
||||
loadCommands);
|
||||
public void initializeScanner(Class<? extends Plugin> mainClass, Plugin plugin, ClassLoader loader) {
|
||||
initializeScanner(mainClass, plugin, loader, scanFile(null, mainClass));
|
||||
}
|
||||
|
||||
public void initializeScanner(Class<? extends Plugin> mainClass, Plugin plugin, ClassLoader loader, Set<String> names,
|
||||
boolean loadListeners, boolean loadCommands) {
|
||||
public void initializeScanner(Class<? extends Plugin> mainClass, Plugin plugin, ClassLoader loader, Set<String> names) {
|
||||
names.stream()
|
||||
.map(name -> {
|
||||
if(loader != null) {
|
||||
@@ -55,7 +54,7 @@ public class ClassScanner {
|
||||
} else
|
||||
return new WrappedClass(Class.forName(name, true, loader));
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Could not initialize scanner!", e);
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
@@ -69,29 +68,16 @@ public class ClassScanner {
|
||||
String[] required = init.requirePlugins();
|
||||
|
||||
if(required.length > 0) {
|
||||
if(init.requireType() == Init.RequireType.ALL) {
|
||||
return Arrays.stream(required)
|
||||
.allMatch(name -> {
|
||||
if(name.contains("||")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.anyMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else if(name.contains("&&")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.allMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else return Bukkit.getPluginManager().isPluginEnabled(name);
|
||||
});
|
||||
} else {
|
||||
return Arrays.stream(required)
|
||||
.anyMatch(name -> {
|
||||
if(name.contains("||")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.anyMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else if(name.contains("&&")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.allMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else return Bukkit.getPluginManager().isPluginEnabled(name);
|
||||
});
|
||||
}
|
||||
return Arrays.stream(required)
|
||||
.anyMatch(name -> {
|
||||
if(name.contains("||")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.anyMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else if(name.contains("&&")) {
|
||||
return Arrays.stream(name.split("\\|\\|"))
|
||||
.allMatch(n2 -> Bukkit.getPluginManager().isPluginEnabled(n2));
|
||||
} else return Bukkit.getPluginManager().isPluginEnabled(name);
|
||||
});
|
||||
}
|
||||
return true;
|
||||
})
|
||||
@@ -99,7 +85,6 @@ public class ClassScanner {
|
||||
c.getAnnotation(Init.class).priority().getPriority(), Comparator.reverseOrder()))
|
||||
.forEach(c -> {
|
||||
Object obj = c.getParent().equals(mainClass) ? plugin : c.getConstructor().newInstance();
|
||||
Init annotation = c.getAnnotation(Init.class);
|
||||
|
||||
if(obj instanceof Listener listener) {
|
||||
Bukkit.getPluginManager().registerEvents(listener, plugin);
|
||||
@@ -110,7 +95,7 @@ public class ClassScanner {
|
||||
if(obj instanceof BaseCommand command) {
|
||||
Anticheat.INSTANCE.alog(true,"&7Found BaseCommand for class &e"
|
||||
+ c.getParent().getSimpleName() + "&7! Registering commands...");
|
||||
Anticheat.INSTANCE.getCommandManager().registerCommand((BaseCommand)obj);
|
||||
Anticheat.INSTANCE.getCommandManager().registerCommand(command);
|
||||
}
|
||||
|
||||
for (WrappedMethod method : c.getMethods()) {
|
||||
@@ -125,7 +110,7 @@ public class ClassScanner {
|
||||
if(field.isAnnotationPresent(ConfigSetting.class)) {
|
||||
ConfigSetting setting = field.getAnnotation(ConfigSetting.class);
|
||||
|
||||
String name = setting.name().length() > 0
|
||||
String name = !setting.name().isEmpty()
|
||||
? setting.name()
|
||||
: field.getField().getName();
|
||||
|
||||
@@ -136,12 +121,12 @@ public class ClassScanner {
|
||||
|
||||
Configuration config = Anticheat.INSTANCE.getAnticheatConfig();
|
||||
|
||||
if(config.get((setting.path().length() > 0 ? setting.path() + "." : "") + name) == null) {
|
||||
if(config.get((!setting.path().isEmpty() ? setting.path() + "." : "") + name) == null) {
|
||||
Anticheat.INSTANCE.alog(true,"&7Value not set in config! Setting value...");
|
||||
config.set((setting.path().length() > 0 ? setting.path() + "." : "") + name, field.get(obj));
|
||||
config.set((!setting.path().isEmpty() ? setting.path() + "." : "") + name, field.get(obj));
|
||||
Anticheat.INSTANCE.saveConfig();
|
||||
} else {
|
||||
Object configObj = config.get((setting.path().length() > 0 ? setting.path() + "." : "") + name);
|
||||
Object configObj = config.get((!setting.path().isEmpty() ? setting.path() + "." : "") + name);
|
||||
Anticheat.INSTANCE.alog(true, "&7Set field to value &e%s&7.",
|
||||
(setting.hide() ? "HIDDEN" : configObj));
|
||||
field.set(obj, configObj);
|
||||
@@ -197,9 +182,9 @@ public class ClassScanner {
|
||||
private void scanDirectory(Path dir, Class<? extends Annotation> annotationClass, final Set<String> plugins) {
|
||||
try {
|
||||
Files.walkFileTree(dir, newHashSet(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,
|
||||
new SimpleFileVisitor<Path>() {
|
||||
new SimpleFileVisitor<>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
|
||||
public @NotNull FileVisitResult visitFile(Path path, @NotNull BasicFileAttributes attrs) throws IOException {
|
||||
if (CLASS_FILE.matches(path.getFileName())) {
|
||||
try (InputStream in = Files.newInputStream(path)) {
|
||||
String plugin = findClass(in, annotationClass);
|
||||
@@ -213,7 +198,7 @@ public class ClassScanner {
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Error scanning directory", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,15 +211,14 @@ public class ClassScanner {
|
||||
String className = classNode.name.replace('/', '.');
|
||||
final String anName = annotationClass.getName().replace(".", "/");
|
||||
if (classNode.visibleAnnotations != null) {
|
||||
for (Object node : classNode.visibleAnnotations) {
|
||||
AnnotationNode annotation = (AnnotationNode) node;
|
||||
if (annotation.desc
|
||||
for (AnnotationNode node : classNode.visibleAnnotations) {
|
||||
if (node.desc
|
||||
.equals("L" + anName + ";"))
|
||||
return className;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
//Bukkit.getLogger().info("Failed to scan: " + in.toString());
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to scan: " + in.toString(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -260,7 +244,7 @@ public class ClassScanner {
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to scan path: " + path, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,9 +290,9 @@ public class ClassScanner {
|
||||
private void scanDirectory(String file, Path dir, final Set<String> plugins) {
|
||||
try {
|
||||
Files.walkFileTree(dir, newHashSet(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,
|
||||
new SimpleFileVisitor<Path>() {
|
||||
new SimpleFileVisitor<>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
|
||||
public @NotNull FileVisitResult visitFile(Path path, @NotNull BasicFileAttributes attrs) throws IOException {
|
||||
if (CLASS_FILE.matches(path.getFileName())) {
|
||||
try (InputStream in = Files.newInputStream(path)) {
|
||||
String plugin = findPlugin(file, in);
|
||||
@@ -322,10 +306,11 @@ public class ClassScanner {
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to scan dir: " + dir, e);
|
||||
}
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
private <E> HashSet<E> newHashSet(E... elements) {
|
||||
HashSet<E> set = new HashSet<>();
|
||||
Collections.addAll(set, elements);
|
||||
@@ -354,7 +339,7 @@ public class ClassScanner {
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to scan zip: " + path + "/" + file, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -365,18 +350,17 @@ public class ClassScanner {
|
||||
reader.accept(classNode, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
|
||||
String className = classNode.name.replace('/', '.');
|
||||
if (classNode.visibleAnnotations != null) {
|
||||
for (Object node : classNode.visibleAnnotations) {
|
||||
AnnotationNode annotation = (AnnotationNode) node;
|
||||
if ((file == null && annotation.desc
|
||||
for (AnnotationNode node : classNode.visibleAnnotations) {
|
||||
if ((file == null && node.desc
|
||||
.equals("L" + Init.class.getName().replace(".", "/") + ";"))
|
||||
|| (file != null && annotation.desc
|
||||
|| (file != null && node.desc
|
||||
.equals("L" + file.replace(".", "/") + ";")))
|
||||
return className;
|
||||
}
|
||||
}
|
||||
if (classNode.superName != null && (classNode.superName.equals(file))) return className;
|
||||
} catch (Exception e) {
|
||||
//System.out.println("Failed to scan: " + in.toString());
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to find plugin: " + file, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ public class Helper {
|
||||
}
|
||||
|
||||
public static SimpleCollisionBox getEntityCollision(Entity entity) {
|
||||
return new SimpleCollisionBox((Object) MinecraftReflection.getEntityBoundingBox(entity));
|
||||
return new SimpleCollisionBox(MinecraftReflection.getEntityBoundingBox(entity));
|
||||
}
|
||||
|
||||
public static List<SimpleCollisionBox> getCollisions(APlayer player, SimpleCollisionBox collisionBox, int mask) {
|
||||
@@ -269,7 +269,7 @@ public class Helper {
|
||||
if (!BlockUtils.isEntityCollidable(entity)) continue;
|
||||
|
||||
SimpleCollisionBox entityCollisionBox =
|
||||
new SimpleCollisionBox((Object) MinecraftReflection.getEntityBoundingBox(entity));
|
||||
new SimpleCollisionBox(MinecraftReflection.getEntityBoundingBox(entity));
|
||||
|
||||
if (entityCollisionBox.isIntersected(collisionBox))
|
||||
entityCollisionBox.downCast(collisionBoxes);
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class Pastebin {
|
||||
static String pasteURL = "https://funkemunky.cc/pastebin/make";
|
||||
@@ -15,18 +17,6 @@ public class Pastebin {
|
||||
|
||||
}
|
||||
|
||||
public static String nonce() {
|
||||
Object player = Bukkit.getPlayer("");
|
||||
|
||||
player = new Object();
|
||||
|
||||
return "%%__NONCE__%%";
|
||||
}
|
||||
|
||||
public static String userId() {
|
||||
return "%%__USER__%%";
|
||||
}
|
||||
|
||||
static String checkResponse(String response) {
|
||||
if (response.startsWith("Bad API request")) {
|
||||
return response.substring(17);
|
||||
@@ -36,27 +26,14 @@ public class Pastebin {
|
||||
|
||||
static public String makePaste(String body, String name, Privacy privacy)
|
||||
throws UnsupportedEncodingException {
|
||||
String content = URLEncoder.encode(body, "UTF-8");
|
||||
String title = URLEncoder.encode(name + " report", "UTF-8");
|
||||
String content = URLEncoder.encode(body, StandardCharsets.UTF_8);
|
||||
String title = URLEncoder.encode(name + " report", StandardCharsets.UTF_8);
|
||||
String data = "body=" + content + "&name=" + title + "&privacy=" + privacy.name();
|
||||
String response = Pastebin.page(Pastebin.pasteURL, data);
|
||||
|
||||
if(response == null) return "";
|
||||
String check = Pastebin.checkResponse(response);
|
||||
if (!check.equals("")) {
|
||||
return check;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
static public String makePaste(String body, String name, Privacy privacy, String expire)
|
||||
throws UnsupportedEncodingException {
|
||||
String content = URLEncoder.encode(body, "UTF-8");
|
||||
String title = URLEncoder.encode(name + " report", "UTF-8");
|
||||
String data = "body=" + content + "&name=" + title + "&privacy=" + privacy.name() + "&expire=" + expire;
|
||||
String response = Pastebin.page(Pastebin.pasteURL, data);
|
||||
String check = Pastebin.checkResponse(response);
|
||||
if (!check.equals("")) {
|
||||
if (!check.isEmpty()) {
|
||||
return check;
|
||||
}
|
||||
return response;
|
||||
@@ -91,7 +68,7 @@ public class Pastebin {
|
||||
InputStream is = connection.getInputStream();
|
||||
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
|
||||
String line;
|
||||
StringBuffer response = new StringBuffer();
|
||||
StringBuilder response = new StringBuilder();
|
||||
while ((line = rd.readLine()) != null) {
|
||||
response.append(line);
|
||||
}
|
||||
@@ -99,7 +76,7 @@ public class Pastebin {
|
||||
return response.toString();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Failed to upload paste", e);
|
||||
return null;
|
||||
|
||||
} finally {
|
||||
@@ -110,6 +87,7 @@ public class Pastebin {
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
public enum Privacy {
|
||||
PUBLIC(0), UNLISTED(1), PRIVATE(2);
|
||||
|
||||
@@ -119,8 +97,5 @@ public class Pastebin {
|
||||
this.privacy = privacy;
|
||||
}
|
||||
|
||||
public int getPrivacy() {
|
||||
return privacy;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import sun.misc.Unsafe;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
|
||||
@SuppressWarnings({"ConstantConditions", "unchecked"})
|
||||
public final class ReflectionUtil {
|
||||
private static final Unsafe UNSAFE = ReflectionUtil.getUnsafeInstance();
|
||||
|
||||
private static Unsafe getUnsafeInstance() {
|
||||
try {
|
||||
Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
|
||||
unsafeField.setAccessible(true);
|
||||
return (Unsafe) unsafeField.get(null);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
Anticheat.INSTANCE.getLogger().severe("Could not locate Unsafe object!");
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Field get(Class<?> oClass, Class<?> type, int index) throws NoSuchFieldException {
|
||||
int i = 0;
|
||||
for (Field field : oClass.getDeclaredFields()) {
|
||||
if (field.getType() == type) {
|
||||
if (i == index) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
throw new NoSuchFieldException("Could not find field of class " + type.getName() + " with index " + index);
|
||||
}
|
||||
|
||||
public static Field getFieldByClassNames(Class<?> clazz, String... simpleNames) throws NoSuchFieldException {
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
String typeSimpleName = field.getType().getSimpleName();
|
||||
for (String name : simpleNames) {
|
||||
if (name.equals(typeSimpleName)) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new NoSuchFieldException("Could not find field in class " + clazz.getName() + " with names " + Arrays.toString(simpleNames));
|
||||
}
|
||||
|
||||
public static Field getFieldByType(Class<?> clazz, Class<?> type) throws NoSuchFieldException {
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
Class<?> foundType = field.getType();
|
||||
if (type.isAssignableFrom(foundType)) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
|
||||
throw new NoSuchFieldException("Could not find field in class " + clazz.getName() + " with type " + type.getName());
|
||||
}
|
||||
|
||||
public static Method getMethodByName(Class<?> clazz, String name) throws NoSuchMethodException {
|
||||
for (Method method : clazz.getDeclaredMethods()) {
|
||||
if (name.equals(method.getName())) {
|
||||
method.setAccessible(true);
|
||||
return method;
|
||||
}
|
||||
}
|
||||
|
||||
throw new NoSuchMethodException("Could not find method in class " + clazz.getName() + " with name " + name);
|
||||
}
|
||||
|
||||
public static Class<?> getSuperClassByName(Class<?> clazz, String simpleName) {
|
||||
if (!clazz.getSimpleName().equals(simpleName)) {
|
||||
Class<?> superClazz;
|
||||
while((superClazz = clazz.getSuperclass()) != null) {
|
||||
if (superClazz.getSimpleName().equals(simpleName)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return superClazz;
|
||||
} else {
|
||||
return clazz;
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void setUnsafe(Object object, Field field, T value) {
|
||||
ReflectionUtil.UNSAFE.putObject(object, ReflectionUtil.UNSAFE.objectFieldOffset(field), value);
|
||||
}
|
||||
|
||||
public static <T> T instantiateUnsafe(Class<T> clazz) throws Exception{
|
||||
return (T) ReflectionUtil.UNSAFE.allocateInstance(clazz);
|
||||
}
|
||||
}
|
||||
@@ -1,489 +0,0 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import dev.brighten.ac.packet.ProtocolVersion;
|
||||
import dev.brighten.ac.utils.reflections.Reflections;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class ReflectionsUtil {
|
||||
public static Class<?> blockPosition = null;
|
||||
private static final String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
public static Class<?> EntityPlayer = getNMSClass("EntityPlayer");
|
||||
public static Class<?> Entity = getNMSClass("Entity");
|
||||
public static Class<?> CraftPlayer = getCBClass("entity.CraftPlayer");
|
||||
public static Class<?> CraftEntity = getCBClass("entity.CraftEntity");
|
||||
public static Class<?> CraftWorld = getCBClass("CraftWorld");
|
||||
private static final Class<?> craftServer = getCBClass("CraftServer");
|
||||
public static Class<?> World = getNMSClass("World");
|
||||
public static Class<?> worldServer = getNMSClass("WorldServer");
|
||||
public static Class<?> playerConnection = getNMSClass("PlayerConnection");
|
||||
public static Class<?> networkManager = getNMSClass("NetworkManager");
|
||||
public static Class<?> minecraftServer = getNMSClass("MinecraftServer"), nmsItemStack = getNMSClass("ItemStack");
|
||||
public static Class<?> packet = getNMSClass("Packet");
|
||||
public static Class<?> iBlockData = null;
|
||||
public static Class<?> iBlockAccess = null;
|
||||
private static final Class<?> vanillaBlock = getNMSClass("Block");
|
||||
private static final Method getCubes = getMethod(World, "a", getNMSClass("AxisAlignedBB"));
|
||||
private static final Method getCubes1_12 = getMethod(World, "getCubes", getNMSClass("Entity"), getNMSClass("AxisAlignedBB"));
|
||||
|
||||
public static Object getEntityPlayer(Player player) {
|
||||
return getMethodValue(getMethod(CraftPlayer, "getHandle"), player);
|
||||
}
|
||||
|
||||
public static Object getEntity(org.bukkit.entity.Entity entity) {
|
||||
return getMethodValue(getMethod(CraftEntity, "getHandle"), entity);
|
||||
}
|
||||
|
||||
public static Object getExpandedBoundingBox(Object box, double x, double y, double z) {
|
||||
return getMethodValue(getMethod(box.getClass(), "grow", double.class, double.class, double.class), box, x, y, z);
|
||||
}
|
||||
|
||||
public static Object modifyBoundingBox(Object box, double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
|
||||
double newminX = (double) getFieldValue(getFieldByName(box.getClass(), "a"), box) - minX;
|
||||
double newminY = (double) getFieldValue(getFieldByName(box.getClass(), "b"), box) - minY;
|
||||
double newminZ = (double) getFieldValue(getFieldByName(box.getClass(), "c"), box) - minZ;
|
||||
double newmaxX = (double) getFieldValue(getFieldByName(box.getClass(), "d"), box) + maxX;
|
||||
double newmaxY = (double) getFieldValue(getFieldByName(box.getClass(), "e"), box) + maxY;
|
||||
double newmaxZ = (double) getFieldValue(getFieldByName(box.getClass(), "f"), box) + maxZ;
|
||||
|
||||
return newInstance(getNMSClass("AxisAlignedBB"), newminX, newminY, newminZ, newmaxX, newmaxY, newmaxZ);
|
||||
}
|
||||
|
||||
private static Vector getBoxMin(Object box) {
|
||||
if (hasField(box.getClass(), "a")) {
|
||||
double x = (double) getFieldValue(getFieldByName(box.getClass(), "a"), box);
|
||||
double y = (double) getFieldValue(getFieldByName(box.getClass(), "b"), box);
|
||||
double z = (double) getFieldValue(getFieldByName(box.getClass(), "c"), box);
|
||||
return new Vector(x, y, z);
|
||||
} else {
|
||||
double x = (double) getFieldValue(getFieldByName(box.getClass(), "minX"), box);
|
||||
double y = (double) getFieldValue(getFieldByName(box.getClass(), "minY"), box);
|
||||
double z = (double) getFieldValue(getFieldByName(box.getClass(), "minZ"), box);
|
||||
return new Vector(x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
public static Object getMinecraftServer() {
|
||||
return getMethodValue(getMethod(craftServer, "getServer"), Bukkit.getServer());
|
||||
}
|
||||
|
||||
private static Vector getBoxMax(Object box) {
|
||||
if (hasField(box.getClass(), "d")) {
|
||||
double x = (double) getFieldValue(getFieldByName(box.getClass(), "d"), box);
|
||||
double y = (double) getFieldValue(getFieldByName(box.getClass(), "e"), box);
|
||||
double z = (double) getFieldValue(getFieldByName(box.getClass(), "f"), box);
|
||||
return new Vector(x, y, z);
|
||||
} else {
|
||||
double x = (double) getFieldValue(getFieldByName(box.getClass(), "maxX"), box);
|
||||
double y = (double) getFieldValue(getFieldByName(box.getClass(), "maxY"), box);
|
||||
double z = (double) getFieldValue(getFieldByName(box.getClass(), "maxZ"), box);
|
||||
return new Vector(x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
public static BoundingBox toBoundingBox(Object aaBB) {
|
||||
Vector min = getBoxMin(aaBB);
|
||||
Vector max = getBoxMax(aaBB);
|
||||
|
||||
return new BoundingBox((float) min.getX(), (float) min.getY(), (float) min.getZ(), (float) max.getX(), (float) max.getY(), (float) max.getZ());
|
||||
}
|
||||
|
||||
public static float getBlockDurability(Block block) {
|
||||
Object vanillaBlock = getVanillaBlock(block);
|
||||
return (float) getFieldValue(getFieldByName(getNMSClass("Block"), "strength"), vanillaBlock);
|
||||
}
|
||||
|
||||
public static boolean canDestroyBlock(Player player, Block block) {
|
||||
Object inventory = getVanillaInventory(player);
|
||||
return (boolean) getMethodValue(getMethod(getNMSClass("PlayerInventory"), "b", getNMSClass("Block")), inventory, ProtocolVersion.getGameVersion().isAbove(ProtocolVersion.V1_8_9) ? getBlockData(block) : getVanillaBlock(block));
|
||||
}
|
||||
|
||||
public static Object getVanillaInventory(Player player) {
|
||||
return getMethodValue(getMethod(getCBClass("inventory.CraftInventoryPlayer"), "getInventory"), player.getInventory());
|
||||
}
|
||||
|
||||
private static final Field frictionFactorField = getFieldByName(vanillaBlock, "frictionFactor");
|
||||
public static float getFriction(Block block) {
|
||||
Object blockNMS = getVanillaBlock(block);
|
||||
|
||||
return (float) getFieldValue(frictionFactorField, blockNMS);
|
||||
}
|
||||
|
||||
public static Object getBlockPosition(Location location) {
|
||||
if (ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_8)) {
|
||||
return newInstance(blockPosition, location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<org.bukkit.entity.Entity> getEntitiesInWorld(org.bukkit.World world) {
|
||||
Object worldHandle = getWorldHandle(world);
|
||||
List<org.bukkit.entity.Entity> toReturn = new ArrayList<>();
|
||||
List<Object> entityList = new ArrayList<>((List<Object>) getFieldValue(getFieldByName(getNMSClass("World"), "entityList"), worldHandle));
|
||||
|
||||
Class<?> entity = getNMSClass("Entity");
|
||||
entityList.forEach(object -> {
|
||||
Object bEntity = getMethodValue(getMethod(entity, "getBukkitEntity"), object);
|
||||
if(bEntity != null) {
|
||||
toReturn.add((org.bukkit.entity.Entity) bEntity);
|
||||
}
|
||||
});
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
public static double getTPS(Server server) {
|
||||
Object handle = getMethodValue(getMethod(getCBClass("CraftServer"), "getHandle"), server);
|
||||
|
||||
return (int) getFieldValue(getFieldByName(getNMSClass("MinecraftServer"), "TPS"), handle);
|
||||
}
|
||||
|
||||
public static float getBlockHardness(final Material material) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||
if (!material.isBlock())
|
||||
return 0;
|
||||
|
||||
final int blockId = material.getId();
|
||||
final Object nmsBlock = getNMSClass("Block").getMethod("getById", Integer.TYPE).invoke(null, blockId);
|
||||
|
||||
try {
|
||||
final Field field = nmsBlock.getClass().getDeclaredField("strength");
|
||||
field.setAccessible(true);
|
||||
return (float) field.get(nmsBlock);
|
||||
} catch (final NoSuchFieldException e) {
|
||||
return 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
public static float getDestroySpeed(Block block, Player player) {
|
||||
|
||||
if (ProtocolVersion.getGameVersion().isAbove(ProtocolVersion.V1_8_9)) {
|
||||
Object item = getVanillaItem(player.getItemInHand());
|
||||
return (float) getMethodValue(getMethod(getNMSClass("Item"), "getDestroySpeed", nmsItemStack, getNMSClass("IBlockData")), item, getVanillaItemStack(player.getItemInHand()), getBlockData(block));
|
||||
} else {
|
||||
Object item = getVanillaItem(player.getInventory().getItemInHand());
|
||||
return (float) getMethodValue(getMethod(getNMSClass("Item"), "getDestroySpeed", nmsItemStack, getNMSClass("Block")), item, getVanillaItemStack(player.getInventory().getItemInHand()), getVanillaBlock(block));
|
||||
}
|
||||
}
|
||||
|
||||
private static final Method getItemMethod = getMethod(nmsItemStack, "getItem");
|
||||
public static Object getVanillaItem(ItemStack itemStack) {
|
||||
return getMethodValue(getMethod(nmsItemStack, "getItem"), getVanillaItemStack(itemStack));
|
||||
}
|
||||
|
||||
public static Object getVanillaItemStack(ItemStack itemStack) {
|
||||
return getMethodValue(getMethod(getCBClass("inventory.CraftItemStack"), "asNMSCopy", getClass("org.bukkit.inventory.ItemStack")), itemStack, itemStack);
|
||||
}
|
||||
|
||||
private static Method getBlockMethod = null,
|
||||
getTypeMethod = null;
|
||||
public static Object getVanillaBlock(Block block) {
|
||||
if (!isBukkitVerison("1_7")) {
|
||||
if(getBlockMethod == null) getBlockMethod = getMethod(iBlockData, "getBlock");
|
||||
Object getType = getBlockData(block);
|
||||
return getMethodValue(getBlockMethod, getType);
|
||||
} else {
|
||||
if(getTypeMethod == null) getTypeMethod = getMethod(worldServer, "getType", int.class, int.class, int.class);
|
||||
Object world = getWorldHandle(block.getWorld());
|
||||
return getMethodValue(getTypeMethod, world, block.getLocation().getBlockX(), block.getLocation().getBlockY(), block.getLocation().getBlockZ());
|
||||
}
|
||||
}
|
||||
|
||||
private static Constructor blockPosConstructor = null;
|
||||
private static Method getTypeMethod2 = null;
|
||||
public static Object getBlockData(Block block) {
|
||||
try {
|
||||
if (!isBukkitVerison("1_7")) {
|
||||
if(blockPosConstructor == null) blockPosConstructor = blockPosition.getConstructor(int.class, int.class, int.class);
|
||||
Object bPos = blockPosConstructor.newInstance(block.getX(), block.getY(), block.getZ());
|
||||
Object world = getWorldHandle(block.getWorld());
|
||||
if(getTypeMethod2 == null) getTypeMethod2 = getMethod(worldServer, "getType", blockPosition);
|
||||
return getMethodValue(getTypeMethod2, world, bPos);
|
||||
} else {
|
||||
Object world = getWorldHandle(block.getWorld());
|
||||
if(getTypeMethod2 == null) getTypeMethod2 = getMethod(worldServer, "getType", int.class, int.class, int.class);
|
||||
return getMethodValue(getTypeMethod2, world, block.getX(), block.getY(), block.getZ());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object getBelowBox(Player player, double below) {
|
||||
Object box = getBoundingBox(player);
|
||||
double minX = (double) getFieldValue(getFieldByName(box.getClass(), "a"), box);
|
||||
double minY = (double) getFieldValue(getFieldByName(box.getClass(), "b"), box) - below;
|
||||
double minZ = (double) getFieldValue(getFieldByName(box.getClass(), "c"), box);
|
||||
double maxX = (double) getFieldValue(getFieldByName(box.getClass(), "d"), box);
|
||||
double maxY = (double) getFieldValue(getFieldByName(box.getClass(), "e"), box);
|
||||
double maxZ = (double) getFieldValue(getFieldByName(box.getClass(), "f"), box);
|
||||
|
||||
try {
|
||||
return getNMSClass("AxisAlignedBB").getConstructor(double.class, double.class, double.class, double.class, double.class, double.class).newInstance(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object getBoundingBox(Player player) {
|
||||
return getBoundingBox((org.bukkit.entity.Entity) player);
|
||||
}
|
||||
|
||||
public static Object getBoundingBox(org.bukkit.entity.Entity entity) {
|
||||
return isBukkitVerison("1_7") ? getFieldValue(getFieldByName(Entity, "boundingBox"), getEntity(entity)) : getMethodValue(getMethod(Entity, "getBoundingBox"), getEntity(entity));
|
||||
}
|
||||
|
||||
public static boolean isBukkitVerison(String version) {
|
||||
return ProtocolVersion.getGameVersion().getServerVersion().contains(version);
|
||||
}
|
||||
|
||||
public static File getPluginFolder() {
|
||||
Object console = getMethodValue(getMethod(getCBClass("CraftServer"), "console"), Anticheat.INSTANCE.getServer());
|
||||
Object options = getFieldValue(getFieldByName(getNMSClass("MinecraftServer"), "options"), console);
|
||||
return (File) getMethodValue(getMethod(getNMSClass("OptionSet"), "valueOf", String.class), options, "plugins");
|
||||
}
|
||||
|
||||
public static boolean isNewVersion() {
|
||||
return isBukkitVerison("1_9") || isBukkitVerison("1_1");
|
||||
}
|
||||
|
||||
public static Class<?> getCBClass(String string) {
|
||||
return getClass("org.bukkit.craftbukkit." + version + "." + string);
|
||||
}
|
||||
|
||||
|
||||
public static Object newAxisAlignedBB(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
|
||||
try {
|
||||
return isBukkitVerison("1_7") ? getMethodValue(getMethod(getNMSClass("AxisAlignedBB"), "a", double.class, double.class, double.class, double.class, double.class, double.class), null, minX, minY, minZ, maxX, maxY, maxZ) : getNMSClass("AxisAlignedBB").getConstructor(double.class, double.class, double.class, double.class, double.class, double.class).newInstance(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object newVoxelShape(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
|
||||
try {
|
||||
return getNMSClass("AxisAlignedBB").getConstructor(double.class, double.class, double.class, double.class, double.class, double.class).newInstance(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static double getMotionY(Player player) {
|
||||
double motionY = 0;
|
||||
try {
|
||||
motionY = (double) ReflectionsUtil.getEntityPlayer(player).getClass().getField("motY").get(ReflectionsUtil.getEntityPlayer(player));
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return motionY;
|
||||
}
|
||||
|
||||
public static Object newAxisAlignedBB(Location from, Location to) {
|
||||
double minX = Math.min(from.getX(), to.getX());
|
||||
double minY = Math.min(from.getY(), to.getY());
|
||||
double minZ = Math.min(from.getZ(), to.getZ());
|
||||
double maxX = Math.max(from.getX(), to.getX());
|
||||
double maxY = Math.max(from.getY(), to.getY());
|
||||
double maxZ = Math.max(from.getZ(), to.getZ());
|
||||
|
||||
try {
|
||||
return getNMSClass("AxisAlignedBB").getConstructor(double.class, double.class, double.class, double.class, double.class, double.class).newInstance(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Class<?> getClass(String string) {
|
||||
try {
|
||||
return Class.forName(string);
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Enum<?> getEnum(Class<?> clazz, String enumName) {
|
||||
return Enum.valueOf((Class<Enum>) clazz, enumName);
|
||||
}
|
||||
|
||||
public static Field getFieldByName(Class<?> clazz, String fieldName) {
|
||||
try {
|
||||
Field field = clazz.getDeclaredField(fieldName) != null ? clazz.getDeclaredField(fieldName) : clazz.getSuperclass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
|
||||
return field;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object setFieldValue(Object object, Field field, Object value) {
|
||||
try {
|
||||
field.set(object, value);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return field.getDeclaringClass();
|
||||
}
|
||||
|
||||
|
||||
public static boolean inBlock(Player player, Object axisAlignedBB) {
|
||||
return getCollidingBlocks(player, axisAlignedBB).size() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method removed in 1.12 and later versions in NMS
|
||||
**/
|
||||
public static Collection<?> getCollidingBlocks(Player player, Object axisAlignedBB) {
|
||||
Object world = getWorldHandle(player.getWorld());
|
||||
return (Collection<?>) (isNewVersion()
|
||||
? getMethodValue(getCubes1_12, world, null, axisAlignedBB)
|
||||
: getMethodValue(getCubes, world, axisAlignedBB));
|
||||
}
|
||||
|
||||
private static final Method craftWorldHandle = getMethod(CraftWorld, "getHandle");
|
||||
public static Object getWorldHandle(org.bukkit.World world) {
|
||||
return getMethodValue(craftWorldHandle, world);
|
||||
}
|
||||
|
||||
public static Field getFirstFieldByType(Class<?> clazz, Class<?> type) {
|
||||
try {
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (field.getType().equals(type)) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... args) {
|
||||
try {
|
||||
Method method = clazz.getMethod(methodName, args);
|
||||
method.setAccessible(true);
|
||||
return method;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Method getMethodNoST(Class<?> clazz, String methodName, Class<?>... args) {
|
||||
try {
|
||||
Method method = clazz.getMethod(methodName, args);
|
||||
method.setAccessible(true);
|
||||
return method;
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean hasMethod(Class clazz, Method method) {
|
||||
return Arrays.stream(clazz.getMethods()).anyMatch(methodLoop -> methodLoop.getName().equals(method.getName()));
|
||||
}
|
||||
|
||||
public static boolean hasMethod(Class clazz, String methodName) {
|
||||
return Arrays.stream(clazz.getMethods()).anyMatch(methodLoop -> methodLoop.getName().equals(methodName));
|
||||
}
|
||||
|
||||
public static Object getMethodValue(Method method, Object object, Object... args) {
|
||||
try {
|
||||
return method.invoke(object, args);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean hasField(Class<?> object, String fieldName) {
|
||||
return Arrays.stream(object.getFields()).anyMatch(field -> field.getName().equalsIgnoreCase(fieldName));
|
||||
}
|
||||
|
||||
public static Object getMethodValueNoST(Method method, Object object, Object... args) {
|
||||
try {
|
||||
return method.invoke(object, args);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object getFieldValue(Field field, Object object) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
return field.get(object);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object getFieldValueNoST(Field field, Object object) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
return field.get(object);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Field getFieldByNameNoST(Class<?> clazz, String fieldName) {
|
||||
try {
|
||||
Field field = clazz.getDeclaredField(fieldName) != null ? clazz.getDeclaredField(fieldName) : clazz.getSuperclass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
|
||||
return field;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object newInstance(Class<?> objectClass, Object... args) {
|
||||
try {
|
||||
return objectClass.getConstructor(args.getClass()).newInstance(args);
|
||||
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Class<?> getNMSClass(String string) {
|
||||
return Reflections.getNMSClass(string).getParent();
|
||||
}
|
||||
|
||||
static {
|
||||
if (ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_8)) {
|
||||
iBlockData = getNMSClass("IBlockData");
|
||||
blockPosition = getNMSClass("BlockPosition");
|
||||
iBlockAccess = getNMSClass("IBlockAccess");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package dev.brighten.ac.utils;
|
||||
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import dev.brighten.ac.utils.reflections.impl.CraftReflection;
|
||||
import dev.brighten.ac.utils.reflections.impl.MinecraftReflection;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class ServerInjector {
|
||||
private static final Collection<String> TICKABLE_CLASS_NAMES = Arrays.asList("IUpdatePlayerListBox", "ITickable", "Runnable");
|
||||
private Field hookedField;
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public void inject() throws Exception {
|
||||
// Start end of tick injection
|
||||
Object server = CraftReflection.getMinecraftServer();
|
||||
Class<?> serverClass = MinecraftReflection.minecraftServer.getParent();
|
||||
|
||||
// Inject our hooked list for end of tick
|
||||
for (Field field : serverClass.getDeclaredFields()) {
|
||||
try {
|
||||
if (field.getType().equals(List.class)) {
|
||||
// Check if type parameters match one of the tickable class names used throughout different versions
|
||||
Class<?> genericType = (Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
|
||||
if (!ServerInjector.TICKABLE_CLASS_NAMES.contains(genericType.getSimpleName())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
field.setAccessible(true);
|
||||
|
||||
// Use a list wrapper to check when the size method is called
|
||||
HookedListWrapper<?> wrapper = new HookedListWrapper<Object>((List) field.get(server)) {
|
||||
@Override
|
||||
public void onSize() {
|
||||
Runnable toRun = null;
|
||||
|
||||
while((toRun = Anticheat.INSTANCE.getOnTickEnd().poll()) != null) {
|
||||
toRun.run();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ReflectionUtil.setUnsafe(server, field, wrapper);
|
||||
this.hookedField = field;
|
||||
break;
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void eject() throws Exception {
|
||||
// Replace hooked wrapper with original
|
||||
if (this.hookedField != null) {
|
||||
Object server = CraftReflection.getMinecraftServer();
|
||||
|
||||
HookedListWrapper<?> hookedListWrapper = (HookedListWrapper<?>) this.hookedField.get(server);
|
||||
|
||||
ReflectionUtil.setUnsafe(server, this.hookedField, hookedListWrapper.getBase());
|
||||
this.hookedField = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,7 +86,7 @@ public class JSONArray {
|
||||
/**
|
||||
* The arrayList where the JSONArray's properties are kept.
|
||||
*/
|
||||
private ArrayList myArrayList;
|
||||
private final ArrayList myArrayList;
|
||||
|
||||
|
||||
/**
|
||||
@@ -619,7 +619,7 @@ public class JSONArray {
|
||||
* @return this.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONArray put(int value) {
|
||||
put(new Integer(value));
|
||||
put(Integer.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -631,7 +631,7 @@ public class JSONArray {
|
||||
* @return this.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONArray put(long value) {
|
||||
put(new Long(value));
|
||||
put(Long.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -723,7 +723,7 @@ public class JSONArray {
|
||||
* @throws JSONException If the index is negative.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONArray put(int index, int value) throws JSONException {
|
||||
put(index, new Integer(value));
|
||||
put(index, Integer.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -739,7 +739,7 @@ public class JSONArray {
|
||||
* @throws JSONException If the index is negative.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONArray put(int index, long value) throws JSONException {
|
||||
put(index, new Long(value));
|
||||
put(index, Long.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ public class JSONObject {
|
||||
/**
|
||||
* The map where the JSONObject's properties are kept.
|
||||
*/
|
||||
private Map map;
|
||||
private final Map map;
|
||||
|
||||
|
||||
/**
|
||||
@@ -241,7 +241,7 @@ public class JSONObject {
|
||||
* @param names An array of strings, the names of the fields to be obtained
|
||||
* from the object.
|
||||
*/
|
||||
public JSONObject(Object object, String names[]) {
|
||||
public JSONObject(Object object, String[] names) {
|
||||
this();
|
||||
Class c = object.getClass();
|
||||
for (int i = 0; i < names.length; i += 1) {
|
||||
@@ -508,7 +508,7 @@ public class JSONObject {
|
||||
if (b == '0' && string.length() > 2 &&
|
||||
(string.charAt(1) == 'x' || string.charAt(1) == 'X')) {
|
||||
try {
|
||||
return new Integer(Integer.parseInt(string.substring(2), 16));
|
||||
return Integer.valueOf(Integer.parseInt(string.substring(2), 16));
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
@@ -517,9 +517,9 @@ public class JSONObject {
|
||||
string.indexOf('e') > -1 || string.indexOf('E') > -1) {
|
||||
return Double.valueOf(string);
|
||||
} else {
|
||||
Long myLong = new Long(string);
|
||||
Long myLong = Long.valueOf(string);
|
||||
if (myLong.longValue() == myLong.intValue()) {
|
||||
return new Integer(myLong.intValue());
|
||||
return Integer.valueOf(myLong.intValue());
|
||||
} else {
|
||||
return myLong;
|
||||
}
|
||||
@@ -1290,7 +1290,7 @@ public class JSONObject {
|
||||
* @throws dev.brighten.ac.utils.json.JSONException If the key is null.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONObject put(String key, int value) throws dev.brighten.ac.utils.json.JSONException {
|
||||
put(key, new Integer(value));
|
||||
put(key, Integer.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -1303,7 +1303,7 @@ public class JSONObject {
|
||||
* @throws dev.brighten.ac.utils.json.JSONException If the key is null.
|
||||
*/
|
||||
public dev.brighten.ac.utils.json.JSONObject put(String key, long value) throws dev.brighten.ac.utils.json.JSONException {
|
||||
put(key, new Long(value));
|
||||
put(key, Long.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -1574,7 +1574,7 @@ public class JSONObject {
|
||||
*
|
||||
* @return NULL.
|
||||
*/
|
||||
protected final Object clone() {
|
||||
protected Object clone() {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,5 +15,5 @@ public interface JSONString {
|
||||
*
|
||||
* @return A strictly syntactically correct JSON text.
|
||||
*/
|
||||
public String toJSONString();
|
||||
String toJSONString();
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ public class JSONTokener {
|
||||
private int index;
|
||||
private int line;
|
||||
private char previous;
|
||||
private Reader reader;
|
||||
private final Reader reader;
|
||||
private boolean usePrevious;
|
||||
|
||||
|
||||
@@ -430,7 +430,7 @@ public class JSONTokener {
|
||||
* @return A JSONException object, suitable for throwing
|
||||
*/
|
||||
public JSONException syntaxError(String message) {
|
||||
return new JSONException(message + toString());
|
||||
return new JSONException(message + this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ public class JSONWriter {
|
||||
/**
|
||||
* The object/array stack.
|
||||
*/
|
||||
private JSONObject stack[];
|
||||
private final JSONObject[] stack;
|
||||
/**
|
||||
* The stack top index. A value of 0 indicates that the stack is empty.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@ package dev.brighten.ac.utils.json;
|
||||
import java.io.*;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class JsonReader {
|
||||
public JsonReader() {
|
||||
@@ -31,7 +31,7 @@ public class JsonReader {
|
||||
|
||||
JSONObject var6;
|
||||
try {
|
||||
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
|
||||
BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
|
||||
String jsonText = readAll(rd);
|
||||
JSONObject json = new JSONObject(jsonText);
|
||||
var6 = json;
|
||||
|
||||
@@ -337,7 +337,7 @@ public class XML {
|
||||
return JSONObject.NULL;
|
||||
}
|
||||
if (string.equals("0")) {
|
||||
return new Integer(0);
|
||||
return Integer.valueOf(0);
|
||||
}
|
||||
|
||||
// If it might be a number, try converting it. If that doesn't work,
|
||||
@@ -357,9 +357,9 @@ public class XML {
|
||||
if (string.indexOf('.') >= 0) {
|
||||
return Double.valueOf(string);
|
||||
} else if (string.indexOf('e') < 0 && string.indexOf('E') < 0) {
|
||||
Long myLong = new Long(string);
|
||||
Long myLong = Long.valueOf(string);
|
||||
if (myLong.longValue() == myLong.intValue()) {
|
||||
return new Integer(myLong.intValue());
|
||||
return Integer.valueOf(myLong.intValue());
|
||||
} else {
|
||||
return myLong;
|
||||
}
|
||||
|
||||
@@ -9,19 +9,15 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class FloatVector implements Cloneable {
|
||||
@Getter
|
||||
@Setter
|
||||
private float x, y, z;
|
||||
|
||||
public FloatVector(Location location) {
|
||||
this.x = MathHelper.floor_double(location.getX());
|
||||
this.y = MathHelper.floor_double(location.getY());
|
||||
this.z = MathHelper.floor_double(location.getZ());
|
||||
}
|
||||
|
||||
public FloatVector clone() {
|
||||
try {
|
||||
return (FloatVector) super.clone();
|
||||
@@ -56,18 +52,12 @@ public class FloatVector implements Cloneable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(!(o instanceof FloatVector)) return false;
|
||||
|
||||
FloatVector FloatVector = (FloatVector) o;
|
||||
return x == FloatVector.x && y == FloatVector.y && z == FloatVector.z;
|
||||
if (!(o instanceof FloatVector that)) return false;
|
||||
return Float.compare(x, that.x) == 0 && Float.compare(y, that.y) == 0 && Float.compare(z, that.z) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 79 * hash + (Float.floatToIntBits(this.x) ^ Float.floatToIntBits(this.x) >>> 16);
|
||||
hash = 79 * hash + (Float.floatToIntBits(this.y) ^ Float.floatToIntBits(this.y) >>> 16);
|
||||
hash = 79 * hash + (Float.floatToIntBits(this.z) ^ Float.floatToIntBits(this.z) >>> 16);
|
||||
return hash;
|
||||
return Objects.hash(x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,13 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class IntVector {
|
||||
@Getter
|
||||
@Setter
|
||||
public class IntVector implements Cloneable {
|
||||
private int x, y, z;
|
||||
|
||||
public IntVector(Location location) {
|
||||
@@ -23,7 +25,15 @@ public class IntVector {
|
||||
}
|
||||
|
||||
public IntVector clone() {
|
||||
return new IntVector(x, y, z);
|
||||
final IntVector clone;
|
||||
|
||||
try {
|
||||
clone = (IntVector) super.clone();
|
||||
} catch (CloneNotSupportedException ex) {
|
||||
throw new RuntimeException("Failed to clone IntVector", ex);
|
||||
}
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
public Vector toBukkitVector() {
|
||||
@@ -42,10 +52,6 @@ public class IntVector {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer[] toIntArray() {
|
||||
return new Integer[] {x, y, z};
|
||||
}
|
||||
|
||||
public IntVector add(IntVector vec) {
|
||||
return add(vec.getX(), vec.getY(), vec.getZ());
|
||||
}
|
||||
@@ -56,18 +62,12 @@ public class IntVector {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(!(o instanceof IntVector)) return false;
|
||||
|
||||
IntVector intVector = (IntVector) o;
|
||||
if (!(o instanceof IntVector intVector)) return false;
|
||||
return x == intVector.x && y == intVector.y && z == intVector.z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 79 * hash + (int)(Double.doubleToLongBits(this.x) ^ Double.doubleToLongBits(this.x) >>> 32);
|
||||
hash = 79 * hash + (int)(Double.doubleToLongBits(this.y) ^ Double.doubleToLongBits(this.y) >>> 32);
|
||||
hash = 79 * hash + (int)(Double.doubleToLongBits(this.z) ^ Double.doubleToLongBits(this.z) >>> 32);
|
||||
return hash;
|
||||
return Objects.hash(x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,8 +99,7 @@ public class MenuListener implements Listener {
|
||||
|
||||
if (menu != null) {
|
||||
menu.handleClose((Player) event.getPlayer());
|
||||
if(menu instanceof ChestMenu) {
|
||||
ChestMenu cmenu = (ChestMenu) menu;
|
||||
if(menu instanceof ChestMenu cmenu) {
|
||||
|
||||
for (int i = 0; i < cmenu.contents.length; i++) {
|
||||
Button button = cmenu.contents[i];
|
||||
@@ -123,8 +122,7 @@ public class MenuListener implements Listener {
|
||||
}.runTaskTimer(Anticheat.INSTANCE, 2L, 0L));
|
||||
}
|
||||
}
|
||||
if(inventory instanceof AnvilInventory && anvils.containsKey(inventory)) {
|
||||
AnvilInventory anvil = (AnvilInventory) inventory;
|
||||
if(inventory instanceof AnvilInventory anvil && anvils.containsKey(inventory)) {
|
||||
|
||||
WrappedMethod method = new WrappedClass(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_11)
|
||||
? AnvilInventory.class : Inventory.class)
|
||||
|
||||
@@ -27,8 +27,8 @@ public class EntityData {
|
||||
|
||||
//We cast this as a float since the fields are floats.
|
||||
|
||||
return new SimpleCollisionBox(new Vector(), (float)fieldWidth.get(ventity),
|
||||
(float)fieldLength.get(ventity));
|
||||
return new SimpleCollisionBox(new Vector(), fieldWidth.get(ventity),
|
||||
fieldLength.get(ventity));
|
||||
}).copy();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.util.List;
|
||||
public class DynamicCollisionBox implements CollisionBox {
|
||||
|
||||
private final CollisionFactory box;
|
||||
private APlayer player;
|
||||
private final APlayer player;
|
||||
@Setter
|
||||
private WrappedBlock block;
|
||||
@Setter
|
||||
|
||||
@@ -100,8 +100,7 @@ public class RayCollision implements CollisionBox {
|
||||
public boolean isIntersected(CollisionBox other) {
|
||||
if(other instanceof RayCollision) {
|
||||
return false; //not supported yet
|
||||
} else if(other instanceof SimpleCollisionBox) {
|
||||
SimpleCollisionBox box = (SimpleCollisionBox) other;
|
||||
} else if(other instanceof SimpleCollisionBox box) {
|
||||
|
||||
return intersect(this, box);
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package dev.brighten.ac.utils.world.types;
|
||||
|
||||
import dev.brighten.ac.packet.wrapper.objects.EnumParticle;
|
||||
import dev.brighten.ac.utils.BoundingBox;
|
||||
import dev.brighten.ac.utils.Helper;
|
||||
import dev.brighten.ac.utils.KLocation;
|
||||
import dev.brighten.ac.utils.reflections.impl.MinecraftReflection;
|
||||
@@ -78,10 +77,6 @@ public class SimpleCollisionBox implements CollisionBox {
|
||||
maxY += height;
|
||||
}
|
||||
|
||||
public SimpleCollisionBox(BoundingBox box) {
|
||||
this(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ);
|
||||
}
|
||||
|
||||
public SimpleCollisionBox(Object aabb) {
|
||||
double[] box = MinecraftReflection.fromAABB(aabb);
|
||||
|
||||
@@ -237,8 +232,7 @@ public class SimpleCollisionBox implements CollisionBox {
|
||||
|
||||
@Override
|
||||
public boolean isCollided(CollisionBox other) {
|
||||
if (other instanceof SimpleCollisionBox) {
|
||||
SimpleCollisionBox box = ((SimpleCollisionBox) other);
|
||||
if (other instanceof SimpleCollisionBox box) {
|
||||
box.sort();
|
||||
sort();
|
||||
return box.maxX >= this.minX && box.minX <= this.maxX
|
||||
@@ -252,8 +246,7 @@ public class SimpleCollisionBox implements CollisionBox {
|
||||
|
||||
@Override
|
||||
public boolean isIntersected(CollisionBox other) {
|
||||
if(other instanceof SimpleCollisionBox) {
|
||||
SimpleCollisionBox box = (SimpleCollisionBox) other;
|
||||
if(other instanceof SimpleCollisionBox box) {
|
||||
box.sort();
|
||||
sort();
|
||||
return box.maxX > this.minX && box.minX < this.maxX
|
||||
@@ -345,10 +338,6 @@ public class SimpleCollisionBox implements CollisionBox {
|
||||
}
|
||||
}
|
||||
|
||||
public BoundingBox toBoundingBox() {
|
||||
return new BoundingBox(new Vector(minX, minY, minZ), new Vector(maxX, maxY, maxZ));
|
||||
}
|
||||
|
||||
public <T> T toAxisAlignedBB() {
|
||||
return MinecraftReflection.toAABB(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ import org.bukkit.block.Block;
|
||||
|
||||
public class Wrapper_Reflection extends Wrapper {
|
||||
|
||||
private static WrappedClass blockClass = Reflections.getNMSClass("Block");
|
||||
private static WrappedMethod getById = blockClass.getMethodByType(blockClass.getParent(), 0);
|
||||
private static WrappedField fieldFriction = blockClass.getFieldByType(float.class, 3);
|
||||
private static final WrappedClass blockClass = Reflections.getNMSClass("Block");
|
||||
private static final WrappedMethod getById = blockClass.getMethodByType(blockClass.getParent(), 0);
|
||||
private static final WrappedField fieldFriction = blockClass.getFieldByType(float.class, 3);
|
||||
|
||||
@Override
|
||||
public float getFriction(Material material) {
|
||||
|
||||
Reference in New Issue
Block a user