diff --git a/src/main/java/com/vagdedes/spartan/Register.java b/src/main/java/com/vagdedes/spartan/Register.java index 69af702..7ca2972 100644 --- a/src/main/java/com/vagdedes/spartan/Register.java +++ b/src/main/java/com/vagdedes/spartan/Register.java @@ -1,18 +1,17 @@ package com.vagdedes.spartan; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; +import com.vagdedes.spartan.functionality.command.CommandExecution; +import com.vagdedes.spartan.functionality.command.CommandTab; +import com.vagdedes.spartan.functionality.connection.DiscordMemberCount; +import com.vagdedes.spartan.functionality.connection.Piracy; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.identifiers.simple.VehicleAccess; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; import com.vagdedes.spartan.functionality.notifications.SuspicionNotifications; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.protections.ReconnectCooldown; -import com.vagdedes.spartan.handlers.connection.DiscordMemberCount; -import com.vagdedes.spartan.handlers.connection.Piracy; -import com.vagdedes.spartan.handlers.identifiers.simple.VehicleAccess; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.interfaces.commands.CommandExecution; -import com.vagdedes.spartan.interfaces.commands.CommandTab; -import com.vagdedes.spartan.interfaces.listeners.*; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.listeners.*; import com.vagdedes.spartan.utils.server.NetworkUtils; import org.bukkit.Bukkit; import org.bukkit.event.Listener; @@ -64,7 +63,6 @@ public void onEnable() { // Base Config.settings.runOnLogin(); PlayerLimitPerIP.cache(); - ReconnectCooldown.loadCooldowns(); VehicleAccess.run(); SuspicionNotifications.run(); diff --git a/src/main/java/com/vagdedes/spartan/abstraction/DetectionExecutor.java b/src/main/java/com/vagdedes/spartan/abstraction/DetectionExecutor.java deleted file mode 100644 index d45b1ad..0000000 --- a/src/main/java/com/vagdedes/spartan/abstraction/DetectionExecutor.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.vagdedes.spartan.abstraction; - -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.HackPrevention; -import com.vagdedes.spartan.system.SpartanBukkit; -import me.vagdedes.spartan.system.Enums; - -public abstract class DetectionExecutor { - - public final CheckExecutor executor; - public final Enums.HackType hackType; - public final SpartanPlayer player; - - public DetectionExecutor(CheckExecutor executor, Enums.HackType hackType, SpartanPlayer player) { - this.executor = executor; - this.hackType = hackType; - this.player = player; - } - - protected final void runAsync(Runnable runnable) { - if (!MultiVersion.folia - && (hackType.getCheck().isSilent(player.getWorld().getName()) - || TPS.getMillisecondsPassed(player) <= 40L)) { - SpartanBukkit.detectionThread.executeIfFreeElseHere(runnable); - } else { - // If there are less than 10 milliseconds available and the check is not silent, - // we definitely run the detection on the main thread because we run into the - // danger of moving the possible prevention in the next tick - runnable.run(); - } - } - - protected final void forceAsync(Runnable runnable) { - SpartanBukkit.detectionThread.execute(runnable); - } - - protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, - boolean groundTeleport, double damage, int violation) { - new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, damage, violation); - } - - protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, - boolean groundTeleport, double damage) { - new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, damage, 1); - } - - protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, - boolean groundTeleport) { - new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, 0.0, 1); - } - - protected final void cancel(String verbose, SpartanLocation location, int teleportCooldown) { - new HackPrevention(player, hackType, verbose, location, teleportCooldown, false, 0.0, 1); - } - - protected final void cancel(String verbose, SpartanLocation location) { - new HackPrevention(player, hackType, verbose, location, 0, false, 0.0, 1); - } - - protected final void cancel(String verbose) { - new HackPrevention(player, hackType, verbose, null, 0, false, 0.0, 1); - } -} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/PatternFamily.java b/src/main/java/com/vagdedes/spartan/abstraction/PatternFamily.java deleted file mode 100644 index badbc71..0000000 --- a/src/main/java/com/vagdedes/spartan/abstraction/PatternFamily.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.vagdedes.spartan.abstraction; - -import com.vagdedes.spartan.objects.statistics.PatternStorage; - -public abstract class PatternFamily { - - protected final long storeFrequency; - protected long lastStored; - protected final PatternStorage[] patternValues; - - public PatternFamily(long storeFrequency, PatternStorage[] patternValues) { - this.storeFrequency = storeFrequency; - this.lastStored = 0L; - this.patternValues = patternValues; - } - - public void store() { - if (System.currentTimeMillis() - this.lastStored >= this.storeFrequency) { - this.lastStored = System.currentTimeMillis(); - - for (PatternStorage patternValue : this.patternValues) { - patternValue.store(); - } - } - } -} diff --git a/src/main/java/com/vagdedes/spartan/objects/system/CancelCause.java b/src/main/java/com/vagdedes/spartan/abstraction/check/CancelCause.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/objects/system/CancelCause.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/CancelCause.java index 5370bad..e8357a4 100644 --- a/src/main/java/com/vagdedes/spartan/objects/system/CancelCause.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/CancelCause.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.system; +package com.vagdedes.spartan.abstraction.check; -import com.vagdedes.spartan.handlers.stability.TPS; +import com.vagdedes.spartan.functionality.server.TPS; public class CancelCause { diff --git a/src/main/java/com/vagdedes/spartan/objects/system/Check.java b/src/main/java/com/vagdedes/spartan/abstraction/check/Check.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/objects/system/Check.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/Check.java index 1426685..6689e6e 100644 --- a/src/main/java/com/vagdedes/spartan/objects/system/Check.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/Check.java @@ -1,15 +1,15 @@ -package com.vagdedes.spartan.objects.system; +package com.vagdedes.spartan.abstraction.check; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.abstraction.profiling.PlayerEvidence; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.profiling.PlayerEvidence; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; import me.vagdedes.spartan.api.CheckSilentToggleEvent; @@ -306,7 +306,7 @@ public Check(Enums.HackType hackType, Map maxCancelledViolatio silents_config = getOption("silent_worlds", "exampleSilentWorld1, exampleSilentWorld2", false).toString(); // Separator - ResearchEngine.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); + Enums.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); this.enabled = new boolean[ResearchEngine.usableDataTypes.length]; if (legacy) { @@ -316,7 +316,7 @@ public Check(Enums.HackType hackType, Map maxCancelledViolatio optionValue instanceof Double || optionValue instanceof Float ? ((double) optionValue) > 0.0 : Boolean.parseBoolean(optionValue.toString().toLowerCase()); - for (ResearchEngine.DataType dataType : dataTypes) { + for (Enums.DataType dataType : dataTypes) { this.enabled[dataType.ordinal()] = boolValue; } } else { @@ -327,7 +327,7 @@ public Check(Enums.HackType hackType, Map maxCancelledViolatio setOption("enabled", null); } - for (ResearchEngine.DataType dataType : dataTypes) { + for (Enums.DataType dataType : dataTypes) { Object optionValue = getOption( "enabled." + dataType.lowerCase, hasOldOption ? oldOptionValue : true, @@ -490,11 +490,11 @@ public void clearConfigurationCache() { // Separator - public boolean isEnabled(ResearchEngine.DataType dataType, String world, SpartanPlayer player) { - ResearchEngine.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); + public boolean isEnabled(Enums.DataType dataType, String world, SpartanPlayer player) { + Enums.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); if (dataType == null) { - for (ResearchEngine.DataType type : dataTypes) { + for (Enums.DataType type : dataTypes) { if (this.enabled[type.ordinal()]) { return true; } @@ -507,17 +507,17 @@ public boolean isEnabled(ResearchEngine.DataType dataType, String world, Spartan && (player == null || player.getViolations(hackType).getDisableCause() == null); } - public void setEnabled(ResearchEngine.DataType dataType, boolean b) { - ResearchEngine.DataType[] dataTypes; + public void setEnabled(Enums.DataType dataType, boolean b) { + Enums.DataType[] dataTypes; if (dataType == null) { dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); } else { dataTypes = null; - for (ResearchEngine.DataType type : ResearchEngine.getDynamicUsableDataTypes(false)) { + for (Enums.DataType type : ResearchEngine.getDynamicUsableDataTypes(false)) { if (type == dataType) { - dataTypes = new ResearchEngine.DataType[]{dataType}; + dataTypes = new Enums.DataType[]{dataType}; break; } } @@ -526,7 +526,7 @@ public void setEnabled(ResearchEngine.DataType dataType, boolean b) { return; } } - for (ResearchEngine.DataType type : dataTypes) { + for (Enums.DataType type : dataTypes) { int ordinal = type.ordinal(); if (enabled[ordinal] != b) { @@ -543,7 +543,7 @@ public void setEnabled(ResearchEngine.DataType dataType, boolean b) { this.enabled[ordinal] = b; if (b) { - CloudFeature.refresh(true); + CloudBase.refresh(true); } else { clearConfigurationCache(); @@ -880,7 +880,7 @@ public int getProblematicDetections() { } } - public void setMaxCancelledViolations(ResearchEngine.DataType dataType, Map map) { + public void setMaxCancelledViolations(Enums.DataType dataType, Map map) { synchronized (maxCancelledViolations) { if (!map.isEmpty()) { for (Map.Entry entry : map.entrySet()) { @@ -903,7 +903,7 @@ public Map copyMaxCancelledViolations() { return maxCancelledViolations; } - public int getMaxCancelledViolations(ResearchEngine.DataType dataType, int hash) { + public int getMaxCancelledViolations(Enums.DataType dataType, int hash) { synchronized (maxCancelledViolations) { return maxCancelledViolations.getOrDefault( (dataType.hashCode() * SpartanBukkit.hashCodeMultiplier) + hash, diff --git a/src/main/java/com/vagdedes/spartan/abstraction/CheckExecutor.java b/src/main/java/com/vagdedes/spartan/abstraction/check/CheckExecutor.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/abstraction/CheckExecutor.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/CheckExecutor.java index 999836b..0dd6df8 100644 --- a/src/main/java/com/vagdedes/spartan/abstraction/CheckExecutor.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/CheckExecutor.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.abstraction; +package com.vagdedes.spartan.abstraction.check; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import me.vagdedes.spartan.system.Enums; public abstract class CheckExecutor extends DetectionExecutor { diff --git a/src/main/java/com/vagdedes/spartan/abstraction/check/DetectionExecutor.java b/src/main/java/com/vagdedes/spartan/abstraction/check/DetectionExecutor.java new file mode 100644 index 0000000..d673450 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/DetectionExecutor.java @@ -0,0 +1,182 @@ +package com.vagdedes.spartan.abstraction.check; + +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternStorage; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.utils.math.AlgebraUtils; +import com.vagdedes.spartan.utils.math.probability.ProbabilityPredictor; +import com.vagdedes.spartan.utils.math.probability.ProbabilityRank; +import me.vagdedes.spartan.system.Enums; + +import java.util.Iterator; +import java.util.Map; + +public abstract class DetectionExecutor { + + public final CheckExecutor executor; + public final Enums.HackType hackType; + public final SpartanPlayer player; + + public DetectionExecutor(CheckExecutor executor, Enums.HackType hackType, SpartanPlayer player) { + this.executor = executor; + this.hackType = hackType; + this.player = player; + } + + protected final void runAsync(Runnable runnable) { + if (!MultiVersion.folia + && (hackType.getCheck().isSilent(player.getWorld().getName()) + || TPS.getMillisecondsPassed(player) <= 40L)) { + SpartanBukkit.detectionThread.executeIfFreeElseHere(runnable); + } else { + // If there are less than 10 milliseconds available and the check is not silent, + // we definitely run the detection on the main thread because we run into the + // danger of moving the possible prevention in the next tick + runnable.run(); + } + } + + protected final void forceAsync(Runnable runnable) { + SpartanBukkit.detectionThread.execute(runnable); + } + + // Spearator + + protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, + boolean groundTeleport, double damage, int violation) { + new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, damage, violation); + } + + protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, + boolean groundTeleport, double damage) { + new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, damage, 1); + } + + protected final void cancel(String verbose, SpartanLocation location, int cancelTicks, + boolean groundTeleport) { + new HackPrevention(player, hackType, verbose, location, cancelTicks, groundTeleport, 0.0, 1); + } + + protected final void cancel(String verbose, SpartanLocation location, int teleportCooldown) { + new HackPrevention(player, hackType, verbose, location, teleportCooldown, false, 0.0, 1); + } + + protected final void cancel(String verbose, SpartanLocation location) { + new HackPrevention(player, hackType, verbose, location, 0, false, 0.0, 1); + } + + protected final void cancel(String verbose) { + new HackPrevention(player, hackType, verbose, null, 0, false, 0.0, 1); + } + + // Separator + + protected final String linearPredictionToDetection(PatternStorage patternStorage, + int generalization, + Number client, + ProbabilityPredictor probabilityPredictor, + double minProbability, + double maxDeviation, + double minSignificance) { + if (probabilityPredictor.pie.hasData()) { + int count = 0; + StringBuilder sb = new StringBuilder() + .append("data: ") + .append(patternStorage.key) + .append(", generalization: ") + .append(generalization) + .append(", client: ") + .append(client) + .append(", pie-slices: ") + .append(probabilityPredictor.pie.getSlices()) + .append(", pie-total: ") + .append(probabilityPredictor.pie.getTotal()) + .append(", significance: ") + .append(AlgebraUtils.cut(probabilityPredictor.patternSignificance * 100.0, 2)) + .append(", min-significance: ") + .append(minSignificance) + .append(", min-probability: ") + .append(minProbability) + .append(", max-deviation: ") + .append(maxDeviation); + boolean significantPattern = probabilityPredictor.patternSignificance >= minSignificance, + highChanceFound = false, + validComparisonMade = false; + Iterator> entries = probabilityPredictor.pie.getChancesRanked().iterator(); + + while (entries.hasNext()) { + Map.Entry entry = entries.next(); + double probability = probabilityPredictor.pie.getProbabilityWithCount(entry.getValue()); + + if (probability >= minProbability) { + highChanceFound = true; + + if (Math.abs(entry.getKey().doubleValue() - client.doubleValue()) <= maxDeviation) { + validComparisonMade = true; + } + } + count++; + + if (count <= 10) { + sb.append(entry.getKey()) + .append(": ") + .append(AlgebraUtils.cut(probability * 100.0, 2)) + .append(", "); + } + } + + if (!significantPattern + || !highChanceFound + || !validComparisonMade) { + sb.append("scenario: ") + .append(significantPattern ? 1 : 0) + .append(highChanceFound ? 1 : 0) + .append(validComparisonMade ? 1 : 0); + return sb.toString(); + } else { + return null; + } + } else { + return null; + } + } + + protected final String rankedPredictionToDetection(PatternStorage patternStorage, + int generalization, + Number client, + ProbabilityRank probabilityRank, + double minProbability) { + if (probabilityRank.hasData()) { + double probability = probabilityRank.getChance(client); + + if (probability < minProbability) { + return "data: " + patternStorage.key + + ", generalization: " + generalization + + ", client: " + client + + ", total: " + probabilityRank.getTotal() + + ", probability: " + probability + + ", min-probability: " + minProbability; + } else { + return null; + } + } else { + return null; + } + } + + // Separator + + protected final ProbabilityPredictor buildPredictor(SpartanPlayer player, + PatternStorage storage, + long situation, + int generalization, + int count) { + return new ProbabilityPredictor( + storage.getAll(player, situation, generalization), + storage.getSpecific(player.getProfile(), situation, generalization, count) + ); + } +} diff --git a/src/main/java/com/vagdedes/spartan/objects/system/HackPrevention.java b/src/main/java/com/vagdedes/spartan/abstraction/check/HackPrevention.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/objects/system/HackPrevention.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/HackPrevention.java index dafc612..6136733 100644 --- a/src/main/java/com/vagdedes/spartan/objects/system/HackPrevention.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/HackPrevention.java @@ -1,12 +1,12 @@ -package com.vagdedes.spartan.objects.system; +package com.vagdedes.spartan.abstraction.check; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.movement.speed.Speed; -import com.vagdedes.spartan.handlers.identifiers.simple.VehicleAccess; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.simple.VehicleAccess; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/objects/system/LiveViolation.java b/src/main/java/com/vagdedes/spartan/abstraction/check/LiveViolation.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/objects/system/LiveViolation.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/LiveViolation.java index 5c6ff5a..e7b4396 100644 --- a/src/main/java/com/vagdedes/spartan/objects/system/LiveViolation.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/LiveViolation.java @@ -1,25 +1,25 @@ -package com.vagdedes.spartan.objects.system; +package com.vagdedes.spartan.abstraction.check; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.abstraction.profiling.PlayerViolation; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.configuration.AntiCheatLogs; -import com.vagdedes.spartan.functionality.important.MultiVersion; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.notifications.clickablemessage.ClickableMessage; -import com.vagdedes.spartan.functionality.performance.FalsePositiveDetection; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.CancelViolation; -import com.vagdedes.spartan.handlers.stability.NotifyViolation; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.profiling.PlayerViolation; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.notifications.clickable.ClickableMessage; +import com.vagdedes.spartan.functionality.performance.CancelViolation; +import com.vagdedes.spartan.functionality.performance.NotifyViolation; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; @@ -116,8 +116,8 @@ public boolean process() { } if (hp != null - && !CheckProtection.hasCooldown(player) - && !CloudFeature.isPublicInformationCancelled(hackType, hp.information) + && !CheckDelay.hasCooldown(player) + && !CloudBase.isPublicInformationCancelled(hackType, hp.information) && (disableCause == null || !disableCause.pointerMatches(hp.information))) { Check check = hackType.getCheck(); @@ -132,7 +132,9 @@ public boolean process() { ); if (!player.getProfile().isHacker() - && FalsePositiveDetection.canCorrect(playerViolation, this)) { + && !TestServer.isIdentified() + && Config.settings.getBoolean("Performance.enable_false_positive_detection") + && !this.hasMaxCancelledLevel(playerViolation.similarityIdentity)) { canPrevent = false; falsePositive = true; } else { @@ -231,7 +233,7 @@ public boolean hasLevel() { return getLevel() > 0; } - public boolean hasMaxCancelledLevel(int hash) { + private boolean hasMaxCancelledLevel(int hash) { Long time; synchronized (cancelledLevel) { @@ -259,7 +261,7 @@ private void setLevel(int hash, int amount) { // Always last if (previousLevel != level) { - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } } @@ -328,7 +330,7 @@ private void reset(boolean local) { player.getProfile().evidence.remove(hackType, true, false, true); if (local) { - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } } @@ -372,7 +374,7 @@ public void addDisableCause(String reason, String pointer, int ticks) { } else { disableCause = new CancelCause(reason, pointer, ticks); } - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } public void addSilentCause(String reason, String pointer, int ticks) { @@ -381,17 +383,17 @@ public void addSilentCause(String reason, String pointer, int ticks) { } else { silentCause = new CancelCause(reason, pointer, ticks); } - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } public void removeDisableCause() { this.disableCause = null; - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } public void removeSilentCause() { this.silentCause = null; - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); } // Separator @@ -483,7 +485,7 @@ private void performPunishments(int violation) { if (!commandsString.isEmpty()) { player.getProfile().punishmentHistory.increasePunishments(player, commandsString); } - } else if (found && AwarenessNotifications.canSend(SpartanBukkit.uuid, hackType + "-cancelled-punishment-event")) { + } else if (found && AwarenessNotifications.canSend(AwarenessNotifications.uuid, hackType + "-cancelled-punishment-event")) { String notification = "Just a reminder that the punishments of the '" + hackType + "' check were just cancelled via code by a third-party plugin." + " Please do not reach support for this as it relates only to your server."; List dependentPlugins = PluginUtils.getDependentPlugins(Register.plugin.getName()); @@ -499,11 +501,9 @@ private void performPunishments(int violation) { AwarenessNotifications.forcefullySend(notification); } } - } else if (AwarenessNotifications.canSend(SpartanBukkit.uuid, hackType + "-no-punishment-commands")) { + } else if (AwarenessNotifications.canSend(AwarenessNotifications.uuid, hackType + "-no-punishment-commands")) { AwarenessNotifications.forcefullySend("Just a reminder that you have set no punishment commands for the '" + hackType + "' check."); } - } else if (check.canPunish && AwarenessNotifications.canSend(SpartanBukkit.uuid, hackType + "-disabled-punishments")) { - AwarenessNotifications.forcefullySend("Just a reminder that punishments have been disabled for the '" + hackType + "' check."); } } diff --git a/src/main/java/com/vagdedes/spartan/objects/system/Threads.java b/src/main/java/com/vagdedes/spartan/abstraction/check/Threads.java similarity index 98% rename from src/main/java/com/vagdedes/spartan/objects/system/Threads.java rename to src/main/java/com/vagdedes/spartan/abstraction/check/Threads.java index 05cb43e..4e3a00f 100644 --- a/src/main/java/com/vagdedes/spartan/objects/system/Threads.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/check/Threads.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.system; +package com.vagdedes.spartan.abstraction.check; import java.util.Collections; import java.util.LinkedList; diff --git a/src/main/java/com/vagdedes/spartan/abstraction/ConfigurationBuilder.java b/src/main/java/com/vagdedes/spartan/abstraction/configuration/ConfigurationBuilder.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/abstraction/ConfigurationBuilder.java rename to src/main/java/com/vagdedes/spartan/abstraction/configuration/ConfigurationBuilder.java index 0bbcaf7..b9f899b 100644 --- a/src/main/java/com/vagdedes/spartan/abstraction/ConfigurationBuilder.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/configuration/ConfigurationBuilder.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.abstraction; +package com.vagdedes.spartan.abstraction.configuration; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; import com.vagdedes.spartan.utils.server.ConfigUtils; import org.bukkit.ChatColor; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/com/vagdedes/spartan/configuration/Compatibility.java b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Compatibility.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/configuration/Compatibility.java rename to src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Compatibility.java index 3ef2516..88cc3e2 100644 --- a/src/main/java/com/vagdedes/spartan/configuration/Compatibility.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Compatibility.java @@ -1,7 +1,8 @@ -package com.vagdedes.spartan.configuration; +package com.vagdedes.spartan.abstraction.configuration.implementation; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.abstraction.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.configuration.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.inventory.implementation.MainMenu; import com.vagdedes.spartan.checks.movement.speed.Speed; import com.vagdedes.spartan.compatibility.manual.abilities.*; import com.vagdedes.spartan.compatibility.manual.abilities.crackshot.CrackShot; @@ -17,10 +18,9 @@ import com.vagdedes.spartan.compatibility.manual.vanilla.DragonPhases; import com.vagdedes.spartan.compatibility.manual.world.AcidRain; import com.vagdedes.spartan.compatibility.necessary.bedrock.plugins.Floodgate; -import com.vagdedes.spartan.functionality.important.MultiVersion; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.gui.spartan.MainMenu; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.server.ConfigUtils; import com.vagdedes.spartan.utils.server.PluginUtils; import com.vagdedes.spartan.utils.server.ReflectionUtils; @@ -395,7 +395,7 @@ public void fastClear() { refresh(false); } - static void create(boolean local) { + public static void create(boolean local) { file = new File(staticDirectory); boolean exists = file.exists(); bool.clear(); diff --git a/src/main/java/com/vagdedes/spartan/configuration/Messages.java b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Messages.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/configuration/Messages.java rename to src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Messages.java index 0dd2a9e..6638ef4 100644 --- a/src/main/java/com/vagdedes/spartan/configuration/Messages.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Messages.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.configuration; +package com.vagdedes.spartan.abstraction.configuration.implementation; -import com.vagdedes.spartan.abstraction.ConfigurationBuilder; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; +import com.vagdedes.spartan.abstraction.configuration.ConfigurationBuilder; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; import java.io.File; @@ -38,7 +38,6 @@ public void create(boolean local) { addOption("player_ip_limit_kick_message", "&8[&2" + prefix + "&8]&c The player limit of your IP has been reached."); // Violations - addOption("check_stored_data_delete_message", "&8[&2" + prefix + "&8]&a Stored data successfully deleted for check&8: &2{check}"); addOption("player_violation_reset_message", "&8[&2" + prefix + "&8]&a Violations successfully reset for player&8: &2{player}"); addOption("player_stored_data_delete_message", "&8[&2" + prefix + "&8]&a Stored data successfully deleted for player&8: &2{player}"); addOption("detection_notification", "&8[&2" + prefix + "&8] " @@ -53,6 +52,7 @@ public void create(boolean local) { addOption("same_message_warning", "&8[&2" + prefix + "&8]&c Please avoid sending the same message again."); // Checks + addOption("check_stored_data_delete_message", "&8[&2" + prefix + "&8]&a Stored data successfully deleted for check&8: &2{check}"); addOption("check_enable_message", "&8[&2" + prefix + "&8] &aYou enabled the check&8:&7 {detection}"); addOption("check_disable_message", "&8[&2" + prefix + "&8] &cYou disabled the check&8:&7 {detection}"); addOption("non_existing_check", "&8[&2" + prefix + "&8] &cThis check doesn't exist."); diff --git a/src/main/java/com/vagdedes/spartan/configuration/SQLFeature.java b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/SQLFeature.java similarity index 94% rename from src/main/java/com/vagdedes/spartan/configuration/SQLFeature.java rename to src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/SQLFeature.java index a18cde7..51933a4 100644 --- a/src/main/java/com/vagdedes/spartan/configuration/SQLFeature.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/SQLFeature.java @@ -1,14 +1,15 @@ -package com.vagdedes.spartan.configuration; +package com.vagdedes.spartan.abstraction.configuration.implementation; -import com.vagdedes.spartan.abstraction.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.configuration.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.configuration.AntiCheatLogs; -import com.vagdedes.spartan.functionality.important.MultiVersion; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.api.API; @@ -180,7 +181,7 @@ public void create(boolean local) { addOption("escape_special_characters", false); refreshConfiguration(); - SpartanBukkit.storageThread.execute(this::connect); + SpartanBukkit.dataThread.execute(this::connect); if (!local && exists) { CrossServerInformation.sendConfiguration(file); @@ -378,7 +379,7 @@ public void logInfo(SpartanPlayer p, }; if (SpartanBukkit.isSynchronised()) { - SpartanBukkit.storageThread.execute(runnable); + SpartanBukkit.dataThread.execute(runnable); } else { runnable.run(); } diff --git a/src/main/java/com/vagdedes/spartan/configuration/Settings.java b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Settings.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/configuration/Settings.java rename to src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Settings.java index 94ac0ef..45eea6a 100644 --- a/src/main/java/com/vagdedes/spartan/configuration/Settings.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/configuration/implementation/Settings.java @@ -1,16 +1,16 @@ -package com.vagdedes.spartan.configuration; +package com.vagdedes.spartan.abstraction.configuration.implementation; -import com.vagdedes.spartan.abstraction.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.configuration.ConfigurationBuilder; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.chat.ChatProtection; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.connection.cloud.DiscordWebhooks; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; import com.vagdedes.spartan.functionality.performance.MaximumCheckedPlayers; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.DiscordWebhooks; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; import org.bukkit.configuration.ConfigurationSection; @@ -28,12 +28,12 @@ public Settings() { } public static final String explosionOption = "Protections.explosion_detection_cooldown", - permissionOption = "Important.use_permission_cache", // test server showEcosystemOption = "Important.show_ecosystem", tpsProtectionOption = "Protections.use_tps_protection", maxSupportedLatencyOption = "Protections.max_supported_player_latency", cloudServerNameOption = "Cloud.server_name", - cloudSynchroniseFilesOption = "Cloud.synchronise_files"; + cloudSynchroniseFilesOption = "Cloud.synchronise_files", + falsePositiveDetection = "Performance.enable_false_positive_detection"; private static final List defaultPunishments = new ArrayList<>(Check.maxCommands); private Collection punishments = null; @@ -79,7 +79,6 @@ public void create(boolean local) { addOption("Chat.blocked_commands", "blockedCommand1, blockedCommand2"); addOption("Chat.staff_chat_character", "@"); - addOption("Protections.reconnect_cooldown", 1); addOption(tpsProtectionOption, true); // test server addOption(maxSupportedLatencyOption, 500); // test server addOption("Protections.avoid_self_bow_damage", true); @@ -87,7 +86,6 @@ public void create(boolean local) { addOption("Protections.disallowed_building", true); // test server addOption("Important.op_bypass", false); - addOption("Important.enable_permissions", true); addOption("Important.violations_reset_on_kick", false); // test server addOption("Important.modify_server_configuration", false); addOption("Important.refresh_inventory_menu", true); @@ -103,8 +101,7 @@ public void create(boolean local) { addOption("Detections.fall_damage_on_teleport", false); // test server addOption("Detections.update_blocks_upon_violation", false); - addOption("Performance.enable_false_positive_detection", true); // test server - addOption("Performance.use_vanilla_ground_method", false); // test server + addOption(falsePositiveDetection, true); // test server addOption(MaximumCheckedPlayers.option, 100); // test server alternative addOption(DiscordWebhooks.configurationSection + ".webhook_hex_color", "4caf50"); diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Buffer.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Buffer.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/objects/data/Buffer.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Buffer.java index 06c6d0b..ccc3353 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Buffer.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Buffer.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Clicks.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Clicks.java similarity index 98% rename from src/main/java/com/vagdedes/spartan/objects/data/Clicks.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Clicks.java index 132b6db..f3ee0cc 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Clicks.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Clicks.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; -import com.vagdedes.spartan.handlers.stability.TPS; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.math.AlgebraUtils; import java.util.Iterator; diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Cooldowns.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Cooldowns.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/objects/data/Cooldowns.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Cooldowns.java index 53e3ad6..fe79856 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Cooldowns.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Cooldowns.java @@ -1,7 +1,8 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.server.TPS; import java.util.Collections; import java.util.LinkedHashMap; @@ -15,6 +16,10 @@ public class Cooldowns { public Cooldowns(SpartanPlayer player) { this.storage = Collections.synchronizedMap(new LinkedHashMap<>()); this.player = player; + + if (player == null) { + Cache.store(this.storage); + } } public void clear() { diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Decimals.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Decimals.java similarity index 99% rename from src/main/java/com/vagdedes/spartan/objects/data/Decimals.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Decimals.java index f46acd0..a97b41a 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Decimals.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Decimals.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; import com.vagdedes.spartan.utils.java.MemoryUtils; diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Handlers.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Handlers.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/objects/data/Handlers.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Handlers.java index 6e725c0..49e5aa0 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Handlers.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Handlers.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.TPS; import java.util.Collections; import java.util.LinkedHashMap; diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Timer.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Timer.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/objects/data/Timer.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Timer.java index 31f644f..3ed128f 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Timer.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Timer.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; import java.util.Collections; import java.util.LinkedHashMap; diff --git a/src/main/java/com/vagdedes/spartan/objects/data/Tracker.java b/src/main/java/com/vagdedes/spartan/abstraction/data/Tracker.java similarity index 98% rename from src/main/java/com/vagdedes/spartan/objects/data/Tracker.java rename to src/main/java/com/vagdedes/spartan/abstraction/data/Tracker.java index 0dd8674..7af88f9 100644 --- a/src/main/java/com/vagdedes/spartan/objects/data/Tracker.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/data/Tracker.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.data; +package com.vagdedes.spartan.abstraction.data; import java.util.*; diff --git a/src/main/java/com/vagdedes/spartan/objects/features/IncompatibleItem.java b/src/main/java/com/vagdedes/spartan/abstraction/functionality/IncompatibleItem.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/objects/features/IncompatibleItem.java rename to src/main/java/com/vagdedes/spartan/abstraction/functionality/IncompatibleItem.java index 5616f69..afb0198 100644 --- a/src/main/java/com/vagdedes/spartan/objects/features/IncompatibleItem.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/functionality/IncompatibleItem.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.features; +package com.vagdedes.spartan.abstraction.functionality; import io.signality.utils.system.Events; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/objects/features/StatisticalProgress.java b/src/main/java/com/vagdedes/spartan/abstraction/functionality/StatisticalProgress.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/objects/features/StatisticalProgress.java rename to src/main/java/com/vagdedes/spartan/abstraction/functionality/StatisticalProgress.java index 2e9b176..36d6b21 100644 --- a/src/main/java/com/vagdedes/spartan/objects/features/StatisticalProgress.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/functionality/StatisticalProgress.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.features; +package com.vagdedes.spartan.abstraction.functionality; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/vagdedes/spartan/abstraction/InventoryMenu.java b/src/main/java/com/vagdedes/spartan/abstraction/inventory/InventoryMenu.java similarity index 94% rename from src/main/java/com/vagdedes/spartan/abstraction/InventoryMenu.java rename to src/main/java/com/vagdedes/spartan/abstraction/inventory/InventoryMenu.java index 77f5fd3..6df91fc 100644 --- a/src/main/java/com/vagdedes/spartan/abstraction/InventoryMenu.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/inventory/InventoryMenu.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.abstraction; +package com.vagdedes.spartan.abstraction.inventory; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; import com.vagdedes.spartan.utils.server.InventoryUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.inventory.ClickType; diff --git a/src/main/java/com/vagdedes/spartan/gui/spartan/MainMenu.java b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/MainMenu.java similarity index 83% rename from src/main/java/com/vagdedes/spartan/gui/spartan/MainMenu.java rename to src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/MainMenu.java index 2b4129d..fb4a6c8 100644 --- a/src/main/java/com/vagdedes/spartan/gui/spartan/MainMenu.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/MainMenu.java @@ -1,26 +1,23 @@ -package com.vagdedes.spartan.gui.spartan; +package com.vagdedes.spartan.abstraction.inventory.implementation; import com.vagdedes.filegui.api.FileGUIAPI; -import com.vagdedes.spartan.abstraction.InventoryMenu; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.necessary.FileGUI; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.helpers.AntiCheatUpdates; -import com.vagdedes.spartan.gui.helpers.PlayerStateLists; -import com.vagdedes.spartan.handlers.connection.DiscordMemberCount; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.connection.DiscordMemberCount; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.inventory.PlayerStateLists; +import com.vagdedes.spartan.functionality.inventory.Summary; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.*; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.InventoryUtils; import com.vagdedes.spartan.utils.server.MaterialUtils; +import me.vagdedes.spartan.system.Enums; import me.vagdedes.spartan.system.Enums.Permission; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -55,7 +52,7 @@ public static void refresh() { if (title.startsWith(name)) { DiscordMemberCount.ignore(); - SpartanMenu.mainMenu.open(p); + InteractiveInventory.mainMenu.open(p); } } }); @@ -79,9 +76,7 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj setTitle(player, name + page); // AntiCheat Updates - add("§a" + AntiCheatUpdates.name, - AntiCheatUpdates.getInformation(true), - new ItemStack(Material.CHEST), 46); + add("§aSummary", Summary.get(), new ItemStack(Material.CHEST), 46); int random = AlgebraUtils.randomInteger(1, 64); boolean dividedBy2 = random % 2 == 0; @@ -103,7 +98,10 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj // Configuration InventoryUtils.prepareDescription(lore, "Plugin Management"); Runtime runtime = Runtime.getRuntime(); - lore.add("§7Server Type§8: §a" + (TestServer.isIdentified() ? "Testing (" + TestServer.getIdentification() + ")" : "Production")); + + if (TestServer.isIdentified()) { + lore.add("§7Test Server§8: §aType " + TestServer.getIdentification()); + } if (!MultiVersion.unknownFork || !MultiVersion.other) { lore.add("§7Server Information§8: §a" + (MultiVersion.unknownFork ? "Version" : MultiVersion.fork()) + (MultiVersion.other ? "" : " " + MultiVersion.versionString())); @@ -113,14 +111,11 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj + " - " + (tps >= TPS.excellent ? "Excellent" : tps >= TPS.good ? "Good" : tps >= TPS.minimum ? "Mediocre" : "Unstable")); long maxMemory = runtime.maxMemory(); lore.add("§7Server Memory Usage§8: §a" + AlgebraUtils.cut(((maxMemory - runtime.freeMemory()) / ((double) maxMemory)) * 100.0, 2) + "%"); - lore.add("§7Research Engine§8: §a" + ResearchEngine.getProgress().logs + " Logs" + (ResearchEngine.isFull() ? " §c(Maxed Out)" : "")); - - if (SpartanBukkit.canAdvertise) { - lore.add("§7Detections Available§8: " - + (SpartanEdition.hasDetectionsPurchased(ResearchEngine.DataType.Java) ? "§a" : "§c") + ResearchEngine.DataType.Java - + " §8/ " - + (SpartanEdition.hasDetectionsPurchased(ResearchEngine.DataType.Bedrock) ? "§a" : "§c") + ResearchEngine.DataType.Bedrock); - } + lore.add("§7Research Engine§8: §a" + ResearchEngine.getProgress().logs + " Logs"); + lore.add("§7Detections Available§8: " + + (SpartanEdition.hasDetectionsPurchased(Enums.DataType.Java) ? "§a" : "§c") + Enums.DataType.Java + + " §8/ " + + (SpartanEdition.hasDetectionsPurchased(Enums.DataType.Bedrock) ? "§a" : "§c") + Enums.DataType.Bedrock); lore.add(""); lore.add("§7Left click to §amanage checks§7."); lore.add("§7Right click to §creload the plugin's memory contents§7."); @@ -205,7 +200,7 @@ public boolean internalHandle(SpartanPlayer player) { player.sendInventoryCloseMessage(Config.messages.getColorfulString("no_permission")); } else { if (clickType == ClickType.LEFT) { - SpartanMenu.manageChecks.open(player); + InteractiveInventory.manageChecks.open(player); } else if (clickType == ClickType.RIGHT) { if (!Permissions.has(player, Permission.RELOAD)) { player.sendInventoryCloseMessage(Config.messages.getColorfulString("no_permission")); @@ -241,8 +236,8 @@ public boolean internalHandle(SpartanPlayer player) { } } } else if (!name.startsWith(PlayerStateLists.inactiveColour) - && !item.equals(AntiCheatUpdates.name)) { - SpartanMenu.playerInfo.open(player, false, item); + && !item.equals("Summary")) { + InteractiveInventory.playerInfo.open(player, false, item); } return true; } diff --git a/src/main/java/com/vagdedes/spartan/gui/configuration/ManageChecks.java b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/ManageChecks.java similarity index 85% rename from src/main/java/com/vagdedes/spartan/gui/configuration/ManageChecks.java rename to src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/ManageChecks.java index bbf55d7..5b055c3 100644 --- a/src/main/java/com/vagdedes/spartan/gui/configuration/ManageChecks.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/ManageChecks.java @@ -1,16 +1,15 @@ -package com.vagdedes.spartan.gui.configuration; - -import com.vagdedes.spartan.abstraction.InventoryMenu; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.helpers.AntiCheatUpdates; -import com.vagdedes.spartan.handlers.stability.CancelViolation; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; +package com.vagdedes.spartan.abstraction.inventory.implementation; + +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.CancelViolation; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; import com.vagdedes.spartan.utils.server.MaterialUtils; import me.vagdedes.spartan.system.Enums; import me.vagdedes.spartan.system.Enums.HackType; @@ -37,8 +36,7 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj add("§cDisable silent checking for all checks", null, new ItemStack(MaterialUtils.get("lead")), 46); add("§cDisable all checks", null, new ItemStack(MultiVersion.isOrGreater(MultiVersion.MCVersion.V1_13) ? Material.RED_TERRACOTTA : Material.getMaterial("STAINED_CLAY"), 1, (short) 14), 47); - add("§4Back", AntiCheatUpdates.getInformation(false), - new ItemStack(Material.ARROW), 49); + add("§4Back", null, new ItemStack(Material.ARROW), 49); add("§aEnable all checks", null, new ItemStack(MultiVersion.isOrGreater(MultiVersion.MCVersion.V1_13) ? Material.LIME_TERRACOTTA : Material.getMaterial("STAINED_CLAY"), 1, (short) 5), 51); add("§aEnable silent checking for all checks", null, new ItemStack(Material.FEATHER), 52); @@ -51,7 +49,7 @@ public boolean internalHandle(SpartanPlayer player) { item = item.startsWith("§") ? item.substring(2) : item; if (item.equals("Back")) { - SpartanMenu.mainMenu.open(player); + InteractiveInventory.mainMenu.open(player); } else if (item.equals("Disable all checks")) { Config.disableChecks(); open(player); @@ -86,8 +84,12 @@ public boolean internalHandle(SpartanPlayer player) { if (check != null) { ResearchEngine.resetData(check.hackType); + player.sendInventoryCloseMessage( + Config.messages.getColorfulString("check_stored_data_delete_message") + .replace("{check}", check.getName()) + ); + } - //todo message } } return true; @@ -98,7 +100,7 @@ private void addCheck(SpartanPlayer player, HackType hackType) { boolean enabled = check.isEnabled(null, null, null), silent = check.isSilent(null), bypassing = Permissions.isBypassing(player, hackType); - String[] disabledDetections = CloudFeature.getShownDisabledDetections(hackType); + String[] disabledDetections = CloudBase.getShownDisabledDetections(hackType); int problematicDetections = check.getProblematicDetections(); String enabledOption, silentOption, colour, secondColour; ItemStack item; @@ -150,7 +152,7 @@ private void addCheck(SpartanPlayer player, HackType hackType) { } lore.add(""); - for (ResearchEngine.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(false)) { + for (Enums.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(false)) { lore.add("§7§l" + dataType.toString() + " §r§7Cancel Violation§8:§c " + CancelViolation.get(hackType, dataType)); } if (problematicDetections > 0) { diff --git a/src/main/java/com/vagdedes/spartan/gui/info/PlayerInfo.java b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/PlayerInfo.java similarity index 86% rename from src/main/java/com/vagdedes/spartan/gui/info/PlayerInfo.java rename to src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/PlayerInfo.java index 4d920a3..588e1a0 100644 --- a/src/main/java/com/vagdedes/spartan/gui/info/PlayerInfo.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/PlayerInfo.java @@ -1,24 +1,24 @@ -package com.vagdedes.spartan.gui.info; - -import com.vagdedes.spartan.abstraction.InventoryMenu; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; +package com.vagdedes.spartan.abstraction.inventory.implementation; + +import com.vagdedes.spartan.abstraction.check.CancelCause; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.profiling.MiningHistory; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.profiling.PunishmentHistory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.Latency; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.inventory.PlayerStateLists; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.performance.MaximumCheckedPlayers; -import com.vagdedes.spartan.functionality.protections.Latency; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.helpers.AntiCheatUpdates; -import com.vagdedes.spartan.gui.helpers.PlayerStateLists; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.profiling.MiningHistory; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.profiling.PunishmentHistory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.CancelCause; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; @@ -32,12 +32,12 @@ import java.util.ArrayList; import java.util.List; -import java.util.UUID; public class PlayerInfo extends InventoryMenu { - public static final String menu = ("§0Player Info: ").substring(MultiVersion.isOrGreater(MultiVersion.MCVersion.V1_13) ? 2 : 0); + private static final String menu = ("§0Player Info: ").substring(MultiVersion.isOrGreater(MultiVersion.MCVersion.V1_13) ? 2 : 0); private static final String documentationURL = "https://docs.google.com/document/d/e/2PACX-1vRSwc6vazSE5uCv6pcYkaWsP_RaHTmkU70lBLB9f9tudlSbJZr2ZdRQg3ZGXFtz-QWjDzTQqkSzmMt2/pub"; + private static final Cooldowns cooldowns = new Cooldowns(null); public PlayerInfo() { super(menu, 36, new Permission[]{Permission.MANAGE, Permission.INFO}); @@ -122,8 +122,7 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj lore.add("§cClick to delete the player's stored data."); add("§4Reset", lore, new ItemStack(Material.REDSTONE), reset); } - add("§c" + (back ? "Back" : "Close"), AntiCheatUpdates.getInformation(false), - new ItemStack(Material.ARROW), 31); + add("§c" + (back ? "Back" : "Close"), null, new ItemStack(Material.ARROW), 31); return true; } } @@ -153,10 +152,10 @@ private void addChecks(int slot, boolean isOnline, // Separator double delayNumber = isOnline ? AlgebraUtils.roundToHalf(Latency.getDelay(player)) : 0.0; // Base - ResearchEngine.DataType dataType = isOnline ? player.dataType : playerProfile.getDataType(); + Enums.DataType dataType = isOnline ? player.dataType : playerProfile.getDataType(); boolean tpsDropping = isOnline && TPS.areLow(player), notChecked = isOnline && !MaximumCheckedPlayers.isChecked(player.uuid), - detectionsNotAvailable = SpartanBukkit.canAdvertise && !SpartanEdition.hasDetectionsPurchased(dataType), + detectionsNotAvailable = !SpartanEdition.hasDetectionsPurchased(dataType), listedChecks = false; String cancellableCompatibility = isOnline ? player.getCancellableCompatibility() : null; @@ -197,7 +196,7 @@ private void addCheck(HackType hackType, int slot, boolean isOnline, new ItemStack(Material.QUARTZ_BLOCK); boolean hasViolations = violations > 0, hasData = playerProfile.evidence.has(hackType); - ResearchEngine.DataType dataType = isOnline ? player.dataType : playerProfile.getDataType(); + Enums.DataType dataType = isOnline ? player.dataType : playerProfile.getDataType(); String state = getDetectionState(player, hackType, dataType, @@ -206,7 +205,7 @@ private void addCheck(HackType hackType, int slot, boolean isOnline, isOnline, isOnline && TPS.areLow(player), isOnline && !MaximumCheckedPlayers.isChecked(player.uuid), - SpartanBukkit.canAdvertise && !SpartanEdition.hasDetectionsPurchased(dataType), + !SpartanEdition.hasDetectionsPurchased(dataType), !SpartanEdition.supportsCheck(dataType, hackType), !hasViolations && !hasData); @@ -224,7 +223,7 @@ private void addCheck(HackType hackType, int slot, boolean isOnline, add("§2" + hackType.getCheck().getName() + " Check", lore, item, slot); } - private String getDetectionState(SpartanPlayer player, HackType hackType, ResearchEngine.DataType dataType, + private String getDetectionState(SpartanPlayer player, HackType hackType, Enums.DataType dataType, String cancellableCompatibility, double delayNumber, boolean hasPlayer, @@ -248,7 +247,6 @@ private String getDetectionState(SpartanPlayer player, HackType hackType, Resear if (!check.isEnabled(dataType, worldName, null)) { // Do not put player because we calculate it below return returnNull ? null : "Disabled"; } - UUID uuid = player.uuid; String delay = delayNumber == 0.0 ? "" : " (" + (Math.floor(delayNumber) == delayNumber ? String.valueOf((int) delayNumber) : String.valueOf(delayNumber)) + ")"; CancelCause disabledCause = player.getViolations(hackType).getDisableCause(); return Permissions.isBypassing(player, hackType) ? "Permission Bypass" : @@ -260,11 +258,9 @@ private String getDetectionState(SpartanPlayer player, HackType hackType, Resear } public void refresh(String targetName) { - String key = "player-info=inventory-menu"; - if (Config.settings.getBoolean("Important.refresh_inventory_menu") - && SpartanBukkit.cooldowns.canDo(SpartanBukkit.uuid + "=" + key)) { - SpartanBukkit.cooldowns.add(SpartanBukkit.uuid + "=" + key, 1); + && cooldowns.canDo("")) { + cooldowns.add("", 1); List players = SpartanBukkit.getPlayers(); if (!players.isEmpty()) { @@ -284,7 +280,7 @@ public void refresh(String targetName) { break; } } - SpartanMenu.playerInfo.open(o, targetName); + InteractiveInventory.playerInfo.open(o, targetName); } } } @@ -326,7 +322,7 @@ public boolean internalHandle(SpartanPlayer player) { } else if (item.equals("Close")) { player.sendInventoryCloseMessage(null); } else if (item.equals("Back")) { - SpartanMenu.mainMenu.open(player); + InteractiveInventory.mainMenu.open(player); } else { player.sendImportantMessage("§7Click to learn more about the detection states§8: \n§a§n" + documentationURL); } diff --git a/src/main/java/com/vagdedes/spartan/gui/spartan/SupportIncompatibleItems.java b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/SupportIncompatibleItems.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/gui/spartan/SupportIncompatibleItems.java rename to src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/SupportIncompatibleItems.java index 761e97e..0c7900b 100644 --- a/src/main/java/com/vagdedes/spartan/gui/spartan/SupportIncompatibleItems.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/inventory/implementation/SupportIncompatibleItems.java @@ -1,12 +1,11 @@ -package com.vagdedes.spartan.gui.spartan; +package com.vagdedes.spartan.abstraction.inventory.implementation; -import com.vagdedes.spartan.abstraction.InventoryMenu; +import com.vagdedes.spartan.abstraction.functionality.IncompatibleItem; +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.essential.MinigameMaker; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.helpers.AntiCheatUpdates; -import com.vagdedes.spartan.objects.features.IncompatibleItem; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; @@ -67,8 +66,7 @@ public boolean internalOpen(SpartanPlayer player, boolean permissionMessage, Obj add("§2Add Item", null, new ItemStack(MaterialUtils.get("redstone_torch")), 52); - add("§4Back", AntiCheatUpdates.getInformation(false), - new ItemStack(Material.ARROW), 53); + add("§4Back", null, new ItemStack(Material.ARROW), 53); return true; } @@ -77,7 +75,7 @@ public boolean internalHandle(SpartanPlayer player) { String item = itemStack.getItemMeta().getDisplayName(); if (itemStack.getType() == Material.ARROW && item.equals("§4Back")) { - SpartanMenu.mainMenu.open(player); + InteractiveInventory.mainMenu.open(player); } else if (itemStack.getType() == MaterialUtils.get("redstone_torch") && item.equals("§2Add Item")) { Player n = player.getPlayer(); diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternCache.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternCache.java new file mode 100644 index 0000000..1672a3f --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternCache.java @@ -0,0 +1,18 @@ +package com.vagdedes.spartan.abstraction.pattern; + +public abstract class PatternCache { + + private long time; + + protected PatternCache() { + refresh(); + } + + protected void refresh() { + this.time = System.currentTimeMillis() + 1_000L; + } + + public boolean isExpired() { + return System.currentTimeMillis() > this.time; + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternFamily.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternFamily.java new file mode 100644 index 0000000..b7e9a4f --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternFamily.java @@ -0,0 +1,32 @@ +package com.vagdedes.spartan.abstraction.pattern; + +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternStorage; + +public abstract class PatternFamily { + + protected final long storeFrequency; + protected long lastStored; + protected final PatternStorage[] patterns; + + protected PatternFamily(long storeFrequency, int patterns) { + this.storeFrequency = storeFrequency; + this.lastStored = 0L; + this.patterns = new PatternStorage[patterns]; + } + + protected void addPatterns(PatternStorage[] patterns) { + for (int i = 0; i < patterns.length; i++) { + this.patterns[i] = patterns[i]; + } + } + + public void store() { + if (System.currentTimeMillis() - this.lastStored >= this.storeFrequency) { + this.lastStored = System.currentTimeMillis(); + + for (PatternStorage patternValue : this.patterns) { + patternValue.store(); + } + } + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternGeneralization.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternGeneralization.java new file mode 100644 index 0000000..e37cf10 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/PatternGeneralization.java @@ -0,0 +1,29 @@ +package com.vagdedes.spartan.abstraction.pattern; + +import com.vagdedes.spartan.Register; + +public abstract class PatternGeneralization { + + public static String path(String key) { + return Register.plugin.getDataFolder() + + "/learning" + + "/" + key; + } + + public static final String + profileOption = ".profile", + patternOption = ".pattern", + situationOption = ".situation"; + public static final String[] options = {profileOption, patternOption, situationOption}; + + // Separator + + public final String key; + public final int generalization; + + + protected PatternGeneralization(String key, int generalization) { + this.key = key; + this.generalization = generalization; + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/MovementPatterns.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/MovementPatterns.java new file mode 100644 index 0000000..b5016ee --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/MovementPatterns.java @@ -0,0 +1,34 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation; + +import com.vagdedes.spartan.abstraction.pattern.PatternFamily; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternStorage; +import com.vagdedes.spartan.utils.gameplay.GroundUtils; + +public class MovementPatterns extends PatternFamily { + + public PatternStorage horizontal, vertical, all, fall; + + public MovementPatterns(long storeFrequency) { + super(storeFrequency, 4); + this.addPatterns( + new PatternStorage[]{ + this.horizontal = new PatternStorage( + "movement/distance/horizontal", + new int[]{GroundUtils.maxHeightLength} + ), + this.vertical = new PatternStorage( + "movement/distance/vertical", + new int[]{GroundUtils.maxHeightLength} + ), + this.all = new PatternStorage( + "movement/distance/all", + new int[]{GroundUtils.maxHeightLength} + ), + this.fall = new PatternStorage( + "movement/distance/fall", + new int[]{} + ) + } + ); + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternAllCache.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternAllCache.java new file mode 100644 index 0000000..9827662 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternAllCache.java @@ -0,0 +1,21 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternCache; + +import java.util.Collection; + +public class PatternAllCache extends PatternCache { + + Collection> data; + + PatternAllCache(Collection> cached) { + super(); + this.data = cached; + } + + Collection> update(Collection> cached) { + this.data = cached; + this.refresh(); + return this.data; + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationMemory.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationMemory.java new file mode 100644 index 0000000..ea635f0 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationMemory.java @@ -0,0 +1,10 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternGeneralization; + +public class PatternGeneralizationMemory extends PatternGeneralization { + + PatternGeneralizationMemory(String key, int generalization) { + super(key, generalization); + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationStorage.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationStorage.java new file mode 100644 index 0000000..3df45c3 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternGeneralizationStorage.java @@ -0,0 +1,72 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternGeneralization; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.Objects; + +public class PatternGeneralizationStorage extends PatternGeneralization { + + private short count; + private File file; + private YamlConfiguration configuration; + private byte store; + + PatternGeneralizationStorage(String key) { + super(key, 0); + this.count = 0; + this.store = 0; + this.reload(); + } + + private void reload() { + int hash = Objects.hash(this.key, this.generalization, System.currentTimeMillis()); + this.file = new File(path(key) + "/" + hash + ".yml"); + + if (this.file.exists()) { + this.reload(); + return; + } else { + try { + this.file.createNewFile(); + } catch (Exception ignored) { + } + } + this.configuration = YamlConfiguration.loadConfiguration(this.file); + } + + void set(PlayerProfile profile, PatternValue value) { + SpartanBukkit.dataThread.execute(() -> { + this.count++; + this.configuration.set(value.time + profileOption, profile.getName()); + this.configuration.set(value.time + situationOption, value.situation); + this.configuration.set(value.time + patternOption, value.pattern); + + if (this.store == 0) { + this.store = 1; + } + }); + } + + void store() { + if (this.store == 1) { + this.store = 2; + + SpartanBukkit.dataThread.execute(() -> { + try { + this.configuration.save(this.file); + this.store = 0; + + if (this.count < 0) { // Short has overflowed (32767) + this.count = 0; + this.reload(); + } + } catch (Exception ignored) { + } + }); + } + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternRankedCache.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternRankedCache.java new file mode 100644 index 0000000..c38dfca --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternRankedCache.java @@ -0,0 +1,20 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternCache; +import com.vagdedes.spartan.utils.math.probability.ProbabilityRank; + +public class PatternRankedCache extends PatternCache { + + ProbabilityRank data; + + PatternRankedCache(ProbabilityRank cached) { + super(); + this.data = cached; + } + + ProbabilityRank update(ProbabilityRank cached) { + this.data = cached; + this.refresh(); + return this.data; + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternSpecificCache.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternSpecificCache.java new file mode 100644 index 0000000..269ccb4 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternSpecificCache.java @@ -0,0 +1,20 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternCache; + +import java.util.List; + +public class PatternSpecificCache extends PatternCache { + + List data; + + PatternSpecificCache(List cached) { + super(); + this.data = cached; + } + + void update(List cached) { + this.data = cached; + this.refresh(); + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternStorage.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternStorage.java new file mode 100644 index 0000000..6d5f490 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternStorage.java @@ -0,0 +1,458 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternGeneralization; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; +import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.utils.math.probability.ProbabilityRank; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.*; + +public class PatternStorage { + + private static final boolean debug = true; + private static final Collection instances = Collections.synchronizedList(new ArrayList<>()); + private static final Map allCache = Collections.synchronizedMap(new LinkedHashMap<>()); + private static final Map specificCache = Collections.synchronizedMap(new LinkedHashMap<>()); + private static final Map rankedCache = Collections.synchronizedMap(new LinkedHashMap<>()); + + public static void delete(PlayerProfile profile) { + synchronized (instances) { + for (PatternStorage instance : instances) { + synchronized (instance.correlations) { + if (instance.correlations.remove(profile) != null) { + File directory = new File(PatternGeneralization.path(instance.key)); + + if (directory.isDirectory()) { + File[] files = directory.listFiles(); + + if (files != null) { + for (File file : files) { + if (file.isFile() + && file.getName().endsWith(".yml")) { + YamlConfiguration configuration = YamlConfiguration.loadConfiguration(file); + Set keys = configuration.getKeys(false); + + if (!keys.isEmpty()) { + boolean found = false; + + for (String key : keys) { + try { + String profileName = configuration.getString(key + PatternGeneralization.profileOption, null); + + if (profileName != null + && profileName.equals(profile.getName())) { + for (String option : PatternGeneralization.options) { + configuration.set(key + option, null); + } + configuration.set(key, null); + found = true; + } + } catch (Exception ignored) { + } + } + + if (found) { + try { + configuration.save(file); + } catch (Exception ignored) { + } + } + } + } + } + } + } + } + } + } + } + } + + public static void reload() { + synchronized (instances) { + for (PatternStorage patternStorage : instances) { + patternStorage.load(); + } + } + } + + public static void clear() { + synchronized (instances) { + synchronized (allCache) { + synchronized (specificCache) { + synchronized (rankedCache) { + instances.clear(); + allCache.clear(); + specificCache.clear(); + rankedCache.clear(); + } + } + } + } + } + + // Separator + + public final String key; + private final PatternGeneralization[] generalizations; + // Profile -> Generalization -> Situation -> Patterns + private final Map>>> correlations; + + public PatternStorage(String key, int[] generalizations) { + this.key = key; + + this.correlations = Collections.synchronizedMap(new LinkedHashMap<>()); + + this.generalizations = new PatternGeneralization[generalizations.length + 1]; + this.generalizations[0] = new PatternGeneralizationStorage(key); + + if (generalizations.length > 0) { + for (int count = 0; count < generalizations.length; count++) { + this.generalizations[count + 1] = new PatternGeneralizationMemory(key, generalizations[count]); + } + } + + synchronized (instances) { + instances.add(this); + } + } + + // Separator + + public void store() { + ((PatternGeneralizationStorage) this.generalizations[0]).store(); + } + + private void load() { + store(); + Map>>> correlations = new LinkedHashMap<>(); + File directory = new File(PatternGeneralization.path(this.key)); + + if (!directory.exists()) { + directory.mkdirs(); + } else if (directory.isDirectory()) { + File[] files = directory.listFiles(); + + if (files != null) { + Arrays.sort(files, Comparator.comparingLong(File::lastModified)); + + for (File file : files) { + if (file.isFile() + && file.getName().endsWith(".yml")) { + YamlConfiguration configuration = YamlConfiguration.loadConfiguration(file); + Set keys = configuration.getKeys(false); + + if (!keys.isEmpty()) { + for (String key : keys) { + try { + long time = Long.parseLong(key); + Object pattern = configuration.get(key + PatternGeneralization.patternOption, null); + + if (pattern instanceof Number) { + long situation = configuration.getLong(key + PatternGeneralization.situationOption, Long.MIN_VALUE); + + if (situation != Long.MIN_VALUE) { + String profileName = configuration.getString(key + PatternGeneralization.profileOption, null); + + if (profileName != null + && !profileName.isEmpty()) { + PlayerProfile profile = ResearchEngine.getPlayerProfile(profileName); + + for (PatternGeneralization generalization : this.generalizations) { + this.rawCache( + correlations, + profile, + new PatternValue( + situation, + (Number) pattern, + generalization, + time + ), + generalization, + false + ); + } + } + } + } + } catch (Exception ignored) { + } + } + } + } + } + } else { + directory.delete(); + directory.mkdirs(); + } + } + + synchronized (this.correlations) { + this.correlations.clear(); + this.correlations.putAll(correlations); + } + } + + // Separator + + private void rawCache(Map>>> correlations, + PlayerProfile profile, + PatternValue value, + PatternGeneralization generalization, + boolean set) { + List list = correlations.computeIfAbsent( + profile, + k -> new LinkedHashMap<>() + ).computeIfAbsent( + generalization.generalization, + k -> new LinkedHashMap<>() + ).computeIfAbsent( + value.situation, + k -> new ArrayList<>(100) + ); + list.add(value); + + if (list.size() > (SpartanEdition.is2ndGeneration() ? 3_000_000 : 1_000_000)) { + list.remove(0); + } + + if (set) { + ((PatternGeneralizationStorage) generalization).set(profile, value); + } + } + + public void collect(PlayerProfile profile, long situation, Number number, boolean collect) { + if (collect) { + long time = System.currentTimeMillis(); + + synchronized (this.correlations) { + for (PatternGeneralization generalization : this.generalizations) { + this.rawCache( + this.correlations, + profile, + new PatternValue( + situation, + number, + generalization, + time + ), + generalization, + generalization instanceof PatternGeneralizationStorage + ); + } + } + } + } + + // Separator + + private void notify(SpartanPlayer player, long situation) { + String message = AwarenessNotifications.getOptionalNotification( + "Spartan's Machine Learning algorithms have insufficient data to check you. " + + (player.getProfile().isLegitimate() + ? "Continue playing LEGITIMATELY to train the algorithm so you can try again later." + : "Since you are " + player.getProfile().evidence.getType() + ", either clear your data via '/spartan info'" + + " and play LEGITIMATELY or find a legitimate player to help train the algorithm so you can try again later.") + ); + + if (message != null) { + String s = "pattern-storage-" + key; + + if (AwarenessNotifications.canSend(player.uuid, s + "-" + situation, 120) + && AwarenessNotifications.canSend(player.uuid, s, 60)) { + player.sendMessage(message); + } + } + } + + // Separator + + public Collection> getAll(SpartanPlayer player, long situation, int generalization) { + int hash = (Long.hashCode(situation) * SpartanBukkit.hashCodeMultiplier) + generalization; + + if (DetectionNotifications.isEnabled(player)) { + Collection> result = this.getAllRaw(situation, generalization); + + synchronized (allCache) { + PatternAllCache cache = allCache.get(hash); + + if (result.isEmpty()) { + notify(player, situation); + } + if (cache == null) { + allCache.put(hash, new PatternAllCache(result)); + return result; + } else { + return cache.update(result); + } + } + } else { + synchronized (allCache) { + PatternAllCache cache = allCache.get(hash); + + if (cache == null) { + Collection> result = this.getAllRaw(situation, generalization); + allCache.put(hash, new PatternAllCache(result)); + return result; + } else if (cache.isExpired()) { + return cache.update(this.getAllRaw(situation, generalization)); + } else { + return cache.data; + } + } + } + } + + private Collection> getAllRaw(long situation, int generalization) { + if (this.correlations.isEmpty()) { + return new ArrayList<>(0); + } else { + Collection> collections = new ArrayList<>(this.correlations.size()); + int count = 0; + + synchronized (this.correlations) { + for (Map.Entry>>> entry : this.correlations.entrySet()) { + if (entry.getKey().isLegitimate()) { + Collection data = entry.getValue().get(generalization).get(situation); + + if (data != null) { + collections.add(data); + count += data.size(); + } + } + } + } + return !debug && (collections.size() < ResearchEngine.profileRequirement + || count < ResearchEngine.dataRequirement) + ? new ArrayList<>(0) + : collections; + } + } + + // Separator + + public List getSpecific(PlayerProfile profile, long situation, int generalization, int count) { + int hash = (profile.hashCode() * SpartanBukkit.hashCodeMultiplier) + Long.hashCode(situation); + hash = (hash * SpartanBukkit.hashCodeMultiplier) + generalization; + + synchronized (specificCache) { + PatternSpecificCache cache = specificCache.get(hash); + boolean notNull = cache != null; + + if (notNull && !cache.isExpired()) { + return cache.data; + } else { + synchronized (this.correlations) { + Map>> map = this.correlations.get(profile); + List list; + + if (map == null) { + list = new ArrayList<>(0); + } else { + List specific = map.get(generalization).get(situation); + + if (specific == null) { + list = new ArrayList<>(0); + } else { + list = this.subList(specific, count); + } + } + if (notNull) { + cache.update(list); + } else { + specificCache.put( + hash, + new PatternSpecificCache(list) + ); + } + return list; + } + } + } + } + + public List subList(List specific, int count) { + int size = specific.size(); + + if (size < count) { + return new ArrayList<>(0); + } else { + return specific.subList(size - count, size); + } + } + + // Separator + + public ProbabilityRank getRanked(SpartanPlayer player, long situation, int generalization) { + int hash = (Long.hashCode(situation) * SpartanBukkit.hashCodeMultiplier) + generalization; + + if (DetectionNotifications.isEnabled(player)) { + ProbabilityRank result = this.getRankedRaw(situation, generalization); + + synchronized (rankedCache) { + PatternRankedCache cache = rankedCache.get(hash); + + if (!result.hasData()) { + notify(player, situation); + } + if (cache == null) { + rankedCache.put(hash, new PatternRankedCache(result)); + return result; + } else { + return cache.update(result); + } + } + } else { + synchronized (rankedCache) { + PatternRankedCache cache = rankedCache.get(hash); + + if (cache == null) { + ProbabilityRank result = this.getRankedRaw(situation, generalization); + rankedCache.put( + hash, + new PatternRankedCache(result) + ); + return result; + } else if (cache.isExpired()) { + return cache.update(this.getRankedRaw(situation, generalization)); + } else { + return cache.data; + } + } + } + } + + public ProbabilityRank getRankedRaw(long situation, int generalization) { + if (this.correlations.isEmpty()) { + return new ProbabilityRank(0); + } else { + ProbabilityRank rank = new ProbabilityRank(this.correlations.size()); + int profiles = 0; + + synchronized (this.correlations) { + for (Map.Entry>>> entry : this.correlations.entrySet()) { + if (entry.getKey().isLegitimate()) { + Collection data = entry.getValue().get(generalization).get(situation); + + if (data != null) { + rank.addMultiplePatterns(data); + profiles++; + } + } + } + } + return !debug + && (profiles < ResearchEngine.profileRequirement + || rank.getTotal() < ResearchEngine.dataRequirement) + ? new ProbabilityRank(0) + : rank; + } + } +} diff --git a/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternValue.java b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternValue.java new file mode 100644 index 0000000..8cdb239 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/abstraction/pattern/implementation/base/PatternValue.java @@ -0,0 +1,19 @@ +package com.vagdedes.spartan.abstraction.pattern.implementation.base; + +import com.vagdedes.spartan.abstraction.pattern.PatternGeneralization; +import com.vagdedes.spartan.utils.math.AlgebraUtils; + +public class PatternValue { + + public final Number pattern; + public final long situation; + final long time; + + PatternValue(long situation, Number number, PatternGeneralization generalization, long time) { + this.time = time; + this.pattern = generalization.generalization == 0 + ? number + : AlgebraUtils.cut(number.doubleValue(), generalization.generalization); + this.situation = situation; + } +} diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/InformationAnalysis.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/InformationAnalysis.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/objects/profiling/InformationAnalysis.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/InformationAnalysis.java index 38a4478..0787942 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/InformationAnalysis.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/InformationAnalysis.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.CharUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; @@ -17,10 +17,6 @@ public class InformationAnalysis { private static final Map detectionHasOption = Cache.store(Collections.synchronizedMap(new LinkedHashMap<>())); - public static String[] getHeadArray(String information, int limit) { - return information.split(" ", limit); - } - private static boolean containsDetection(String string, String find) { int index = string.indexOf(find); @@ -76,7 +72,7 @@ private static String removeDetectionDetails(String detection) { private final String[] array; InformationAnalysis(Enums.HackType hackType, String information) { - this.array = getHeadArray(information, 0); + this.array = information.split(" "); String detection = array[1]; this.detection = detection.substring(0, detection.length() - 1); // Remove comma diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/MiningHistory.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/MiningHistory.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/objects/profiling/MiningHistory.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/MiningHistory.java index 5982e45..5c9ca33 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/MiningHistory.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/MiningHistory.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; import me.vagdedes.spartan.system.Enums; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerCombat.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerCombat.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerCombat.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerCombat.java index 1edf53b..bfae874 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerCombat.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerCombat.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import java.util.ArrayList; diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerEvidence.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerEvidence.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerEvidence.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerEvidence.java index 2fe15fd..45f5e75 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerEvidence.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerEvidence.java @@ -1,12 +1,11 @@ -package com.vagdedes.spartan.objects.profiling; - -import com.vagdedes.spartan.functionality.protections.Latency; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.spartan.MainMenu; -import com.vagdedes.spartan.handlers.stability.CancelViolation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.statistics.PatternStorage; -import com.vagdedes.spartan.objects.system.Check; +package com.vagdedes.spartan.abstraction.profiling; + +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.inventory.implementation.MainMenu; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.Latency; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.performance.CancelViolation; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; @@ -158,7 +157,7 @@ public Collection calculate(SpartanPlayer player, Enums.HackType "Ratio: " + AlgebraUtils.cut(ratio, 2) + "%" ); this.judgeLocal(); - SpartanMenu.playerInfo.refresh(player.name); + InteractiveInventory.playerInfo.refresh(player.name); MainMenu.refresh(); return getRawKnowledgeList(); } @@ -180,12 +179,10 @@ void judgeLocal() { type = evidenceType; if (evidenceType != EvidenceType.Legitimate) { - PatternStorage.block(this.profile); break; } } } - PatternStorage.consider(this.profile); this.type = type; } diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerFight.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerFight.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerFight.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerFight.java index b02f279..923a527 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerFight.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerFight.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import me.vagdedes.spartan.system.Enums; public class PlayerFight { diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerOpponent.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerOpponent.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerOpponent.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerOpponent.java index fc07905..27390e3 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerOpponent.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerOpponent.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; public class PlayerOpponent { diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerProfile.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerProfile.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerProfile.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerProfile.java index 2e9cee4..7159f8c 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerProfile.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerProfile.java @@ -1,9 +1,8 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.necessary.bedrock.BedrockCompatibility; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.InventoryUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Bukkit; @@ -122,8 +121,8 @@ public ItemStack getSkull(boolean force) { return skull; } - public ResearchEngine.DataType getDataType() { - return isBedrockPlayer() ? ResearchEngine.DataType.Bedrock : ResearchEngine.DataType.Java; + public Enums.DataType getDataType() { + return isBedrockPlayer() ? Enums.DataType.Bedrock : Enums.DataType.Java; } public boolean isBedrockPlayer() { diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerViolation.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerViolation.java similarity index 57% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PlayerViolation.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerViolation.java index 6e1974f..e9e668d 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PlayerViolation.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PlayerViolation.java @@ -1,6 +1,8 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.functionality.performance.FalsePositiveDetection; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.utils.gameplay.GroundUtils; +import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; import java.util.ArrayList; @@ -26,7 +28,19 @@ public PlayerViolation(Enums.HackType hackType, long time, String information, i this.detection = informationAnalysis.detection; this.numbers = informationAnalysis.getNumbers(); this.isOption = informationAnalysis.isOption(hackType); - this.similarityIdentity = FalsePositiveDetection.getSimplifiedNumber(hackType, detection, numbers); + int hash = (hackType.hashCode() * SpartanBukkit.hashCodeMultiplier) + detection.hashCode(); + + if (!this.numbers.isEmpty()) { + for (Number number : this.numbers) { + if (number instanceof Double) { + hash = (hash * SpartanBukkit.hashCodeMultiplier) + + Double.hashCode(AlgebraUtils.cut(number.doubleValue(), GroundUtils.maxHeightLength)); + } else { + hash = (hash * SpartanBukkit.hashCodeMultiplier) + number.intValue(); + } + } + } + this.similarityIdentity = hash; } boolean isDetectionEnabled() { diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/PunishmentHistory.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PunishmentHistory.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/objects/profiling/PunishmentHistory.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/PunishmentHistory.java index 1bc3803..1600172 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/PunishmentHistory.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/PunishmentHistory.java @@ -1,10 +1,10 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.configuration.AntiCheatLogs; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.management.Config; public class PunishmentHistory { diff --git a/src/main/java/com/vagdedes/spartan/objects/profiling/ViolationHistory.java b/src/main/java/com/vagdedes/spartan/abstraction/profiling/ViolationHistory.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/objects/profiling/ViolationHistory.java rename to src/main/java/com/vagdedes/spartan/abstraction/profiling/ViolationHistory.java index d3a9e3f..f37a238 100644 --- a/src/main/java/com/vagdedes/spartan/objects/profiling/ViolationHistory.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/profiling/ViolationHistory.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.profiling; +package com.vagdedes.spartan.abstraction.profiling; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanBlock.java b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanBlock.java similarity index 94% rename from src/main/java/com/vagdedes/spartan/objects/replicates/SpartanBlock.java rename to src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanBlock.java index 9830663..a10997d 100644 --- a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanBlock.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanBlock.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.objects.replicates; +package com.vagdedes.spartan.abstraction.replicates; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.stability.Chunks; +import com.vagdedes.spartan.functionality.server.Chunks; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import org.bukkit.Chunk; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanInventory.java b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanInventory.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/objects/replicates/SpartanInventory.java rename to src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanInventory.java index ce021e2..ea5b72e 100644 --- a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanInventory.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanInventory.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.replicates; +package com.vagdedes.spartan.abstraction.replicates; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanLocation.java b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanLocation.java similarity index 98% rename from src/main/java/com/vagdedes/spartan/objects/replicates/SpartanLocation.java rename to src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanLocation.java index 0acfba0..b853881 100644 --- a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanLocation.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanLocation.java @@ -1,13 +1,13 @@ -package com.vagdedes.spartan.objects.replicates; +package com.vagdedes.spartan.abstraction.replicates; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.stability.Chunks; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.objects.system.LiveViolation; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.check.LiveViolation; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.functionality.server.Chunks; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import com.vagdedes.spartan.utils.gameplay.MoveUtils; diff --git a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanOpenInventory.java b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanOpenInventory.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/objects/replicates/SpartanOpenInventory.java rename to src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanOpenInventory.java index 7dbf102..0a5dcb7 100644 --- a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanOpenInventory.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanOpenInventory.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.objects.replicates; +package com.vagdedes.spartan.abstraction.replicates; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanPlayer.java b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanPlayer.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/objects/replicates/SpartanPlayer.java rename to src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanPlayer.java index f8231a3..bda5b4f 100644 --- a/src/main/java/com/vagdedes/spartan/objects/replicates/SpartanPlayer.java +++ b/src/main/java/com/vagdedes/spartan/abstraction/replicates/SpartanPlayer.java @@ -1,7 +1,12 @@ -package com.vagdedes.spartan.objects.replicates; +package com.vagdedes.spartan.abstraction.replicates; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.abstraction.CheckExecutor; +import com.vagdedes.spartan.abstraction.check.CheckExecutor; +import com.vagdedes.spartan.abstraction.check.LiveViolation; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Timer; +import com.vagdedes.spartan.abstraction.data.*; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; import com.vagdedes.spartan.checks.combat.FastBow; import com.vagdedes.spartan.checks.combat.HitReach; import com.vagdedes.spartan.checks.combat.VelocityCheck; @@ -28,29 +33,24 @@ import com.vagdedes.spartan.compatibility.manual.enchants.EcoEnchants; import com.vagdedes.spartan.compatibility.manual.vanilla.Attributes; import com.vagdedes.spartan.compatibility.necessary.bedrock.BedrockCompatibility; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.Latency; +import com.vagdedes.spartan.functionality.connection.Piracy; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Liquid; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.ElytraUse; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Velocity; +import com.vagdedes.spartan.functionality.identifiers.simple.DetectionLocation; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; import com.vagdedes.spartan.functionality.performance.MaximumCheckedPlayers; -import com.vagdedes.spartan.functionality.protections.Latency; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.connection.Piracy; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.Liquid; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.ElytraUse; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Velocity; -import com.vagdedes.spartan.handlers.stability.*; -import com.vagdedes.spartan.interfaces.listeners.EventsHandler7; -import com.vagdedes.spartan.objects.data.Timer; -import com.vagdedes.spartan.objects.data.*; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.system.LiveViolation; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.*; +import com.vagdedes.spartan.listeners.EventsHandler7; import com.vagdedes.spartan.utils.gameplay.*; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; @@ -93,7 +93,7 @@ public class SpartanPlayer { public final UUID uuid; public final String ipAddress; private final Collection potionEffects; - public final ResearchEngine.DataType dataType; + public final Enums.DataType dataType; private EntityDamageEvent lastDamageCause; private SpartanInventory inventory; private SpartanOpenInventory openInventory; @@ -131,6 +131,7 @@ public class SpartanPlayer { private final List nmsDistance, nmsHorizontalDistance, nmsVerticalDistance, nmsBox; + private final List nmsFall; private double customDistance, customHorizontalDistance, customVerticalDistance; private long @@ -368,7 +369,7 @@ public SpartanPlayer(Player p, UUID uuid) { this.runCheck = new LinkedHashMap<>(hackTypes.length); this.runCheckAccountLag = new LinkedHashMap<>(hackTypes.length); this.bedrockPlayer = BedrockCompatibility.isPlayer(p); - this.dataType = bedrockPlayer ? ResearchEngine.DataType.Bedrock : ResearchEngine.DataType.Java; + this.dataType = bedrockPlayer ? Enums.DataType.Bedrock : Enums.DataType.Java; this.handlers = new Handlers(this); this.ipAddress = PlayerLimitPerIP.get(p); @@ -402,6 +403,7 @@ public SpartanPlayer(Player p, UUID uuid) { this.nmsHorizontalDistance = Collections.synchronizedList(new LinkedList<>()); this.nmsVerticalDistance = Collections.synchronizedList(new LinkedList<>()); this.nmsBox = Collections.synchronizedList(new LinkedList<>()); + this.nmsFall = Collections.synchronizedList(new LinkedList<>()); this.lastFall = 0L; this.lastOffSprint = 0L; this.lastJump = 0L; @@ -682,7 +684,7 @@ public void calculateClickData(Action action, boolean runRegardless) { } if (success && clicks.canDistributeInformation()) { - SpartanMenu.playerInfo.refresh(name); + InteractiveInventory.playerInfo.refresh(name); } } } @@ -1894,17 +1896,20 @@ public double getCustomVerticalDistance() { public synchronized void setNmsDistance(double distance, double horizontal, double vertical, - double box) { + double box, + float fall) { this.nmsDistance.add(distance); this.nmsHorizontalDistance.add(horizontal); this.nmsVerticalDistance.add(vertical); this.nmsBox.add(box); + this.nmsFall.add(fall); - for (List list : new List[]{ + for (List list : new List[]{ nmsDistance, nmsHorizontalDistance, nmsVerticalDistance, - nmsBox + nmsBox, + nmsFall }) { if (list.size() > 2) { list.remove(0); @@ -1916,6 +1921,10 @@ public double getValueOrDefault(Double value, double def) { return value == null ? def : value; } + public float getValueOrDefault(Float value, float def) { + return value == null ? def : value; + } + public Double getNmsDistance() { synchronized (nmsDistance) { int size = nmsDistance.size(); @@ -1972,6 +1981,20 @@ public Double getPreviousNmsBox() { } } + public Float getNmsFall() { + synchronized (nmsFall) { + int size = nmsFall.size(); + return size > 0 ? nmsFall.get(size - 1) : null; + } + } + + public Float getPreviousNmsFall() { + synchronized (nmsFall) { + int size = nmsFall.size(); + return size > 1 ? nmsFall.get(size - 2) : null; + } + } + // Direction public SpartanBlock getIllegalTargetBlock(SpartanBlock clickedBlock) { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AdvancedAbilities.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AdvancedAbilities.java index 854e899..bb0fe74 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AdvancedAbilities.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AdvancedAbilities.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.abilities; import be.anybody.api.advancedabilities.ability.event.AbilityCallEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -19,7 +19,7 @@ private void AbilityEvent(AbilityCallEvent e) { if (p == null) { return; } - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.AdvancedAbilities, 60); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.AdvancedAbilities, 60); } } } diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AureliumSkills.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AureliumSkills.java index 36a7e85..2bb2609 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AureliumSkills.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/AureliumSkills.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.abilities; import com.archyx.aureliumskills.api.event.TerraformBlockBreakEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/GrapplingHook.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/GrapplingHook.java index dc99721..079fe93 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/GrapplingHook.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/GrapplingHook.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.abilities; import com.snowgears.grapplinghook.api.HookAPI; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.PluginUtils; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -38,9 +38,9 @@ private void Event(PlayerFishEvent e) { if (p != null && t != null && !p.equals(t) && isItem(t.getItemInHand())) { if (PluginUtils.exists("grapplinghook")) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.GrapplingHook, 40); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.GrapplingHook, 40); } else { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.GrapplingHook, 10); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.GrapplingHook, 10); } } } diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ItemsAdder.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ItemsAdder.java index e2bf7a8..fe44c14 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ItemsAdder.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ItemsAdder.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.abilities; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.server.ReflectionUtils; import dev.lone.itemsadder.api.CustomBlock; import dev.lone.itemsadder.api.CustomMob; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MagicSpells.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MagicSpells.java index fbc88cf..1c71579 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MagicSpells.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MagicSpells.java @@ -2,10 +2,10 @@ import com.nisovin.magicspells.events.SpellCastEvent; import com.nisovin.magicspells.events.SpellCastedEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -18,7 +18,7 @@ private void SpellCast(SpellCastEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getCaster().getUniqueId()); if (p != null) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.MagicSpells, 40); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.MagicSpells, 40); } } } @@ -29,7 +29,7 @@ private void SpellCasted(SpellCastedEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getCaster().getUniqueId()); if (p != null) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.MagicSpells, 40); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.MagicSpells, 40); } } } diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MineTinker.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MineTinker.java index 3e5bfc9..4c2a794 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MineTinker.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/MineTinker.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.abilities; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import de.flo56958.minetinker.events.MTPlayerInteractEvent; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; @@ -22,7 +22,7 @@ private void Enter(MTPlayerInteractEvent e) { Compatibility.CompatibilityType compatibilityType = Compatibility.CompatibilityType.MineTinker; if (compatibilityType.isFunctional()) { - CheckProtection.evadeCommonFalsePositives(p, compatibilityType, + CheckDelay.evadeCommonFalsePositives(p, compatibilityType, new Enums.HackType[]{ Enums.HackType.KillAura, Enums.HackType.FastClicks, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ProjectKorra.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ProjectKorra.java index 24acdf8..5818d1f 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ProjectKorra.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/ProjectKorra.java @@ -3,10 +3,10 @@ import com.projectkorra.projectkorra.event.AbilityDamageEntityEvent; import com.projectkorra.projectkorra.event.AbilityProgressEvent; import com.projectkorra.projectkorra.event.AbilityStartEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -38,8 +38,8 @@ private void AbilityDamageEvent(AbilityDamageEntityEvent e) { private static void evadeCombatFPs(SpartanPlayer player, int ticks) { if (player != null) { Compatibility.CompatibilityType compatibilityType = Compatibility.CompatibilityType.ProjectKorra; - CheckProtection.evadeStandardCombatFPs(player, compatibilityType, ticks); - CheckProtection.evadeCommonFalsePositives(player, compatibilityType, + CheckDelay.evadeStandardCombatFPs(player, compatibilityType, ticks); + CheckDelay.evadeCommonFalsePositives(player, compatibilityType, new Enums.HackType[]{ Enums.HackType.Criticals, Enums.HackType.NoSwing, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShot.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShot.java index 8b707d5..1d0f4f7 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShot.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShot.java @@ -4,11 +4,11 @@ import com.shampaggon.crackshot.events.WeaponPreShootEvent; import com.shampaggon.crackshot.events.WeaponScopeEvent; import com.shampaggon.crackshot.events.WeaponShootEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.data.Buffer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Buffer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -27,7 +27,7 @@ private void WeaponScope(WeaponScopeEvent e) { } if (!e.isCancelled()) { Buffer buffer = p.getBuffer(); - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 20); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 20); if (e.isZoomIn()) { buffer.set("crackshot=compatibility=scope", 1); @@ -48,7 +48,7 @@ private void WeaponPreShoot(WeaponPreShootEvent e) { if (p == null) { return; } - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 40); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 40); } } @@ -60,7 +60,7 @@ private void WeaponShoot(WeaponShootEvent e) { if (p == null) { return; } - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 40); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 40); } } @@ -70,7 +70,7 @@ private void WeaponDamageEntity(WeaponDamageEntityEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getVictim().getUniqueId()); if (p != null) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); } } } @@ -81,7 +81,7 @@ private void EntityDamage(EntityDamageEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getEntity().getUniqueId()); if (p != null && isUsingScope(p)) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); } } } @@ -92,7 +92,7 @@ private void EntityByEntityDamage(EntityDamageByEntityEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getDamager().getUniqueId()); if (p != null && isUsingScope(p)) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShot, 60); } } } diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShotPlus.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShotPlus.java index 5eb487a..8866a89 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShotPlus.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/crackshot/CrackShotPlus.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.abilities.crackshot; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.data.Buffer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Buffer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.DeeCaaD.CrackShotPlus.Events.WeaponSecondScopeEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -24,7 +24,7 @@ private void WeaponScope(WeaponSecondScopeEvent e) { } if (!e.isCancelled()) { Buffer buffer = p.getBuffer(); - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 20); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 20); if (e.isZoomIn()) { buffer.set("crackshotplus=compatibility=scope", 1); @@ -43,7 +43,7 @@ private void EntityDamage(EntityDamageEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getEntity().getUniqueId()); if (p != null && isUsingScope(p)) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 60); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 60); } } } @@ -54,7 +54,7 @@ private void EntityByEntityDamage(EntityDamageByEntityEvent e) { SpartanPlayer p = SpartanBukkit.getPlayer(e.getDamager().getUniqueId()); if (p != null && isUsingScope(p)) { - CheckProtection.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 30); + CheckDelay.evadeStandardCombatFPs(p, Compatibility.CompatibilityType.CrackShotPlus, 30); } } } diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/BackgroundMcMMO.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/BackgroundMcMMO.java index bfd6711..bd794a6 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/BackgroundMcMMO.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/BackgroundMcMMO.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.abilities.mcmmo; import com.gmail.nossr50.api.AbilityAPI; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; public class BackgroundMcMMO { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/mcMMO.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/mcMMO.java index ed5ad1d..3a4626f 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/mcMMO.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/abilities/mcmmo/mcMMO.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.abilities.mcmmo; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.gameplay.PlayerData; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MineBomb.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MineBomb.java index 380a8d6..b6270ba 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MineBomb.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MineBomb.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.building; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MythicMobs.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MythicMobs.java index d7dcae8..96c48ac 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MythicMobs.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/MythicMobs.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.building; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.java.StringUtils; import io.lumine.mythic.bukkit.BukkitAPIHelper; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/PrinterMode.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/PrinterMode.java index 8c92915..c42e95d 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/PrinterMode.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/PrinterMode.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.building; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import me.gwndaan.printer.PrinterModeAPI; public class PrinterMode { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/RampenDrills.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/RampenDrills.java index 3ac141b..f5d28c5 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/RampenDrills.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/RampenDrills.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.building; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.rampen88.drills.events.DrillBreakEvent; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; @@ -22,7 +22,7 @@ private void Event(DrillBreakEvent e) { Compatibility.CompatibilityType compatibilityType = Compatibility.CompatibilityType.RampenDrills; if (compatibilityType.isFunctional()) { - CheckProtection.evadeCommonFalsePositives(p, compatibilityType, + CheckDelay.evadeCommonFalsePositives(p, compatibilityType, new Enums.HackType[]{ Enums.HackType.FastBreak, Enums.HackType.NoSwing, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/SuperPickaxe.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/SuperPickaxe.java index a41ef3d..5f78546 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/SuperPickaxe.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/SuperPickaxe.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.building; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.PlayerData; public class SuperPickaxe { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/TreeFeller.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/TreeFeller.java index 2e28797..959351e 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/TreeFeller.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/TreeFeller.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.building; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.abilities.mcmmo.mcMMO; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.BlockUtils; public class TreeFeller { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/VeinMiner.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/VeinMiner.java index 2c0535f..4584dc1 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/VeinMiner.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/VeinMiner.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.building; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -25,7 +25,7 @@ private void Event(PlayerVeinMineEvent e) { if (p == null) { return; } - CheckProtection.evadeCommonFalsePositives(p, Compatibility.CompatibilityType.VeinMiner, + CheckDelay.evadeCommonFalsePositives(p, Compatibility.CompatibilityType.VeinMiner, new Enums.HackType[]{ Enums.HackType.NoSwing, Enums.HackType.FastBreak, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/WildTools.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/WildTools.java index 501f729..aab0f07 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/building/WildTools.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/building/WildTools.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.building; import com.bgsoftware.wildtools.api.events.ToolUseEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -22,7 +22,7 @@ private void Event(ToolUseEvent e) { Compatibility.CompatibilityType compatibilityType = Compatibility.CompatibilityType.WildTools; if (compatibilityType.isFunctional()) { - CheckProtection.evadeCommonFalsePositives(p, compatibilityType, + CheckDelay.evadeCommonFalsePositives(p, compatibilityType, new Enums.HackType[]{ Enums.HackType.FastBreak, Enums.HackType.BlockReach, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/KnockbackMaster.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/KnockbackMaster.java index 13d2b43..92c1897 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/KnockbackMaster.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/KnockbackMaster.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.damage; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.xdefcon.knockbackmaster.api.KnockbackMasterAPI; public class KnockbackMaster { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/NoHitDelay.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/NoHitDelay.java index aa785ec..3ba08b7 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/NoHitDelay.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/NoHitDelay.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.damage; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.vanilla.Attributes; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/RealDualWield.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/RealDualWield.java index 2190dad..163f1d0 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/RealDualWield.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/RealDualWield.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.compatibility.manual.damage; import com.evill4mer.RealDualWield.Api.PlayerOffhandAnimationEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -22,7 +22,7 @@ private void Event(PlayerOffhandAnimationEvent e) { Compatibility.CompatibilityType compatibilityType = Compatibility.CompatibilityType.RealDualWield; if (compatibilityType.isFunctional()) { - CheckProtection.evadeCommonFalsePositives(p, compatibilityType, + CheckDelay.evadeCommonFalsePositives(p, compatibilityType, new Enums.HackType[]{ Enums.HackType.KillAura, Enums.HackType.HitReach, diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/SmashHit.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/SmashHit.java index 2f87ba8..9d4c8f0 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/SmashHit.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/damage/SmashHit.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.compatibility.manual.damage; import com.frash23.smashhit.AsyncPreDamageEvent; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.interfaces.listeners.EventsHandler6; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.listeners.EventsHandler6; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/CustomEnchantsPlus.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/CustomEnchantsPlus.java index e1170dd..7f25051 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/CustomEnchantsPlus.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/CustomEnchantsPlus.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.enchants; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import me.darrionat.CustomEnchantsAPI; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/EcoEnchants.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/EcoEnchants.java index c923bbf..1d4cfe2 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/EcoEnchants.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/enchants/EcoEnchants.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.enchants; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.willfp.ecoenchants.enchants.EcoEnchant; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/CraftBook.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/CraftBook.java index 79e2d0e..5d4e452 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/CraftBook.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/CraftBook.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.compatibility.manual.entity; -import com.vagdedes.spartan.configuration.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/MyPet.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/MyPet.java index 23c8916..42043f6 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/MyPet.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/MyPet.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.entity; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import de.Keyle.MyPet.MyPetApi; public class MyPet { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/Vehicles.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/Vehicles.java index 67f829a..f2c8176 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/Vehicles.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/entity/Vehicles.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.entity; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.data.Buffer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Buffer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import es.pollitoyeye.vehicles.enums.VehicleType; import es.pollitoyeye.vehicles.events.VehicleEnterEvent; import es.pollitoyeye.vehicles.events.VehicleExitEvent; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/Essentials.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/Essentials.java index e55761f..434e50c 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/Essentials.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/Essentials.java @@ -2,8 +2,8 @@ import com.earth2me.essentials.User; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import me.vagdedes.spartan.system.Enums; import org.bukkit.plugin.Plugin; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/MinigameMaker.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/MinigameMaker.java index 70f6fbd..4c481af 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/MinigameMaker.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/MinigameMaker.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.compatibility.manual.essential; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.features.IncompatibleItem; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.functionality.IncompatibleItem; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; import io.signality.api.MinigameExecutionEvent; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/BackgroundProtocolLib.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/BackgroundProtocolLib.java index 9c1952e..c36af6e 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/BackgroundProtocolLib.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/BackgroundProtocolLib.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.essential.protocollib; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.interfaces.listeners.PlibHandlers; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.listeners.PlibHandlers; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.PluginUtils; import com.vagdedes.spartan.utils.server.ReflectionUtils; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/ProtocolLib.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/ProtocolLib.java index dfecc1a..3f360a1 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/ProtocolLib.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/essential/protocollib/ProtocolLib.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.compatibility.manual.essential.protocollib; -import com.vagdedes.spartan.configuration.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; import com.vagdedes.spartan.utils.server.ReflectionUtils; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/Attributes.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/Attributes.java index 9795938..d2a6c62 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/Attributes.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/Attributes.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.compatibility.manual.vanilla; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.attribute.AttributeModifier; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/DragonPhases.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/DragonPhases.java index a22e6f0..56c9278 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/DragonPhases.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/vanilla/DragonPhases.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.vanilla; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/manual/world/AcidRain.java b/src/main/java/com/vagdedes/spartan/compatibility/manual/world/AcidRain.java index 792645a..c4b72a5 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/manual/world/AcidRain.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/manual/world/AcidRain.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.compatibility.manual.world; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.wasteofplastic.acidisland.events.AcidEvent; import com.wasteofplastic.acidisland.events.AcidRainEvent; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/semi/Authentication.java b/src/main/java/com/vagdedes/spartan/compatibility/necessary/Authentication.java similarity index 65% rename from src/main/java/com/vagdedes/spartan/compatibility/semi/Authentication.java rename to src/main/java/com/vagdedes/spartan/compatibility/necessary/Authentication.java index 7ece4ae..be5a624 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/semi/Authentication.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/necessary/Authentication.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.compatibility.semi; +package com.vagdedes.spartan.compatibility.necessary; -import com.vagdedes.spartan.configuration.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; import com.vagdedes.spartan.utils.server.PluginUtils; public class Authentication { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/semi/QuickShop.java b/src/main/java/com/vagdedes/spartan/compatibility/necessary/QuickShop.java similarity index 64% rename from src/main/java/com/vagdedes/spartan/compatibility/semi/QuickShop.java rename to src/main/java/com/vagdedes/spartan/compatibility/necessary/QuickShop.java index 8c8cc89..183f825 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/semi/QuickShop.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/necessary/QuickShop.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.compatibility.semi; +package com.vagdedes.spartan.compatibility.necessary; -import com.vagdedes.spartan.configuration.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; import com.vagdedes.spartan.utils.server.PluginUtils; public class QuickShop { diff --git a/src/main/java/com/vagdedes/spartan/compatibility/necessary/UltimateStatistics.java b/src/main/java/com/vagdedes/spartan/compatibility/necessary/UltimateStatistics.java index 418a76b..175492b 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/necessary/UltimateStatistics.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/necessary/UltimateStatistics.java @@ -1,8 +1,8 @@ package com.vagdedes.spartan.compatibility.necessary; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.handlers.stability.Cache; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import me.vagdedes.ultimatestatistics.api.UltimateStatisticsAPI; import me.vagdedes.ultimatestatistics.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/Floodgate.java b/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/Floodgate.java index ddf2a65..66586ed 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/Floodgate.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/Floodgate.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.compatibility.necessary.bedrock.plugins; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.PluginUtils; import org.geysermc.floodgate.api.FloodgateApi; diff --git a/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/ProtocolSupport.java b/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/ProtocolSupport.java index 4d3defd..a9ca01a 100644 --- a/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/ProtocolSupport.java +++ b/src/main/java/com/vagdedes/spartan/compatibility/necessary/bedrock/plugins/ProtocolSupport.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.compatibility.necessary.bedrock.plugins; -import com.vagdedes.spartan.configuration.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; import org.bukkit.entity.Player; import protocolsupport.api.Connection; import protocolsupport.api.ProtocolSupportAPI; diff --git a/src/main/java/com/vagdedes/spartan/functionality/chat/ChatProtection.java b/src/main/java/com/vagdedes/spartan/functionality/chat/ChatProtection.java index a5df101..0172677 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/chat/ChatProtection.java +++ b/src/main/java/com/vagdedes/spartan/functionality/chat/ChatProtection.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.functionality.chat; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; diff --git a/src/main/java/com/vagdedes/spartan/functionality/chat/StaffChat.java b/src/main/java/com/vagdedes/spartan/functionality/chat/StaffChat.java index ecf6d93..486c71c 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/chat/StaffChat.java +++ b/src/main/java/com/vagdedes/spartan/functionality/chat/StaffChat.java @@ -1,12 +1,12 @@ package com.vagdedes.spartan.functionality.chat; -import com.vagdedes.spartan.compatibility.semi.Authentication; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.compatibility.necessary.Authentication; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.ConfigUtils; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/functionality/command/CommandExecution.java b/src/main/java/com/vagdedes/spartan/functionality/command/CommandExecution.java new file mode 100644 index 0000000..72dc87b --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/functionality/command/CommandExecution.java @@ -0,0 +1,713 @@ +package com.vagdedes.spartan.functionality.command; + +import com.vagdedes.spartan.Register; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.compatibility.manual.essential.MinigameMaker; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.cloud.CloudConnections; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.moderation.Wave; +import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; +import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; +import com.vagdedes.spartan.functionality.notifications.clickable.ClickableMessage; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.utils.math.AlgebraUtils; +import com.vagdedes.spartan.utils.server.ConfigUtils; +import com.vagdedes.spartan.utils.server.NetworkUtils; +import io.signality.utils.system.Events; +import me.vagdedes.spartan.api.API; +import me.vagdedes.spartan.system.Enums; +import me.vagdedes.spartan.system.Enums.Permission; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; + +import java.util.*; + +public class CommandExecution implements CommandExecutor { + + public static final int maxConnectedArgumentLength = 4096; + + private static void buildCommand(CommandSender sender, ChatColor chatColor, String command, String description) { + ClickableMessage.sendCommand(sender, chatColor + command, description, command); + } + + public static boolean spartanMessage(CommandSender sender, boolean isPlayer) { + if (!isPlayer || Permissions.has((Player) sender)) { + String v = API.getVersion(); + sender.sendMessage(""); + String command = "§4" + SpartanEdition.getProductName(false) + + " §8[§7(§fVersion: " + v + "§7)§8, §7(§fID: " + + IDs.hide(IDs.user()) + "/" + IDs.hide(IDs.nonce()) + "§7)§8]"; + + sender.sendMessage(command); + sender.sendMessage("§8§l<> §7Required command argument"); + sender.sendMessage("§8§l[] §7Optional command argument"); + return true; + } + sender.sendMessage(Config.messages.getColorfulString("unknown_command")); + return false; + } + + public static void completeMessage(CommandSender sender, String list) { + boolean isPlayer = sender instanceof Player; + SpartanPlayer player = isPlayer ? SpartanBukkit.getPlayer((Player) sender) : null; + isPlayer &= player != null; + + if (spartanMessage(sender, isPlayer)) { + String command = Register.plugin.getName().toLowerCase(); + boolean info = !isPlayer || Permissions.has(player, Enums.Permission.INFO), + manage = !isPlayer || Permissions.has(player, Enums.Permission.MANAGE); + + switch (list) { + case "default": + if ((info || manage) && isPlayer) { + buildCommand(sender, ChatColor.GREEN, "/" + command + " menu", + "Click this command to open the plugin's inventory menu."); + } + if (!isPlayer || Permissions.has(player, Permission.ADMIN)) { + ClickableMessage.sendCommand(sender, ChatColor.GREEN + "/" + command + " ai-assistance ", "This command can be used to ask our AI Assistant about most of the help you may need.", null); + ClickableMessage.sendCommand(sender, ChatColor.GREEN + "/" + command + " customer-support ", "This command can be used to provide crucial details to the developers about problematic detections.", null); + ClickableMessage.sendCommand(sender, ChatColor.GREEN + "/" + command + " customer-support [explanation]", "This command can be used to provide crucial details to the developers about a check.", null); + } + if (manage) { + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " toggle ", + "This command can be used to enable/disable a check and its detections.", null); + } + if (!isPlayer || Permissions.has(player, Permission.RELOAD)) { + buildCommand(sender, ChatColor.RED, "/" + command + " reload", + "Click this command to reload the plugin's cache."); + } + if (!isPlayer || info + || Permissions.has(player, Permission.KICK) + || Permissions.has(player, Permission.WARN) + || Permissions.has(player, Permission.USE_BYPASS) + || Permissions.has(player, Permission.WAVE)) { + buildCommand(sender, ChatColor.RED, "/" + command + " moderation", + "Click this command to view a list of moderation commands."); + } + if (!isPlayer || Permissions.has(player, Permission.CONDITION)) { + buildCommand(sender, ChatColor.RED, "/" + command + " conditions", + "Click this command to view a list of conditional commands."); + } + break; + case "moderation": + boolean permission = false; + + if (isPlayer && DetectionNotifications.hasPermission(player)) { + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " notifications [frequency]", + "This command can be used to receive chat messages whenever a player is suspected of using hack modules.", null); + } + if (isPlayer && info) { + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " info [player]", + "This command can be used to view useful information about a player and execute actions upon them.", null); + } + if (!isPlayer || Permissions.has(player, Permission.USE_BYPASS)) { + permission = true; + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " bypass [seconds]", + "This command can be used to cause a player to temporarily bypass a check and its detections.", null); + } + if (!isPlayer || Permissions.has(player, Permission.WARN)) { + permission = true; + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " warn ", + "This command can be used to individually warn a player about something important.", null); + } + if (!isPlayer || Permissions.has(player, Permission.KICK)) { + permission = true; + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " kick ", + "This command can be used to kick players from the server for a specific reason.", null); + } + if (!isPlayer || Permissions.has(player, Permission.WAVE)) { + permission = true; + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " wave [player] [command]", + "This command can be used to add a player to a list with a command representing their punishment. " + + "This list can be executed manually by a player or automatically based on the plugin's configuration, " + + "and cause added players to punished all at once and in order." + + "\n\n" + + "Example: /" + command + " wave add playerName ban {player} You have been banned for hacking!", null); + } + if (!isPlayer || Permissions.has(player, Permission.ADMIN)) { + permission = true; + ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " proxy-command ", + "This command can be used to transfer commands to the proxy/network of servers. (Example: BungeeCord)", null); + } + + if (!permission) { + completeMessage(sender, "default"); + } + break; + case "conditions": + if (!isPlayer || Permissions.has(player, Permission.CONDITION)) { + sender.sendMessage(ChatColor.RED + "/" + command + " if equals do "); + sender.sendMessage(ChatColor.RED + "/" + command + " if contains do "); + sender.sendMessage(ChatColor.RED + "/" + command + " if is-less-than do "); + sender.sendMessage(ChatColor.RED + "/" + command + " if is-greater-than do "); + } else { + completeMessage(sender, "default"); + } + break; + case "commands": + sender.sendMessage(ChatColor.RED + "Run '/spartan commands' for a list of commands"); + default: + break; + } + } + } + + public static int num(final String s) { + return Integer.parseInt(s); + } + + public static double dbl(final String s) { + return Double.parseDouble(s); + } + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + boolean isPlayer = sender instanceof Player; + + if (label.equalsIgnoreCase(Register.plugin.getName()) && (isPlayer || sender instanceof ConsoleCommandSender)) { + SpartanPlayer player = isPlayer ? SpartanBukkit.getPlayer((Player) sender) : null; + + if (isPlayer && player == null) { + return false; + } + if (args.length == 0) { + if (isPlayer && InteractiveInventory.mainMenu.open(player, false)) { + completeMessage(sender, "commands"); + } else { + completeMessage(sender, "default"); + } + } else if (args.length == 1) { + if (isPlayer && args[0].equalsIgnoreCase("Menu")) { + InteractiveInventory.mainMenu.open(player); + + } else if (args[0].equalsIgnoreCase("Moderation")) { + completeMessage(sender, args[0].toLowerCase()); + + } else if (args[0].equalsIgnoreCase("Conditions")) { + completeMessage(sender, args[0].toLowerCase()); + + } else if (args[0].equalsIgnoreCase("Reload") || args[0].equalsIgnoreCase("Rl")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.RELOAD)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + Config.reload(sender); + + } else if (isPlayer && args[0].equalsIgnoreCase("Info")) { + if (!Permissions.has((Player) sender, Permission.INFO)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + InteractiveInventory.playerInfo.open(player, sender.getName()); + + } else if (isPlayer && args[0].equalsIgnoreCase("Notifications")) { + if (!DetectionNotifications.hasPermission(player)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + DetectionNotifications.toggle(player, 0); + + } else if (Compatibility.CompatibilityType.MinigameMaker.isFunctional() && args[0].equalsIgnoreCase("Add-Incompatible-Item")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + int counter = 0; + StringBuilder events = new StringBuilder(); + + for (Events.EventType eventType : Events.EventType.values()) { + counter++; + String event = eventType.toString().toLowerCase().replace("_", "-"); + + if (counter % 2 == 0) { + events.append(ChatColor.YELLOW).append(event).append(ChatColor.DARK_GRAY).append(", "); + } else { + events.append(ChatColor.GRAY).append(event).append(ChatColor.DARK_GRAY).append(", "); + } + } + events = new StringBuilder(events.substring(0, events.length() - 2)); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GOLD + "Events: " + events); + sender.sendMessage(ChatColor.LIGHT_PURPLE + "Hint: use %spc% for space characters."); + sender.sendMessage(ChatColor.RED + "Usage: /spartan add-incompatible-item [name] "); + sender.sendMessage(ChatColor.RED + "Usage: /spartan add-incompatible-item [name] "); + sender.sendMessage(ChatColor.GREEN + "Example #1: /spartan add-incompatible-item block-break diamond-pickaxe FastPlace|FastBreak|BlockReach 3"); + sender.sendMessage(ChatColor.GREEN + "Example #2: /spartan add-incompatible-item player-hand-damage-player iron-sword arthur's%spc%excalibur KillAura 1"); + sender.sendMessage(""); + + if (isPlayer) { + InteractiveInventory.supportIncompatibleItems.open(player); + } + + } else { + completeMessage(sender, "default"); + } + } else { + if (args[0].equalsIgnoreCase("AI-Assistance")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + StringBuilder argumentsToStringBuilder = new StringBuilder(); + for (int i = 1; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + String argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); + + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); + return true; + } + sender.sendMessage(AwarenessNotifications.getNotification("Please wait...")); + SpartanBukkit.connectionThread.execute(() -> { + String assistance = CloudConnections.getAiAssistance(argumentsToStringBuilder.toString()); + + if (assistance != null && !assistance.isEmpty()) { + sender.sendMessage(AwarenessNotifications.getNotification(assistance)); + } else { + sender.sendMessage(Config.messages.getColorfulString("failed_command")); + } + }); + } else if (args[0].equalsIgnoreCase("Proxy-Command")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + StringBuilder argumentsToStringBuilder = new StringBuilder(); + for (int i = 1; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + String argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); + + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); + return true; + } + if (!NetworkUtils.executeCommand(isPlayer ? player.getPlayer() : null, argumentsToString)) { + sender.sendMessage(Config.messages.getColorfulString("failed_command")); + return true; + } + sender.sendMessage(Config.messages.getColorfulString("successful_command")); + } else { + if (args.length == 2) { + if (args[0].equalsIgnoreCase("Wave")) { + String command = args[1]; + + if (isPlayer && !Permissions.has((Player) sender, Permission.WAVE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + if (command.equalsIgnoreCase("Run")) { + if (Wave.getWaveList().length == 0) { + sender.sendMessage(Config.messages.getColorfulString("empty_wave_list")); + return true; + } + if (!Wave.start()) { + sender.sendMessage(Config.messages.getColorfulString("failed_command")); + } + } else if (command.equalsIgnoreCase("Clear")) { + Wave.clear(); + sender.sendMessage(Config.messages.getColorfulString("wave_clear_message")); + } else if (command.equalsIgnoreCase("List")) { + sender.sendMessage(ChatColor.GRAY + "Wave Queued Players" + ChatColor.DARK_GRAY + ":"); + sender.sendMessage(Wave.getWaveListString()); + } else { + completeMessage(sender, "moderation"); + } + + } else if (isPlayer && args[0].equalsIgnoreCase("Info")) { + if (!Permissions.has((Player) sender, Permission.INFO)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + InteractiveInventory.playerInfo.open(player, ConfigUtils.replaceWithSyntax(args[1], null)); + + } else if (args[0].equalsIgnoreCase("Toggle")) { + String check = args[1]; + + if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + boolean exists = false; + + for (Enums.HackType hackType : Enums.HackType.values()) { + if (hackType.getCheck().getName().equalsIgnoreCase(check)) { + check = hackType.toString(); + exists = true; + break; + } + } + if (exists) { + Enums.HackType type = Enums.HackType.valueOf(check); + Check checkObj = type.getCheck(); + + if (checkObj.isEnabled(null, null, null)) { + checkObj.setEnabled(null, false); + String message = Config.messages.getColorfulString("check_disable_message"); + message = ConfigUtils.replaceWithSyntax(isPlayer ? (Player) sender : null, message, type); + sender.sendMessage(message); + } else { + checkObj.setEnabled(null, true); + String message = Config.messages.getColorfulString("check_enable_message"); + message = ConfigUtils.replaceWithSyntax(isPlayer ? (Player) sender : null, message, type); + sender.sendMessage(message); + } + } else { + sender.sendMessage(Config.messages.getColorfulString("non_existing_check")); + } + + } else if (args[0].equalsIgnoreCase("Customer-Support")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + AwarenessNotifications.forcefullySend(sender, "Please wait..."); + + SpartanBukkit.connectionThread.execute(() -> { + Enums.HackType[] hackTypes = Enums.HackType.values(); + Set set = new HashSet<>(hackTypes.length); + + for (Enums.HackType hackType : hackTypes) { + if (hackType.getCheck().getProblematicDetections() > 0) { + set.add(hackType); + } + } + int size = set.size(); + + if (size > 0) { + String discordTag = args[1]; + + for (Enums.HackType hackType : set) { + AwarenessNotifications.forcefullySend(sender, + hackType.getCheck().getName() + ": " + CloudConnections.sendCustomerSupport(discordTag, hackType.toString(), "Identified Problematic Detection") + ); + } + } else { + AwarenessNotifications.forcefullySend(sender, "No problematic checks found, please specify a check name instead. (Example: /spartan customer-support " + Enums.HackType.values()[0] + " DiscordName#0001 Explanation)"); + } + }); + + } else if (isPlayer && args[0].equalsIgnoreCase("Notifications")) { + if (!DetectionNotifications.hasPermission(player)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + String divisorString = args[1]; + + if (AlgebraUtils.validInteger(divisorString)) { + int divisor = Math.min(Integer.parseInt(divisorString), Check.maxViolationsPerCycle); + + if (divisor > 0) { + Integer cachedDivisor = DetectionNotifications.getDivisor(player, true); + + if (cachedDivisor != null && cachedDivisor != divisor) { + DetectionNotifications.change(player, divisor, true); + } else { + DetectionNotifications.toggle(player, divisor); + } + } else { + completeMessage(sender, "moderation"); + } + } else { + completeMessage(sender, "moderation"); + } + + } else { + completeMessage(sender, "default"); + } + } else { // 3 or more arguments + StringBuilder argumentsToStringBuilder = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + String argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); + + if (args[0].equalsIgnoreCase("Kick")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.KICK)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); + return true; + } + SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); + + if (t == null) { + sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); + return true; + } + t.kick(sender, argumentsToString); + + } else if (args[0].equalsIgnoreCase("Warn")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.WARN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); + return true; + } + SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); + + if (t == null) { + sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); + return true; + } + t.warn(sender, argumentsToString); + + } else if (args[0].equalsIgnoreCase("Bypass")) { + boolean noSeconds = args.length == 3; + + if (noSeconds || args.length == 4) { + Enums.HackType[] hackTypes = Enums.HackType.values(); + int maxHackTypes = hackTypes.length; + String[] checks = args[2].split(",", maxHackTypes); + String sec = noSeconds ? null : args[3]; + + if (isPlayer && !Permissions.has((Player) sender, Permission.USE_BYPASS)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); + + if (t == null) { + sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); + return true; + } + List found = new ArrayList<>(maxHackTypes); + + for (String check : checks) { + for (Enums.HackType hackType : hackTypes) { + if (hackType.getCheck().getName().equalsIgnoreCase(check)) { + found.add(hackType); + break; + } + } + } + if (!found.isEmpty()) { + for (Enums.HackType hackType : found) { + int seconds = noSeconds ? 0 : Integer.parseInt(sec); + + if (noSeconds) { + t.getViolations(hackType).addDisableCause("Command-" + sender.getName(), null, 0); + } else { + if (seconds < 1 || seconds > 3600) { + sender.sendMessage(ChatColor.RED + "Seconds must be between 1 and 3600."); + return true; + } + t.getViolations(hackType).addDisableCause("Command-" + sender.getName(), null, seconds * 20); + } + String message = ConfigUtils.replaceWithSyntax(t, Config.messages.getColorfulString("bypass_message"), hackType) + .replace("{time}", noSeconds ? "infinite" : String.valueOf(seconds)); + sender.sendMessage(message); + } + } else { + sender.sendMessage(Config.messages.getColorfulString("non_existing_check")); + } + } else { + completeMessage(sender, "moderation"); + } + } else if (args[0].equalsIgnoreCase("Wave")) { + String command = args[1]; + OfflinePlayer t = Bukkit.getOfflinePlayer(args[2]); + + if (isPlayer && !Permissions.has((Player) sender, Permission.WAVE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + if (command.equalsIgnoreCase("add") && args.length >= 4) { + if (Wave.getWaveList().length >= 100) { + sender.sendMessage(Config.messages.getColorfulString("full_wave_list")); + return true; + } + argumentsToStringBuilder = new StringBuilder(); + for (int i = 3; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); + + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); + return true; + } + String message = Config.messages.getColorfulString("wave_add_message"); + message = ConfigUtils.replaceWithSyntax(t, message, null); + sender.sendMessage(message); + Wave.add(t.getUniqueId(), argumentsToString); // After to allow for further messages to take palce + } else if (command.equalsIgnoreCase("remove")) { + UUID uuid = t.getUniqueId(); + + if (Wave.getCommand(uuid) == null) { + String message = Config.messages.getColorfulString("wave_not_added_message"); + message = ConfigUtils.replaceWithSyntax(t, message, null); + sender.sendMessage(message); + return true; + } + Wave.remove(uuid); + String message = Config.messages.getColorfulString("wave_remove_message"); + message = ConfigUtils.replaceWithSyntax(t, message, null); + sender.sendMessage(message); + } else { + completeMessage(sender, "moderation"); + } + + } else if (args.length == 3 && args[0].equalsIgnoreCase("Customer-Support")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + AwarenessNotifications.forcefullySend(sender, "Please wait..."); + + SpartanBukkit.connectionThread.execute(() -> { + String check = args[1]; + String discordTag = args[2]; + AwarenessNotifications.forcefullySend(sender, CloudConnections.sendCustomerSupport(discordTag, check, "No Provided Description")); + }); + } else if (args.length >= 4) { + argumentsToStringBuilder = new StringBuilder(); + for (int i = 3; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); + + if (args[0].equalsIgnoreCase("Customer-Support")) { + if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { + sender.sendMessage(Config.messages.getColorfulString("failed_command")); // Different reply, do not change + return true; + } + String argumentsToStringThreaded = argumentsToString; + AwarenessNotifications.forcefullySend(sender, "Please wait..."); + + SpartanBukkit.connectionThread.execute(() -> { + String check = args[1]; + String discordTag = args[2]; + AwarenessNotifications.forcefullySend(sender, CloudConnections.sendCustomerSupport(discordTag, check, argumentsToStringThreaded)); + }); + + } else if (Compatibility.CompatibilityType.MinigameMaker.isFunctional() && args[0].equalsIgnoreCase("Add-Incompatible-Item")) { + if (args.length == 6) { + if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + String seconds = args[5]; + + if (AlgebraUtils.validInteger(seconds) && MinigameMaker.addItem(args[1], args[2], args[4], args[3], Math.max(Integer.parseInt(seconds), 1))) { + if (isPlayer) { + InteractiveInventory.supportIncompatibleItems.open(player); + } else { + sender.sendMessage(ChatColor.GREEN + "Incompatible item successfully added."); + } + } else { + Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); + } + } else if (args.length == 5) { + if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + String seconds = args[4]; + + if (AlgebraUtils.validInteger(seconds) && MinigameMaker.addItem(args[1], args[2], args[3], "%spc%", Math.max(Integer.parseInt(seconds), 1))) { + if (isPlayer) { + InteractiveInventory.supportIncompatibleItems.open(player); + } else { + sender.sendMessage(ChatColor.GREEN + "Incompatible item successfully added."); + } + } else { + Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); + } + } else { + Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); + } + } else if (args.length >= 7) { + if (isPlayer && !Permissions.has((Player) sender, Permission.CONDITION)) { + sender.sendMessage(Config.messages.getColorfulString("no_permission")); + return true; + } + SpartanPlayer t = SpartanBukkit.getPlayer(args[0]); + + if (t == null) { + sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); + return true; + } + if (args[1].equalsIgnoreCase("if") && args[5].equalsIgnoreCase("do")) { + final String condition = ConfigUtils.replaceWithSyntax(t, args[2], null); + final String result = ConfigUtils.replaceWithSyntax(t, args[4], null); + + argumentsToStringBuilder = new StringBuilder(); + for (int i = 6; i < args.length; i++) { + argumentsToStringBuilder.append(args[i]).append(" "); + } + final String command = ConfigUtils.replaceWithSyntax(t, argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1), null); + + switch (args[3].toLowerCase()) { + case "equals": + case "=": + if (condition.equalsIgnoreCase(result)) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + break; + case "not-equals": + case "/=": + if (!condition.equalsIgnoreCase(result)) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + break; + case "contains": + if (condition.contains(result)) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + break; + case "is-less-than": + case "<": + if (AlgebraUtils.validInteger(condition) && AlgebraUtils.validInteger(result) && num(condition) < num(result) + || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validDecimal(result) && dbl(condition) < dbl(result) + || AlgebraUtils.validInteger(condition) && AlgebraUtils.validDecimal(result) && num(condition) < dbl(result) + || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validInteger(result) && dbl(condition) < num(result)) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + break; + case "is-greater-than": + case ">": + if (AlgebraUtils.validInteger(condition) && AlgebraUtils.validInteger(result) && num(condition) > num(result) + || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validDecimal(result) && dbl(condition) > dbl(result) + || AlgebraUtils.validInteger(condition) && AlgebraUtils.validDecimal(result) && num(condition) > dbl(result) + || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validInteger(result) && dbl(condition) > num(result)) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + break; + default: + break; + } + } + } else { + completeMessage(sender, "default"); + } + } else { + completeMessage(sender, "default"); + } + } + } + } + } + return false; + } +} diff --git a/src/main/java/com/vagdedes/spartan/interfaces/commands/CommandTab.java b/src/main/java/com/vagdedes/spartan/functionality/command/CommandTab.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/interfaces/commands/CommandTab.java rename to src/main/java/com/vagdedes/spartan/functionality/command/CommandTab.java index c40d6a1..95904a4 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/commands/CommandTab.java +++ b/src/main/java/com/vagdedes/spartan/functionality/command/CommandTab.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.interfaces.commands; +package com.vagdedes.spartan.functionality.command; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -34,6 +34,7 @@ public class CommandTab implements TabCompleter { commands.put("wave run", new Enums.Permission[]{Enums.Permission.WAVE}); commands.put("wave list", new Enums.Permission[]{Enums.Permission.WAVE}); commands.put("customer-support", new Enums.Permission[]{Enums.Permission.ADMIN}); + commands.put("ai-assistance", new Enums.Permission[]{Enums.Permission.ADMIN}); } @Override diff --git a/src/main/java/com/vagdedes/spartan/functionality/configuration/AntiCheatLogs.java b/src/main/java/com/vagdedes/spartan/functionality/configuration/AntiCheatLogs.java index d94105d..b906470 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/configuration/AntiCheatLogs.java +++ b/src/main/java/com/vagdedes/spartan/functionality/configuration/AntiCheatLogs.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.functionality.configuration; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.TimeUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Bukkit; @@ -61,17 +61,27 @@ private static void saveRaw() { private static void storeInFile(boolean playerRelated, String information) { id++; - fileConfiguration.set( + Runnable runnable = () -> fileConfiguration.set( syntaxDate(DateTimeFormatter.ofPattern(dateFormat).format(LocalDateTime.now()), id), information ); if (!playerRelated || (id % 10) == 0) { if (SpartanBukkit.isSynchronised()) { - SpartanBukkit.storageThread.executeIfFreeElseHere(AntiCheatLogs::saveRaw); + SpartanBukkit.dataThread.executeIfFreeElseHere(() -> { + runnable.run(); + saveRaw(); + }); } else { + runnable.run(); saveRaw(); } + } else { + if (SpartanBukkit.isSynchronised()) { + SpartanBukkit.dataThread.executeIfFreeElseHere(runnable); + } else { + runnable.run(); + } } } diff --git a/src/main/java/com/vagdedes/spartan/handlers/connection/DiscordMemberCount.java b/src/main/java/com/vagdedes/spartan/functionality/connection/DiscordMemberCount.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/handlers/connection/DiscordMemberCount.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/DiscordMemberCount.java index d0e97df..577f906 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/connection/DiscordMemberCount.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/DiscordMemberCount.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.handlers.connection; +package com.vagdedes.spartan.functionality.connection; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.RequestUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/Latency.java b/src/main/java/com/vagdedes/spartan/functionality/connection/Latency.java similarity index 81% rename from src/main/java/com/vagdedes/spartan/functionality/protections/Latency.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/Latency.java index 16387f8..e28a5da 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/Latency.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/Latency.java @@ -1,11 +1,11 @@ -package com.vagdedes.spartan.functionality.protections; +package com.vagdedes.spartan.functionality.connection; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import org.bukkit.entity.Player; public class Latency { diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/PlayerLimitPerIP.java b/src/main/java/com/vagdedes/spartan/functionality/connection/PlayerLimitPerIP.java similarity index 92% rename from src/main/java/com/vagdedes/spartan/functionality/protections/PlayerLimitPerIP.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/PlayerLimitPerIP.java index 58c6e14..9786347 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/PlayerLimitPerIP.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/PlayerLimitPerIP.java @@ -1,10 +1,10 @@ -package com.vagdedes.spartan.functionality.protections; +package com.vagdedes.spartan.functionality.connection; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.ConfigUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/AutoUpdater.java b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/AutoUpdater.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/functionality/synchronicity/AutoUpdater.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/cloud/AutoUpdater.java index 73e202b..114d611 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/AutoUpdater.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/AutoUpdater.java @@ -1,8 +1,7 @@ -package com.vagdedes.spartan.functionality.synchronicity; +package com.vagdedes.spartan.functionality.connection.cloud; import com.vagdedes.spartan.Register; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; import com.vagdedes.spartan.utils.java.StringUtils; import java.io.File; @@ -23,7 +22,8 @@ public class AutoUpdater { UPDATE_FAILURE = -2; public static void complete() { - if (fileToReplace != null + if (CloudBase.hasToken() + && fileToReplace != null && downloadedFile != null) { String pluginName = Register.plugin.getName(); @@ -57,7 +57,7 @@ public static boolean downloadFile(String token) { if (!downloadedFile.exists() || downloadedFile.delete()) { - try (InputStream in = new URL(StringUtils.decodeBase64(CloudFeature.downloadWebsite) + token).openStream(); + try (InputStream in = new URL(StringUtils.decodeBase64(CloudBase.downloadWebsite) + token).openStream(); ReadableByteChannel rbc = Channels.newChannel(in); FileOutputStream fos = new FileOutputStream(downloadedFileName)) { diff --git a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudFeature.java b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudBase.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudFeature.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudBase.java index 4791c3a..af5d2ef 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudFeature.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudBase.java @@ -1,17 +1,15 @@ -package com.vagdedes.spartan.functionality.synchronicity.cloud; +package com.vagdedes.spartan.functionality.connection.cloud; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.Piracy; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.AutoUpdater; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.connection.Piracy; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.RequestUtils; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; @@ -22,7 +20,7 @@ import java.io.File; import java.util.*; -public class CloudFeature { +public class CloudBase { // URLs static final String website = "aHR0cHM6Ly93d3cudmFnZGVkZXMuY29tL21pbmVjcmFmdC9jbG91ZC8=", @@ -201,7 +199,7 @@ public static void refresh(boolean independent) { } } } catch (Exception e) { - throwError(e, "OVC:GET"); + throwError(e, "outdatedVersionCheck:GET"); } }; @@ -266,11 +264,11 @@ public static void refresh(boolean independent) { Config.messages.clear(); Config.sql.refreshConfiguration(); Config.compatibility.clear(); - Config.refreshVariables(true); + Config.refreshFields(true); } } } catch (Exception e) { - throwError(e, "ACC:GET"); + throwError(e, "automaticConfigurationChanges:GET"); } }; @@ -298,13 +296,13 @@ public static void refresh(boolean independent) { if (!functionality.equals("NULL")) { AwarenessNotifications.forcefullySend("Customer Support Command: " + - CloudConnections.sendCustomerSupport(null, functionality, "Customer Support Command", true)); + CloudConnections.sendCustomerSupport(null, functionality, "Customer Support Command")); } } } } } catch (Exception e) { - throwError(e, "CSC:GET"); + throwError(e, "customerSupportCommand:GET"); } }; @@ -370,19 +368,19 @@ public static void refresh(boolean independent) { allDisabledDetections.put(hackType, allDetections.toArray(new String[0])); } } - CloudFeature.disabledDetections.clear(); - CloudFeature.disabledDetections.putAll(disabledDetections); - CloudFeature.specificDisabledDetections.clear(); - CloudFeature.specificDisabledDetections.putAll(hiddenDisabledDetections); - CloudFeature.allDisabledDetections.clear(); - CloudFeature.allDisabledDetections.putAll(allDisabledDetections); + CloudBase.disabledDetections.clear(); + CloudBase.disabledDetections.putAll(disabledDetections); + CloudBase.specificDisabledDetections.clear(); + CloudBase.specificDisabledDetections.putAll(hiddenDisabledDetections); + CloudBase.allDisabledDetections.clear(); + CloudBase.allDisabledDetections.putAll(allDisabledDetections); } else { - CloudFeature.disabledDetections.clear(); - CloudFeature.specificDisabledDetections.clear(); - CloudFeature.allDisabledDetections.clear(); + CloudBase.disabledDetections.clear(); + CloudBase.specificDisabledDetections.clear(); + CloudBase.allDisabledDetections.clear(); } } catch (Exception e) { - throwError(e, "DD:GET"); + throwError(e, "disabledDetections:GET"); } }; diff --git a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudConnections.java b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudConnections.java similarity index 76% rename from src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudConnections.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudConnections.java index 2128796..04dd2fe 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/cloud/CloudConnections.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CloudConnections.java @@ -1,25 +1,21 @@ -package com.vagdedes.spartan.functionality.synchronicity.cloud; +package com.vagdedes.spartan.functionality.connection.cloud; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.performance.FalsePositiveDetection; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.handlers.connection.DiscordMemberCount; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.CancelViolation; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.profiling.PlayerViolation; -import com.vagdedes.spartan.objects.profiling.ViolationHistory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.profiling.PlayerViolation; +import com.vagdedes.spartan.abstraction.profiling.ViolationHistory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.DiscordMemberCount; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.CancelViolation; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.java.RequestUtils; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; @@ -60,13 +56,13 @@ public static int getUserIdentification() { } if (!name.isEmpty()) { - String[] reply = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.accountWebsite) + "?token=" + name); + String[] reply = RequestUtils.get(StringUtils.decodeBase64(CloudBase.accountWebsite) + "?token=" + name); if (reply.length > 0) { String line = reply[0]; if (AlgebraUtils.validInteger(line)) { - CloudFeature.token = name; + CloudBase.token = name; return Integer.parseInt(line); } } @@ -79,11 +75,11 @@ public static int getUserIdentification() { // Separator - String[] reply = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + String[] reply = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?action=get" + "&data=userIdentification" - + "&version=" + CloudFeature.version - + (!CloudFeature.identification.isEmpty() ? "&" + CloudFeature.identification : ""), + + "&version=" + CloudBase.version + + (!CloudBase.identification.isEmpty() ? "&" + CloudBase.identification : ""), RequestUtils.defaultTimeOut / 2); if (reply.length > 0) { @@ -94,7 +90,7 @@ public static int getUserIdentification() { } } } catch (Exception e) { - CloudFeature.throwError(e, "userIdentification:GET"); + CloudBase.throwError(e, "userIdentification:GET"); return 0; } return -1; @@ -105,32 +101,32 @@ public static void logServerSpecifications() { Runtime runtime = Runtime.getRuntime(); String motd = StringUtils.getClearColorString(Bukkit.getMotd()); - String specs = MultiVersion.versionString() + CloudFeature.separator - + Bukkit.getPort() + CloudFeature.separator - + runtime.availableProcessors() + CloudFeature.separator - + (runtime.totalMemory() / Cache.gradeDivisor / Cache.gradeDivisor) + CloudFeature.separator - + Register.manager.getPlugins().length + CloudFeature.separator + String specs = MultiVersion.versionString() + CloudBase.separator + + Bukkit.getPort() + CloudBase.separator + + runtime.availableProcessors() + CloudBase.separator + + (runtime.totalMemory() / 1024 / 1024) + CloudBase.separator + + Register.manager.getPlugins().length + CloudBase.separator + Base64.getEncoder().encodeToString(motd.getBytes()); try { - RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification + "&action=add&data=serverSpecifications" - + "&value=" + URLEncoder.encode(specs, "UTF-8") + "&version=" + CloudFeature.version); + RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + "&action=add&data=serverSpecifications" + + "&value=" + URLEncoder.encode(specs, "UTF-8") + "&version=" + CloudBase.version); } catch (Exception e) { - CloudFeature.throwError(e, "serverSpecifications:ADD"); + CloudBase.throwError(e, "serverSpecifications:ADD"); } }); } public static boolean ownsProduct(String productID) { // Once try { - String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification - + "&action=get&data=ownsProduct&version=" + CloudFeature.version + "&value=" + productID); + String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + + "&action=get&data=ownsProduct&version=" + CloudBase.version + "&value=" + productID); if (results.length > 0) { return results[0].equals("true"); } } catch (Exception e) { - CloudFeature.throwError(e, "ownsProduct:GET"); + CloudBase.throwError(e, "ownsProduct:GET"); } return false; } @@ -140,9 +136,9 @@ public static boolean ownsProduct(String productID) { // Once public static String[] getCrossServerInformation(String type, String name) { // Doesn't need ID validation due to its validated method call try { - String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification - + "&action=get&data=crossServerInformation&version=" + CloudFeature.version - + "&value=" + URLEncoder.encode(Bukkit.getPort() + CloudFeature.separator + type + (name != null ? (CloudFeature.separator + name) : ""), "UTF-8"), + String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + + "&action=get&data=crossServerInformation&version=" + CloudBase.version + + "&value=" + URLEncoder.encode(Bukkit.getPort() + CloudBase.separator + type + (name != null ? (CloudBase.separator + name) : ""), "UTF-8"), "GET", null, RequestUtils.defaultTimeOut / 2); if (results.length > 0) { @@ -156,27 +152,27 @@ public static String[] getCrossServerInformation(String type, String name) { return new String[]{}; } } catch (Exception e) { - CloudFeature.throwError(e, "crossServerInformation:GET"); + CloudBase.throwError(e, "crossServerInformation:GET"); return new String[]{}; } } public static String[][] getStaffAnnouncements() { // Once try { - String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification - + "&action=get&data=staffAnnouncements&version=" + CloudFeature.version); + String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + + "&action=get&data=staffAnnouncements&version=" + CloudBase.version); if (results.length > 0) { - String[] announcements = results[0].split(CloudFeature.separator); + String[] announcements = results[0].split(CloudBase.separator); String[][] array = new String[results.length][0]; for (int i = 0; i < announcements.length; i++) { - array[i] = StringUtils.decodeBase64(announcements[i]).split(CloudFeature.separator); + array[i] = StringUtils.decodeBase64(announcements[i]).split(CloudBase.separator); } return array; } } catch (Exception e) { - CloudFeature.throwError(e, "staffAnnouncements:GET"); + CloudBase.throwError(e, "staffAnnouncements:GET"); } return new String[][]{}; } @@ -187,26 +183,26 @@ public static void sendCrossServerInformation(String type, String name, String[] StringBuilder information = new StringBuilder(); for (String string : array) { - information.append(StringUtils.encodeBase64(string)).append(CloudFeature.separator); + information.append(StringUtils.encodeBase64(string)).append(CloudBase.separator); } int length = information.length(); - int separatorLength = CloudFeature.separator.length(); + int separatorLength = CloudBase.separator.length(); if (length > separatorLength) { information = new StringBuilder(information.substring(0, length - separatorLength)); - RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + " " + - CloudFeature.identification + "&action=add&data=crossServerInformation&version=" + CloudFeature.version - + "&value=" + URLEncoder.encode(Bukkit.getPort() + CloudFeature.separator + type + CloudFeature.separator + name + CloudFeature.separator + information, "UTF-8"), + RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + " " + + CloudBase.identification + "&action=add&data=crossServerInformation&version=" + CloudBase.version + + "&value=" + URLEncoder.encode(Bukkit.getPort() + CloudBase.separator + type + CloudBase.separator + name + CloudBase.separator + information, "UTF-8"), "POST", null, RequestUtils.defaultTimeOut / 2); } } catch (Exception e) { - CloudFeature.throwError(e, "crossServerInformation:ADD"); + CloudBase.throwError(e, "crossServerInformation:ADD"); } } static void punishPlayers() { // Doesn't need ID validation due to its validated method call - if (FalsePositiveDetection.canFunction()) { + if (Config.settings.getBoolean(Settings.falsePositiveDetection)) { StringBuilder value = new StringBuilder(); for (PlayerProfile playerProfile : ResearchEngine.getHackers()) { @@ -229,21 +225,21 @@ static void punishPlayers() { } else { ipAddress = "NULL"; } - value.append(StringUtils.encodeBase64(uuid + CloudFeature.separator + ipAddress)).append(CloudFeature.separator); + value.append(StringUtils.encodeBase64(uuid + CloudBase.separator + ipAddress)).append(CloudBase.separator); } } } if (value.length() > 0) { - value = new StringBuilder(value.substring(0, value.length() - CloudFeature.separator.length())); + value = new StringBuilder(value.substring(0, value.length() - CloudBase.separator.length())); try { - RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + " " + - CloudFeature.identification + "&action=add&data=punishedPlayers&version=" + CloudFeature.version + RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + " " + + CloudBase.identification + "&action=add&data=punishedPlayers&version=" + CloudBase.version + "&value=" + URLEncoder.encode(value.toString(), "UTF-8"), "POST"); } catch (Exception e) { - CloudFeature.throwError(e, "punishedPlayers:ADD"); + CloudBase.throwError(e, "punishedPlayers:ADD"); } } } @@ -254,11 +250,11 @@ public static void updatePunishedPlayer(UUID uuid, String ipAddress) { ipAddress = "NULL"; } try { - RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification + "&action=get&data=punishedPlayers&version=" + CloudFeature.version - + "&value=" + URLEncoder.encode(uuid + CloudFeature.separator + ipAddress, "UTF-8"), + RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + "&action=get&data=punishedPlayers&version=" + CloudBase.version + + "&value=" + URLEncoder.encode(uuid + CloudBase.separator + ipAddress, "UTF-8"), RequestUtils.minimumTimeOut); } catch (Exception e) { - CloudFeature.throwError(e, "punishedPlayers:GET"); + CloudBase.throwError(e, "punishedPlayers:GET"); } } @@ -274,23 +270,23 @@ public static void executeDiscordWebhook(String webhook, UUID uuid, String name, try { int webhookVersion = 2; String crossServerInformationOption = CrossServerInformation.getOptionValue(); - RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + "?" + CloudFeature.identification - + "&action=add&data=discordWebhooks&version=" + CloudFeature.version + "&value=" + RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + + "&action=add&data=discordWebhooks&version=" + CloudBase.version + "&value=" + URLEncoder.encode( - webhookVersion + CloudFeature.separator - + url + CloudFeature.separator - + color + CloudFeature.separator - + (CrossServerInformation.isOptionValid(crossServerInformationOption) ? crossServerInformationOption : "NULL") + CloudFeature.separator - + name + CloudFeature.separator - + uuid + CloudFeature.separator - + x + CloudFeature.separator - + y + CloudFeature.separator - + z + CloudFeature.separator - + StringUtils.getClearColorString(type) + CloudFeature.separator - + StringUtils.getClearColorString(information) + CloudFeature.separator + webhookVersion + CloudBase.separator + + url + CloudBase.separator + + color + CloudBase.separator + + (CrossServerInformation.isOptionValid(crossServerInformationOption) ? crossServerInformationOption : "NULL") + CloudBase.separator + + name + CloudBase.separator + + uuid + CloudBase.separator + + x + CloudBase.separator + + y + CloudBase.separator + + z + CloudBase.separator + + StringUtils.getClearColorString(type) + CloudBase.separator + + StringUtils.getClearColorString(information) + CloudBase.separator + Config.settings.getBoolean(Settings.showEcosystemOption), "UTF-8")); } catch (Exception e) { - CloudFeature.throwError(e, "discordWebhooks:ADD"); + CloudBase.throwError(e, "discordWebhooks:ADD"); } }; @@ -305,9 +301,21 @@ public static void executeDiscordWebhook(String webhook, UUID uuid, String name, // Manual + public static String getAiAssistance(String question) { + try { + String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + "?" + CloudBase.identification + + "&action=get&data=aiAssistance&version=" + CloudBase.version + "&value=" + + URLEncoder.encode(question, "UTF-8")); + return results.length > 0 ? results[0] : null; + } catch (Exception e) { + CloudBase.throwError(e, "aiAssistance:GET"); + return null; + } + } + private static String sendCustomerSupport(String contactPlatform, String contactInformation, String columnType, String columnInformation, - String userInformation, boolean local) { + String userInformation) { String name = null; if (contactInformation == null) { @@ -332,7 +340,7 @@ private static String sendCustomerSupport(String contactPlatform, String contact String checkName = check.getName(); if (check.toString().equals(columnInformation) || checkName.equalsIgnoreCase(columnInformation)) { - ViolationHistory violationHistory = ResearchEngine.getViolationHistory(hackType, ResearchEngine.DataType.Universal, ResearchEngine.getLegitimatePlayers()); + ViolationHistory violationHistory = ResearchEngine.getViolationHistory(hackType, Enums.DataType.Universal, ResearchEngine.getLegitimatePlayers()); if (violationHistory == null) { return "No useful information was found for this check, try again later."; @@ -354,7 +362,7 @@ private static String sendCustomerSupport(String contactPlatform, String contact .append(newLine); softwareInformation.append("Punishments: ").append(check.canPunish) .append(newLine); - softwareInformation.append("Cancel Violation: ").append(CancelViolation.get(hackType, ResearchEngine.DataType.Universal)) + softwareInformation.append("Cancel Violation: ").append(CancelViolation.get(hackType, Enums.DataType.Universal)) .append(newLine); softwareInformation.append("Violation Count: ").append(violationHistory.getCount()) .append(newLine); @@ -481,12 +489,12 @@ private static String sendCustomerSupport(String contactPlatform, String contact .append("Problematic Detections: ").append(check.getProblematicDetections()); try { - String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudFeature.website) + " " + CloudFeature.identification - + "&action=add&data=customerSupport&version=" + CloudFeature.version + String[] results = RequestUtils.get(StringUtils.decodeBase64(CloudBase.website) + " " + CloudBase.identification + + "&action=add&data=customerSupport&version=" + CloudBase.version + "&value=" + URLEncoder.encode( - contactPlatform + CloudFeature.separator + contactInformation + CloudFeature.separator - + columnType + CloudFeature.separator + columnInformation + CloudFeature.separator - + userInformation + CloudFeature.separator + softwareInformation, + contactPlatform + CloudBase.separator + contactInformation + CloudBase.separator + + columnType + CloudBase.separator + columnInformation + CloudBase.separator + + userInformation + CloudBase.separator + softwareInformation, "UTF-8"), "POST"); if (results.length > 0) { @@ -500,7 +508,7 @@ private static String sendCustomerSupport(String contactPlatform, String contact } return "No results were returned from the server, try updating and reach support if this continues."; } catch (Exception e) { - CloudFeature.throwError(e, "customerSupport:ADD"); + CloudBase.throwError(e, "customerSupport:ADD"); return "A programming exception has occurred, reach support if this continues."; } } @@ -508,12 +516,11 @@ private static String sendCustomerSupport(String contactPlatform, String contact return "Check not found, check your arguments."; } - public static String sendCustomerSupport(String contactInformation, String columnInformation, String userInformation, boolean local) { + public static String sendCustomerSupport(String contactInformation, String columnInformation, String userInformation) { return sendCustomerSupport( "discord", contactInformation, "functionality", columnInformation, - userInformation, - local + userInformation ); } } diff --git a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/CrossServerInformation.java b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CrossServerInformation.java similarity index 92% rename from src/main/java/com/vagdedes/spartan/functionality/synchronicity/CrossServerInformation.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CrossServerInformation.java index cb18e94..e9d725e 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/CrossServerInformation.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/CrossServerInformation.java @@ -1,13 +1,11 @@ -package com.vagdedes.spartan.functionality.synchronicity; +package com.vagdedes.spartan.functionality.connection.cloud; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.ConfigUtils; @@ -49,7 +47,7 @@ public class CrossServerInformation { if (incomingInformation.length > 0) { for (String information : incomingInformation) { - String[] split = information.split(CloudFeature.separator, 4); + String[] split = information.split(CloudBase.separator, 4); if (split.length == 3) { File file = new File(split[0]); @@ -79,7 +77,7 @@ public class CrossServerInformation { } } } - Config.refreshVariables(false); + Config.refreshFields(false); Config.createConfigurations(true); } @@ -121,7 +119,7 @@ public class CrossServerInformation { if (!notificationPlayers.isEmpty() && incomingInformation.length > 0) { for (String information : incomingInformation) { - String[] split = information.split(CloudFeature.separator, 3); + String[] split = information.split(CloudBase.separator, 3); if (split.length == 2) { String notification = "§3(" + split[0] + ")§f " + split[1]; @@ -243,7 +241,7 @@ public static void sendConfiguration(File file) { for (String key : keys) { Object value = configuration.get(key); - list.add(file.getPath() + CloudFeature.separator + key + CloudFeature.separator + (value == null ? "NULL" : value.toString())); + list.add(file.getPath() + CloudBase.separator + key + CloudBase.separator + (value == null ? "NULL" : value.toString())); } synchronized (configurations) { configurations.addAll(list); diff --git a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/DiscordWebhooks.java b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/DiscordWebhooks.java similarity index 85% rename from src/main/java/com/vagdedes/spartan/functionality/synchronicity/DiscordWebhooks.java rename to src/main/java/com/vagdedes/spartan/functionality/connection/cloud/DiscordWebhooks.java index f4215df..5bced44 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/synchronicity/DiscordWebhooks.java +++ b/src/main/java/com/vagdedes/spartan/functionality/connection/cloud/DiscordWebhooks.java @@ -1,6 +1,4 @@ -package com.vagdedes.spartan.functionality.synchronicity; - -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; +package com.vagdedes.spartan.functionality.connection.cloud; import java.util.UUID; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/BouncingBlocks.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/BouncingBlocks.java similarity index 85% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/BouncingBlocks.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/BouncingBlocks.java index 3b0160c..e3a0b60 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/BouncingBlocks.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/BouncingBlocks.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.predictable; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; public class BouncingBlocks { diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/Explosion.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Explosion.java similarity index 84% rename from src/main/java/com/vagdedes/spartan/functionality/protections/Explosion.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Explosion.java index b00ddc2..da8bb5e 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/Explosion.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Explosion.java @@ -1,12 +1,12 @@ -package com.vagdedes.spartan.functionality.protections; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; + +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import org.bukkit.Location; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/FloorProtection.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/FloorProtection.java similarity index 90% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/FloorProtection.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/FloorProtection.java index d9b62ec..346690c 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/FloorProtection.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/FloorProtection.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.predictable; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import org.bukkit.entity.Entity; import org.bukkit.entity.Firework; import org.bukkit.event.entity.EntityDamageEvent; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/GroundCollision.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/GroundCollision.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/GroundCollision.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/GroundCollision.java index b7e2baf..c054167 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/GroundCollision.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/GroundCollision.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.predictable; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.MoveUtils; public class GroundCollision { diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/Liquid.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Liquid.java similarity index 83% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/Liquid.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Liquid.java index a77ef85..9bcb415 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/Liquid.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/Liquid.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.predictable; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.gameplay.PatternUtils; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/WaterElevator.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/WaterElevator.java similarity index 80% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/WaterElevator.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/WaterElevator.java index 453c9d3..128e790 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/predictable/WaterElevator.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/predictable/WaterElevator.java @@ -1,10 +1,10 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.predictable; +package com.vagdedes.spartan.functionality.identifiers.complex.predictable; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Damage.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Damage.java similarity index 94% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Damage.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Damage.java index f0ac0e7..971b4f3 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Damage.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Damage.java @@ -1,14 +1,14 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; +import com.vagdedes.spartan.abstraction.data.Buffer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.damage.NoHitDelay; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.data.Buffer; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.PlayerData; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.*; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ElytraUse.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ElytraUse.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ElytraUse.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ElytraUse.java index 097d773..60bfc7a 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ElytraUse.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ElytraUse.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.exploits.Exploits; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.server.MaterialUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ExtremeCollision.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ExtremeCollision.java similarity index 71% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ExtremeCollision.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ExtremeCollision.java index b8549dc..1f5b19c 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/ExtremeCollision.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/ExtremeCollision.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.PlayerData; public class ExtremeCollision { diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Piston.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Piston.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Piston.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Piston.java index 3d219dd..2bdb80e 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Piston.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Piston.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/TridentUse.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/TridentUse.java similarity index 81% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/TridentUse.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/TridentUse.java index 1b192ff..ee5967a 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/TridentUse.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/TridentUse.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Velocity.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Velocity.java similarity index 75% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Velocity.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Velocity.java index fb712fc..4f526a5 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/complex/unpredictable/Velocity.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/complex/unpredictable/Velocity.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.handlers.identifiers.complex.unpredictable; +package com.vagdedes.spartan.functionality.identifiers.complex.unpredictable; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/Building.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/Building.java similarity index 82% rename from src/main/java/com/vagdedes/spartan/functionality/protections/Building.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/Building.java index 92e7f63..451f0f3 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/Building.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/Building.java @@ -1,15 +1,15 @@ -package com.vagdedes.spartan.functionality.protections; +package com.vagdedes.spartan.functionality.identifiers.simple; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.data.Timer; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.exploits.Exploits; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.data.Timer; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.functionality.server.TestServer; import me.vagdedes.spartan.system.Enums; import org.bukkit.block.BlockFace; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/DetectionLocation.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/DetectionLocation.java similarity index 88% rename from src/main/java/com/vagdedes/spartan/handlers/stability/DetectionLocation.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/DetectionLocation.java index cce8aab..e0838ac 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/DetectionLocation.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/DetectionLocation.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.identifiers.simple; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.MoveUtils; diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/SensitiveBlockBreak.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/SensitiveBlockBreak.java similarity index 57% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/SensitiveBlockBreak.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/SensitiveBlockBreak.java index 8b5c790..6beeeff 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/SensitiveBlockBreak.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/SensitiveBlockBreak.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.handlers.identifiers.simple; +package com.vagdedes.spartan.functionality.identifiers.simple; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.utils.gameplay.BlockUtils; public class SensitiveBlockBreak { diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/VehicleAccess.java b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/VehicleAccess.java similarity index 91% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/VehicleAccess.java rename to src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/VehicleAccess.java index 0a46672..0ebd2e6 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/VehicleAccess.java +++ b/src/main/java/com/vagdedes/spartan/functionality/identifiers/simple/VehicleAccess.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.handlers.identifiers.simple; +package com.vagdedes.spartan.functionality.identifiers.simple; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; diff --git a/src/main/java/com/vagdedes/spartan/functionality/important/Permissions.java b/src/main/java/com/vagdedes/spartan/functionality/important/Permissions.java deleted file mode 100644 index fef44d1..0000000 --- a/src/main/java/com/vagdedes/spartan/functionality/important/Permissions.java +++ /dev/null @@ -1,258 +0,0 @@ -package com.vagdedes.spartan.functionality.important; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; -import me.vagdedes.spartan.system.Enums; -import org.bukkit.entity.Player; - -import java.util.*; - -public class Permissions { - - private static final String alternativeAdminKey = "spartan.*"; - private static final Map> perm = new LinkedHashMap<>(Config.getMaxPlayers()); - private static final Map> bypass = new LinkedHashMap<>(Config.getMaxPlayers()); - private static boolean API = false; - - private static final Enums.Permission[] staffPermissions = new Enums.Permission[]{ - Enums.Permission.STAFF_CHAT, Enums.Permission.WAVE, Enums.Permission.WARN, - Enums.Permission.ADMIN, Enums.Permission.KICK, Enums.Permission.NOTIFICATIONS, - Enums.Permission.USE_BYPASS, Enums.Permission.MANAGE, Enums.Permission.INFO, - }; - - public static boolean isCacheEnabled() { - return Config.settings.getBoolean(Settings.permissionOption); - } - - public static void clear() { - perm.clear(); - bypass.clear(); - API = false; - } - - // Separator - - public static void add(Player p, Enums.Permission permission) { - API = true; - UUID uuid = p.getUniqueId(); - - if (permission == Enums.Permission.BYPASS) { - Map map = bypass.get(uuid); - - if (map == null) { - map = new LinkedHashMap<>(Enums.HackType.values().length); - map.put(null, true); - bypass.put(uuid, map); - } else { - map.put(null, true); - } - } else { - Map map = perm.get(uuid); - - if (map == null) { - map = new LinkedHashMap<>(Enums.Permission.values().length); - map.put(permission, true); - perm.put(uuid, map); - } else { - map.put(permission, true); - } - } - } - - // Separator - - public static boolean has(SpartanPlayer p) { - Player n = p.getPlayer(); - return n != null && n.isOnline() && has(n); - } - - public static boolean has(Player p) { - for (Enums.Permission permission : Enums.Permission.values()) { - if (has(p, permission)) { - return true; - } - } - return false; - } - - // Separator - - public static boolean has(SpartanPlayer p, Enums.Permission permission) { - Player n = p.getPlayer(); - return n != null && n.isOnline() && has(n, permission); - } - - public static boolean has(Player p, Enums.Permission permission) { - if (permission == Enums.Permission.BYPASS) { - return isBypassing(p, null); - } - if (Config.settings.exists("Important.enable_permissions") && !Config.settings.getBoolean("Important.enable_permissions")) { - return true; - } - Enums.Permission admin = Enums.Permission.ADMIN; - - if (TestServer.isIdentified() || !isCacheEnabled()) { - if (p.hasPermission(permission.getKey())) { - return true; - } - if (API) { - UUID uuid = p.getUniqueId(); - Map map = perm.get(uuid); - - if (map != null) { - Boolean bool = map.get(permission); - - if (bool != null && bool) { - return true; - } - } - } - if (permission != admin ? p.hasPermission(Enums.Permission.ADMIN.getKey()) || p.hasPermission(alternativeAdminKey) : - p.hasPermission(alternativeAdminKey)) { // If it's the admin permission and it's false (at this stage it is), then we check the other admin permission - return true; - } - return false; - } - UUID uuid = p.getUniqueId(); - Map map = perm.get(uuid); - - if (map != null) { - Boolean bool = map.get(permission); - - if (bool != null) { - return bool; - } - } else { - map = new LinkedHashMap<>(Enums.Permission.values().length); - perm.put(uuid, map); - } - boolean hasPermission = p.hasPermission(permission.getKey()); - boolean adminPermission = permission == admin; - - if (adminPermission) { - if (!hasPermission) { - hasPermission = p.hasPermission(alternativeAdminKey); - } - } else if (!hasPermission) { - Boolean bool = map.get(admin); - - if (bool == null) { - hasPermission = p.hasPermission(Enums.Permission.ADMIN.getKey()) || p.hasPermission(alternativeAdminKey); - map.put(admin, hasPermission); - } else { - hasPermission = bool; - } - } - map.put(permission, hasPermission); - return hasPermission; - } - - // Separator - - public static boolean isBypassing(SpartanPlayer p, Enums.HackType hackType) { - if (p.isOp()) { - return Config.settings.getBoolean("Important.op_bypass"); - } - Player n = p.getPlayer(); - return n != null && n.isOnline() - && (isBypassing(n, null) - || hackType != null && isBypassing(n, hackType)); - } - - public static boolean isBypassing(Player p, Enums.HackType hackType) { - if (Config.settings.exists("Important.enable_permissions") && !Config.settings.getBoolean("Important.enable_permissions")) { - return true; - } - String key = Enums.Permission.BYPASS.getKey() + (hackType != null ? "." + hackType.toString().toLowerCase() : ""); - - if (TestServer.isIdentified() || !isCacheEnabled()) { - if (p.hasPermission(key)) { - return true; - } - if (API) { - Map map = bypass.get(p.getUniqueId()); - - if (map != null && map.containsKey(hackType)) { // We use containsKey because the key can be null - return map.get(hackType); - } - } - return false; - } - UUID uuid = p.getUniqueId(); - Map map = bypass.get(uuid); - - if (map != null) { - if (map.containsKey(hackType)) { // We use containsKey because the key can be null - return map.get(hackType); - } - } else { - map = new LinkedHashMap<>(Enums.HackType.values().length); - bypass.put(uuid, map); - } - boolean has = p.hasPermission(key); - map.put(hackType, has); - return has; - } - - // Separator - - public static void remove(SpartanPlayer p) { - remove(p.uuid); - } - - public static void remove(UUID uuid) { - perm.remove(uuid); - bypass.remove(uuid); - } - - // Separator - - public static boolean isStaff(SpartanPlayer player) { - if (player.isOp()) { - return true; - } - boolean cache = !TestServer.isIdentified() && isCacheEnabled(); - UUID uuid = player.uuid; - - for (Enums.Permission permission : staffPermissions) { - if (cache) { - Map map = perm.get(uuid); - - if (map != null) { - Boolean bool = map.get(permission); - - if (bool != null && bool) { - return true; - } - } - } else { - Player realPlayer = player.getPlayer(); - - if (realPlayer != null && realPlayer.isOnline() && realPlayer.hasPermission(permission.getKey())) { - return true; - } - } - } - return false; - } - - public static List getStaff() { - List players = SpartanBukkit.getPlayers(); - int size = players.size(); - - if (size > 0) { - List array = new ArrayList<>(size); - - for (SpartanPlayer player : players) { - if (isStaff(player)) { - array.add(player); - } - } - return array; - } - return new ArrayList<>(0); - } -} diff --git a/src/main/java/com/vagdedes/spartan/gui/SpartanMenu.java b/src/main/java/com/vagdedes/spartan/functionality/inventory/InteractiveInventory.java similarity index 50% rename from src/main/java/com/vagdedes/spartan/gui/SpartanMenu.java rename to src/main/java/com/vagdedes/spartan/functionality/inventory/InteractiveInventory.java index f142c1a..ae0fbdd 100644 --- a/src/main/java/com/vagdedes/spartan/gui/SpartanMenu.java +++ b/src/main/java/com/vagdedes/spartan/functionality/inventory/InteractiveInventory.java @@ -1,12 +1,12 @@ -package com.vagdedes.spartan.gui; +package com.vagdedes.spartan.functionality.inventory; -import com.vagdedes.spartan.abstraction.InventoryMenu; -import com.vagdedes.spartan.gui.configuration.ManageChecks; -import com.vagdedes.spartan.gui.info.PlayerInfo; -import com.vagdedes.spartan.gui.spartan.MainMenu; -import com.vagdedes.spartan.gui.spartan.SupportIncompatibleItems; +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.inventory.implementation.MainMenu; +import com.vagdedes.spartan.abstraction.inventory.implementation.ManageChecks; +import com.vagdedes.spartan.abstraction.inventory.implementation.PlayerInfo; +import com.vagdedes.spartan.abstraction.inventory.implementation.SupportIncompatibleItems; -public class SpartanMenu { +public class InteractiveInventory { public static final ManageChecks manageChecks = new ManageChecks(); public static final MainMenu mainMenu = new MainMenu(); diff --git a/src/main/java/com/vagdedes/spartan/gui/helpers/PlayerStateLists.java b/src/main/java/com/vagdedes/spartan/functionality/inventory/PlayerStateLists.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/gui/helpers/PlayerStateLists.java rename to src/main/java/com/vagdedes/spartan/functionality/inventory/PlayerStateLists.java index 6fdd036..b32e5bb 100644 --- a/src/main/java/com/vagdedes/spartan/gui/helpers/PlayerStateLists.java +++ b/src/main/java/com/vagdedes/spartan/functionality/inventory/PlayerStateLists.java @@ -1,9 +1,9 @@ -package com.vagdedes.spartan.gui.helpers; +package com.vagdedes.spartan.functionality.inventory; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; import com.vagdedes.spartan.utils.server.InventoryUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.inventory.Inventory; diff --git a/src/main/java/com/vagdedes/spartan/functionality/inventory/Summary.java b/src/main/java/com/vagdedes/spartan/functionality/inventory/Summary.java new file mode 100644 index 0000000..1d2fb45 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/functionality/inventory/Summary.java @@ -0,0 +1,103 @@ +package com.vagdedes.spartan.functionality.inventory; + +import com.vagdedes.spartan.abstraction.functionality.StatisticalProgress; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.utils.math.AlgebraUtils; +import com.vagdedes.spartan.utils.server.InventoryUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class Summary { + + public static List get() { + int arraySize = 20; + double players; + List array = new ArrayList<>(arraySize), + statisticsArray = new ArrayList<>(arraySize); + StatisticalProgress object = ResearchEngine.getProgress(); + + if (object.logs > 0) { + List playerProfiles = ResearchEngine.getPlayerProfiles(); + players = playerProfiles.size(); // purposely double to help with the divisions + + if (players > 0) { + Collection staffOnline = object.getStaffOnline(); + int hackers = ResearchEngine.getHackers().size(), + suspectedPlayers = ResearchEngine.getSuspectedPlayers().size(), + legitimates = ResearchEngine.getLegitimatePlayers().size(), + staffOnlineAmount = staffOnline.size(); + + // Separator + + if (hackers > 0) { + statisticsArray.add("§c" + AlgebraUtils.integerRound((hackers / players) * 100.0) + "§r§c% §7of players are §chackers"); + } + if (suspectedPlayers > 0) { + statisticsArray.add("§c" + AlgebraUtils.integerRound((suspectedPlayers / players) * 100.0) + "§r§c% §7of players are §csuspected"); + } + if (legitimates > 0) { + statisticsArray.add("§c" + AlgebraUtils.integerRound((legitimates / players) * 100.0) + "§r§c% §7of players are §clegitimate"); + } + if (object.kicks > 0 + || object.warnings > 0 + || object.punishments > 0) { + statisticsArray.add("§c" + object.kicks + " §r§c" + (object.kicks == 1 ? "kick" : "kicks") + + "§7, §c" + object.warnings + " §r§c" + (object.warnings == 1 ? "warning" : "warnings") + + " §7& §c" + object.punishments + " §r§c" + (object.punishments == 1 ? "punishment" : "punishments") + + " §7executed"); + } + if (object.mines > 0) { + statisticsArray.add("§c" + object.mines + " ore " + (object.mines == 1 ? "block" : "§r§cblocks") + " have been §cmined"); + } + if (staffOnlineAmount > 0) { + int counter = 10; + + if (!statisticsArray.isEmpty()) { + statisticsArray.add(""); + } + statisticsArray.add("§c" + staffOnlineAmount + " §7staff " + (staffOnlineAmount == 1 ? "player is" : "players are") + " §conline§8:"); + + if (staffOnlineAmount > counter) { + counter = 0; + + for (SpartanPlayer player : staffOnline) { + statisticsArray.add("§c" + player.name); + counter++; + + if (counter == 10) { + break; + } + } + } else { + for (SpartanPlayer player : staffOnline) { + statisticsArray.add("§c" + player.name); + } + } + } + } + } else { + players = 0.0; + } + + // Separator + InventoryUtils.prepareDescription(array, "Important Information"); + + // Separator + if (players > 0.0) { + array.add("§7Data from §4" + ((int) players) + " stored " + (players == 1 ? "player" : "players") + "§8:"); + } else { + array.add("§7Data from §4stored players§8:"); + } + + if (!statisticsArray.isEmpty()) { + array.addAll(statisticsArray); + } else { + array.add("§7" + PlayerStateLists.noDataAvailable); + } + return array; + } +} diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/Cache.java b/src/main/java/com/vagdedes/spartan/functionality/management/Cache.java similarity index 68% rename from src/main/java/com/vagdedes/spartan/handlers/stability/Cache.java rename to src/main/java/com/vagdedes/spartan/functionality/management/Cache.java index 611254b..2605136 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/Cache.java +++ b/src/main/java/com/vagdedes/spartan/functionality/management/Cache.java @@ -1,18 +1,16 @@ -package com.vagdedes.spartan.handlers.stability; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; +package com.vagdedes.spartan.functionality.management; + +import com.vagdedes.spartan.abstraction.check.Threads; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.connection.cloud.AutoUpdater; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.identifiers.simple.DetectionLocation; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.protections.ReconnectCooldown; -import com.vagdedes.spartan.functionality.synchronicity.AutoUpdater; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.handlers.tracking.CombatProcessing; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Threads; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.functionality.tracking.CombatProcessing; import com.vagdedes.spartan.utils.gameplay.PlayerData; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Player; @@ -22,8 +20,6 @@ public class Cache { private static final List memory = Collections.synchronizedList(new ArrayList<>()); - public static final int gradeDivisor = 1024; - public static final boolean enoughRAM = (Runtime.getRuntime().maxMemory() / gradeDivisor / gradeDivisor) >= 900; public static void clearCheckCache(SpartanPlayer p) { for (Enums.HackType hackType : Enums.HackType.values()) { @@ -35,16 +31,6 @@ public static void clearCheckCache(SpartanPlayer p) { } } - public static void clearCheckCache(SpartanPlayer p, Iterable hackTypes) { - for (Enums.HackType hackType : hackTypes) { - p.getBuffer(hackType).clear(); - p.getTimer(hackType).clear(); - p.getDecimals(hackType).clear(); - p.getCooldowns(hackType).clear(); - p.getTracker(hackType).clear(); - } - } - public static void clearStorage(boolean clear) { if (!memory.isEmpty()) { synchronized (memory) { @@ -126,24 +112,17 @@ public static Set store(Set set) { } public static void disable() { - if (CloudFeature.hasToken()) { - AutoUpdater.complete(); - } + AutoUpdater.complete(); // System TPS.clear(); Threads.disable(); SpartanBukkit.clear(); - // Utilities - SpartanBukkit.cooldowns.clear(); - // Features DetectionNotifications.clear(); CrossServerInformation.clear(); PlayerLimitPerIP.clear(); - ReconnectCooldown.clear(); - AwarenessNotifications.clear(); // Configuration Config.create(); diff --git a/src/main/java/com/vagdedes/spartan/configuration/Config.java b/src/main/java/com/vagdedes/spartan/functionality/management/Config.java similarity index 83% rename from src/main/java/com/vagdedes/spartan/configuration/Config.java rename to src/main/java/com/vagdedes/spartan/functionality/management/Config.java index 3e65c2d..a332146 100644 --- a/src/main/java/com/vagdedes/spartan/configuration/Config.java +++ b/src/main/java/com/vagdedes/spartan/functionality/management/Config.java @@ -1,19 +1,20 @@ -package com.vagdedes.spartan.configuration; +package com.vagdedes.spartan.functionality.management; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.configuration.implementation.Messages; +import com.vagdedes.spartan.abstraction.configuration.implementation.SQLFeature; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; import com.vagdedes.spartan.functionality.moderation.Wave; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.Chunks; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.interfaces.listeners.EventsHandler7; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.Chunks; import com.vagdedes.spartan.utils.server.ConfigUtils; import com.vagdedes.spartan.utils.server.PluginUtils; import me.vagdedes.spartan.api.API; @@ -47,7 +48,7 @@ public class Config { public static Compatibility compatibility = new Compatibility(); static { - refreshVariables(false); + refreshFields(false); } // Separator @@ -109,7 +110,7 @@ public static Check getCheckByName(String s) { // Separator - public static void refreshVariables(boolean clearChecksCache) { + public static void refreshFields(boolean clearChecksCache) { // Config Utilities Cache ConfigUtils.clear(); @@ -146,7 +147,7 @@ public static void refreshVariables(boolean clearChecksCache) { // Identification & Labelling construct = "[Spartan " + API.getVersion() + "/" + IDs.hide(IDs.user()) + "/" + IDs.hide(IDs.nonce()) + "] "; - CloudFeature.clear(false); + CloudBase.clear(false); CrossServerInformation.refresh(); // Check Cache @@ -181,39 +182,35 @@ public static void createConfigurations(boolean local) { public static void create() { boolean enabledPlugin = Register.isPluginEnabled(); - // Utilities (Always Before Configuration) - refreshVariables(true); + // Utilities + refreshFields(true); - // Configuration (Always First) if (enabledPlugin) { + // Configuration createConfigurations(false); // Always First + + // System + AwarenessNotifications.refresh(); } else { + // Configuration settings.clear(); sql.refreshConfiguration(); messages.clear(); compatibility.clear(); Wave.clearCache(); + + // System + AwarenessNotifications.clear(); } - // Utilities - PluginUtils.clear(); + // Objects + SpartanPlayer.clear(); // System + PluginUtils.clear(); Cache.clearStorage(!enabledPlugin); Chunks.reload(enabledPlugin); - Permissions.clear(); - - // Features - AwarenessNotifications.refresh(); - - // Objects - SpartanPlayer.clear(); - - // Handlers - ResearchEngine.refresh(true, enabledPlugin); - - // Listeners - EventsHandler7.refresh(); + ResearchEngine.refresh(enabledPlugin); } public static void reload(Object sender) { @@ -240,7 +237,7 @@ public static void reload(Object sender) { // Separator public static void enableChecks() { - CheckProtection.cancel(20, 0); + CheckDelay.cancel(20, 0); for (HackType hackType : Enums.HackType.values()) { hackType.getCheck().setEnabled(null, true); @@ -248,7 +245,7 @@ public static void enableChecks() { } public static void disableChecks() { - CheckProtection.cancel(20, 0); + CheckDelay.cancel(20, 0); for (HackType hackType : Enums.HackType.values()) { hackType.getCheck().setEnabled(null, false); @@ -258,7 +255,7 @@ public static void disableChecks() { // Separator public static void enableSilentChecking() { - CheckProtection.cancel(20, 0); + CheckDelay.cancel(20, 0); for (HackType hackType : Enums.HackType.values()) { hackType.getCheck().setSilent(true); @@ -266,7 +263,7 @@ public static void enableSilentChecking() { } public static void disableSilentChecking() { - CheckProtection.cancel(20, 0); + CheckDelay.cancel(20, 0); for (HackType hackType : Enums.HackType.values()) { hackType.getCheck().setSilent(false); diff --git a/src/main/java/com/vagdedes/spartan/functionality/moderation/Wave.java b/src/main/java/com/vagdedes/spartan/functionality/moderation/Wave.java index c3f0333..dc679cb 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/moderation/Wave.java +++ b/src/main/java/com/vagdedes/spartan/functionality/moderation/Wave.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.functionality.moderation; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.ConfigUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -58,7 +58,7 @@ public static void create(boolean local) { boolean exists = file.exists(); if (!exists) { - ConfigUtils.add(file, section + "." + SpartanBukkit.uuid + ".command", "ban {player} wave punishment example"); + ConfigUtils.add(file, section + "." + UUID.randomUUID() + ".command", "ban {player} wave punishment example"); } if (!local && exists) { @@ -154,7 +154,7 @@ public static boolean start() { } } - SpartanBukkit.storageThread.executeIfFreeElseHere(() -> { + SpartanBukkit.dataThread.executeIfFreeElseHere(() -> { for (UUID uuid : uuids) { try { String command = getCommand(uuid); diff --git a/src/main/java/com/vagdedes/spartan/functionality/notifications/AwarenessNotifications.java b/src/main/java/com/vagdedes/spartan/functionality/notifications/AwarenessNotifications.java index 7e912f2..dd1daf5 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/notifications/AwarenessNotifications.java +++ b/src/main/java/com/vagdedes/spartan/functionality/notifications/AwarenessNotifications.java @@ -1,8 +1,7 @@ package com.vagdedes.spartan.functionality.notifications; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -14,13 +13,14 @@ public class AwarenessNotifications { private static final Map> map = new LinkedHashMap<>(); private static final String disableMessage = " You can disable Awareness Notifications via " + Config.settings.getFile().getName() + "."; + public static final UUID uuid = UUID.randomUUID(); public static void clear() { map.clear(); } public static void refresh() { - map.remove(SpartanBukkit.uuid); + map.remove(uuid); } public static boolean areEnabled() { diff --git a/src/main/java/com/vagdedes/spartan/functionality/notifications/DetectionNotifications.java b/src/main/java/com/vagdedes/spartan/functionality/notifications/DetectionNotifications.java index 1d4ecb6..6ec441e 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/notifications/DetectionNotifications.java +++ b/src/main/java/com/vagdedes/spartan/functionality/notifications/DetectionNotifications.java @@ -1,18 +1,18 @@ package com.vagdedes.spartan.functionality.notifications; import com.vagdedes.spartan.Register; +import com.vagdedes.spartan.abstraction.profiling.MiningHistory; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.world.XRay; -import com.vagdedes.spartan.configuration.Config; import com.vagdedes.spartan.functionality.configuration.AntiCheatLogs; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.profiling.MiningHistory; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.PlayerData; import me.vagdedes.spartan.api.PlayerFoundOreEvent; diff --git a/src/main/java/com/vagdedes/spartan/functionality/notifications/SuspicionNotifications.java b/src/main/java/com/vagdedes/spartan/functionality/notifications/SuspicionNotifications.java index 14252b5..5d9d2f7 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/notifications/SuspicionNotifications.java +++ b/src/main/java/com/vagdedes/spartan/functionality/notifications/SuspicionNotifications.java @@ -1,13 +1,13 @@ package com.vagdedes.spartan.functionality.notifications; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CloudConnections; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import me.vagdedes.spartan.system.Enums; import java.util.Collection; diff --git a/src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/BackgroundClickableMessage.java b/src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/BackgroundClickableMessage.java similarity index 99% rename from src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/BackgroundClickableMessage.java rename to src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/BackgroundClickableMessage.java index 60e9ed9..333f709 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/BackgroundClickableMessage.java +++ b/src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/BackgroundClickableMessage.java @@ -1,4 +1,4 @@ -package com.vagdedes.spartan.functionality.notifications.clickablemessage; +package com.vagdedes.spartan.functionality.notifications.clickable; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; diff --git a/src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/ClickableMessage.java b/src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/ClickableMessage.java similarity index 93% rename from src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/ClickableMessage.java rename to src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/ClickableMessage.java index 6789c8e..fd63e70 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/notifications/clickablemessage/ClickableMessage.java +++ b/src/main/java/com/vagdedes/spartan/functionality/notifications/clickable/ClickableMessage.java @@ -1,7 +1,7 @@ -package com.vagdedes.spartan.functionality.notifications.clickablemessage; +package com.vagdedes.spartan.functionality.notifications.clickable; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/CancelViolation.java b/src/main/java/com/vagdedes/spartan/functionality/performance/CancelViolation.java similarity index 55% rename from src/main/java/com/vagdedes/spartan/handlers/stability/CancelViolation.java rename to src/main/java/com/vagdedes/spartan/functionality/performance/CancelViolation.java index fce307c..0706c63 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/CancelViolation.java +++ b/src/main/java/com/vagdedes/spartan/functionality/performance/CancelViolation.java @@ -1,8 +1,10 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.performance; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.necessary.UltimateStatistics; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import me.vagdedes.spartan.system.Enums; import java.util.LinkedHashMap; @@ -11,7 +13,7 @@ public class CancelViolation { private static final String masterKey = "cancel-violation"; - private static final Map memory = new LinkedHashMap<>(Enums.HackType.values().length * ResearchEngine.DataType.values().length); + private static final Map memory = new LinkedHashMap<>(Enums.HackType.values().length * Enums.DataType.values().length); private static final int cooldown = 3; static void clear() { @@ -19,8 +21,8 @@ static void clear() { } static void clear(Enums.HackType hackType) { - for (ResearchEngine.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(true)) { - memory.remove(ResearchEngine.getStorageKey(hackType, dataType)); + for (Enums.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(true)) { + memory.remove(getStorageKey(hackType, dataType)); } } @@ -28,9 +30,9 @@ static void refresh(Enums.HackType[] hackTypes) { for (Enums.HackType hackType : hackTypes) { Check check = hackType.getCheck(); - for (ResearchEngine.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(true)) { + for (Enums.DataType dataType : ResearchEngine.getDynamicUsableDataTypes(true)) { memory.put( - ResearchEngine.getStorageKey(hackType, dataType), + getStorageKey(hackType, dataType), check.cancelViolation + (check.cancelViolation * check.getProblematicDetections()) ); } @@ -48,8 +50,14 @@ public static void force(SpartanPlayer player, Enums.HackType hackType) { player.getCooldowns().add(masterKey + hackType.ordinal(), cooldown); } - public static int get(Enums.HackType hackType, ResearchEngine.DataType dataType) { + public static int get(Enums.HackType hackType, Enums.DataType dataType) { return TestServer.isIdentified() ? Check.minimumDefaultCancelViolation : - memory.getOrDefault(ResearchEngine.getStorageKey(hackType, dataType), hackType.getCheck().cancelViolation); + memory.getOrDefault(getStorageKey(hackType, dataType), hackType.getCheck().cancelViolation); + } + + // Separator + + private static int getStorageKey(Enums.HackType hackType, Enums.DataType dataType) { + return (hackType.hashCode() * SpartanBukkit.hashCodeMultiplier) + dataType.hashCode(); } } diff --git a/src/main/java/com/vagdedes/spartan/functionality/performance/FalsePositiveDetection.java b/src/main/java/com/vagdedes/spartan/functionality/performance/FalsePositiveDetection.java deleted file mode 100644 index ad91bd6..0000000 --- a/src/main/java/com/vagdedes/spartan/functionality/performance/FalsePositiveDetection.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.vagdedes.spartan.functionality.performance; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.profiling.PlayerViolation; -import com.vagdedes.spartan.objects.system.LiveViolation; -import com.vagdedes.spartan.system.SpartanBukkit; -import com.vagdedes.spartan.utils.gameplay.GroundUtils; -import com.vagdedes.spartan.utils.math.AlgebraUtils; -import me.vagdedes.spartan.system.Enums; - -import java.util.Collection; - -public class FalsePositiveDetection { - - public static boolean canFunction() { - return !TestServer.isIdentified() - && Config.settings.getBoolean("Performance.enable_false_positive_detection"); - } - - public static int getSimplifiedNumber(Enums.HackType hackType, String detection, Collection numbers) { - int hash = (hackType.hashCode() * SpartanBukkit.hashCodeMultiplier) + detection.hashCode(); - - if (!numbers.isEmpty()) { - for (Number number : numbers) { - if (number instanceof Double) { - hash = (hash * SpartanBukkit.hashCodeMultiplier) - + Double.hashCode(AlgebraUtils.cut(number.doubleValue(), GroundUtils.maxHeightLength)); - } else { - hash = (hash * SpartanBukkit.hashCodeMultiplier) + number.intValue(); - } - } - } - return hash; - } - - public static boolean canCorrect(PlayerViolation playerViolation, LiveViolation liveViolation) { - return canFunction() - && !liveViolation.hasMaxCancelledLevel(playerViolation.similarityIdentity); - } -} diff --git a/src/main/java/com/vagdedes/spartan/functionality/performance/MaximumCheckedPlayers.java b/src/main/java/com/vagdedes/spartan/functionality/performance/MaximumCheckedPlayers.java index 2468443..c4ba574 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/performance/MaximumCheckedPlayers.java +++ b/src/main/java/com/vagdedes/spartan/functionality/performance/MaximumCheckedPlayers.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.functionality.performance; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import java.util.*; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/NotifyViolation.java b/src/main/java/com/vagdedes/spartan/functionality/performance/NotifyViolation.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/handlers/stability/NotifyViolation.java rename to src/main/java/com/vagdedes/spartan/functionality/performance/NotifyViolation.java index 2f00b9e..380389f 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/NotifyViolation.java +++ b/src/main/java/com/vagdedes/spartan/functionality/performance/NotifyViolation.java @@ -1,8 +1,9 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.performance; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/ResearchEngine.java b/src/main/java/com/vagdedes/spartan/functionality/performance/ResearchEngine.java similarity index 82% rename from src/main/java/com/vagdedes/spartan/handlers/stability/ResearchEngine.java rename to src/main/java/com/vagdedes/spartan/functionality/performance/ResearchEngine.java index 56e419c..7f6e4b1 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/ResearchEngine.java +++ b/src/main/java/com/vagdedes/spartan/functionality/performance/ResearchEngine.java @@ -1,27 +1,26 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.performance; import com.vagdedes.spartan.Register; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.check.LiveViolation; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.functionality.StatisticalProgress; +import com.vagdedes.spartan.abstraction.inventory.implementation.MainMenu; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternStorage; +import com.vagdedes.spartan.abstraction.profiling.*; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.combat.criticals.Criticals; import com.vagdedes.spartan.checks.combat.criticals.CriticalsUtils; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; import com.vagdedes.spartan.functionality.configuration.AntiCheatLogs; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.connection.cloud.CloudConnections; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.gui.spartan.MainMenu; -import com.vagdedes.spartan.objects.features.StatisticalProgress; -import com.vagdedes.spartan.objects.profiling.*; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.statistics.ViolationStatistics; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.objects.system.LiveViolation; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.java.TimeUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; @@ -41,22 +40,19 @@ public class ResearchEngine { public static final int - logRequirement = Check.maxViolationsPerCycle, - profileRequirement = logRequirement / 10, - maxRows = Cache.enoughRAM ? 100_000 : 20_000, - maxBytes = maxRows * 1024 * 1024; + dataRequirement = Check.maxViolationsPerCycle, + profileRequirement = AlgebraUtils.integerRound(dataRequirement / 15.0), // 7 + maxBytes = AlgebraUtils.integerRound(Runtime.getRuntime().maxMemory() * 0.05), + maxRows = maxBytes / 1024; private static final double minimumAverageMining = 16.0; - private static final long cacheTimeLimit = 60_000L * 4; // Despite being 4, realistically it is 5 minutes if extra calculations are accounted for private static final int cacheRefreshTicks = 1200; private static int schedulerTicks = 0; - private static boolean - isFull = false, - enoughData = false; + private static boolean enoughData = false; - public static final DataType[] usableDataTypes = new DataType[]{DataType.Java, DataType.Bedrock}; + public static final Enums.DataType[] usableDataTypes = new Enums.DataType[]{Enums.DataType.Java, Enums.DataType.Bedrock}; private static StatisticalProgress statisticalProgress = new StatisticalProgress(); private static final Map playerProfiles @@ -87,11 +83,11 @@ public class ResearchEngine { if (schedulerTicks == 0) { schedulerTicks = cacheRefreshTicks * 10; - SpartanBukkit.analysisThread.executeIfFree(() -> { - if (isDatabaseMode()) { - refresh(false, Register.isPluginEnabled()); + SpartanBukkit.dataThread.executeIfFree(() -> { + if (Config.sql.isEnabled()) { + refresh(Register.isPluginEnabled()); } else if (schedulerTicks % cacheRefreshTicks == 0) { - updateComprehensionCache(); + updateCache(); MainMenu.refresh(); } }); @@ -99,8 +95,8 @@ public class ResearchEngine { schedulerTicks -= 1; if (schedulerTicks % cacheRefreshTicks == 0) { - SpartanBukkit.analysisThread.executeIfFree(() -> { - updateComprehensionCache(); + SpartanBukkit.dataThread.executeIfFree(() -> { + updateCache(); MainMenu.refresh(); }); } @@ -110,22 +106,18 @@ public class ResearchEngine { } public static boolean isStorageMode() { - return Config.settings.getBoolean("Logs.log_file") || isDatabaseMode(); + return Config.settings.getBoolean("Logs.log_file") || Config.sql.isEnabled(); } - public static DataType[] getDynamicUsableDataTypes(boolean universal) { - DataType dataType = SpartanEdition.getMissingDetection(); - return dataType == null ? (universal ? DataType.values() : usableDataTypes) : - dataType == DataType.Bedrock ? (universal ? new DataType[]{DataType.Universal, DataType.Java} : new DataType[]{DataType.Java}) : - (universal ? new DataType[]{DataType.Universal, DataType.Bedrock} : new DataType[]{DataType.Bedrock}); + public static Enums.DataType[] getDynamicUsableDataTypes(boolean universal) { + Enums.DataType dataType = SpartanEdition.getMissingDetection(); + return dataType == null ? (universal ? Enums.DataType.values() : usableDataTypes) : + dataType == Enums.DataType.Bedrock ? (universal ? new Enums.DataType[]{Enums.DataType.Universal, Enums.DataType.Java} : new Enums.DataType[]{Enums.DataType.Java}) : + (universal ? new Enums.DataType[]{Enums.DataType.Universal, Enums.DataType.Bedrock} : new Enums.DataType[]{Enums.DataType.Bedrock}); } // Separator - public static boolean isDatabaseMode() { - return Config.sql.isEnabled(); - } - public static boolean enoughData() { if (enoughData) { return true; @@ -137,7 +129,7 @@ public static boolean enoughData() { profiles++; logs += playerProfile.getUsefulLogs(); - if (logs >= logRequirement && profiles >= profileRequirement) { + if (logs >= dataRequirement && profiles >= profileRequirement) { return enoughData = true; } } @@ -146,57 +138,14 @@ public static boolean enoughData() { return false; } - public static boolean isFull() { - return isFull; - } - - // Separator - - public static void refresh(boolean message, boolean enabledPlugin) { - Runnable runnable = () -> { - // Complete Storage - AntiCheatLogs.refresh(); - Config.sql.refreshDatabase(); - Criticals.clear(); - - if (enabledPlugin) { - CloudFeature.refresh(true); - String status = recalculateCache(); - CloudFeature.refresh(false); - - if (message && status != null) { - AwarenessNotifications.forcefullySend(status); - } - } else { - isFull = false; - CloudFeature.clear(true); - CancelViolation.clear(); - ViolationStatistics.clear(); - } - }; - - if (!SpartanBukkit.isSynchronised()) { - runnable.run(); - } else { - SpartanBukkit.analysisThread.executeIfFree(runnable); - } - } - // Separator public static String getDetectionInformation(String s) { - if (s.contains(PunishmentHistory.kickMessage) - || s.contains(PunishmentHistory.warningMessage) - || s.contains(PunishmentHistory.punishmentMessage)) { - return null; - } String[] split = s.split("\\), \\("); s = split[split.length - 1]; - return s.substring(0, s.length() - 2); + return s.length() < 2 ? null : s.substring(0, s.length() - 2); } - // Separator - public static int getDetectionViolationLevel(String s) { int index1 = s.indexOf("(VL: "); @@ -323,18 +272,20 @@ public static PlayerProfile getPlayerProfileAdvanced(String name, boolean deep) } } - public static ViolationHistory getViolationHistory(Enums.HackType hackType, DataType dataType, Collection profiles) { + // Separator + + public static ViolationHistory getViolationHistory(Enums.HackType hackType, Enums.DataType dataType, Collection profiles) { int size = profiles.size(); if (size == 0) { return null; } Collection list = new ArrayList<>(size); - boolean universal = dataType == DataType.Universal; + boolean universal = dataType == Enums.DataType.Universal; // Separator for (PlayerProfile playerProfile : profiles) { - if (universal || ((dataType == DataType.Bedrock) == playerProfile.isBedrockPlayer())) { + if (universal || ((dataType == Enums.DataType.Bedrock) == playerProfile.isBedrockPlayer())) { list.addAll(playerProfile.getViolationHistory(hackType).getRawCollection()); } } @@ -345,8 +296,6 @@ public static ViolationHistory getViolationHistory(Enums.HackType hackType, Data return new ViolationHistory(list, false); } - // Separator - public static double getMiningHistoryAverage(Enums.MiningOre ore) { Double average = averageMining.get(ore); return average == null ? defaultAverageMining[ore.ordinal()] : average; @@ -355,7 +304,7 @@ public static double getMiningHistoryAverage(Enums.MiningOre ore) { // Separator public static void resetData(Enums.HackType hackType) { - SpartanBukkit.storageThread.execute(() -> { + SpartanBukkit.dataThread.execute(() -> { String hackTypeString = hackType.toString(); hackType.getCheck().clearMaxCancelledViolations(); CancelViolation.clear(hackType); @@ -408,16 +357,23 @@ public static void resetData(String playerName) { // Clear Violations SpartanPlayer p = SpartanBukkit.getPlayer(playerName); boolean foundPlayer = p != null; + PlayerProfile profile; if (foundPlayer) { + profile = p.getProfile(); + for (Enums.HackType hackType : Enums.HackType.values()) { p.getViolations(hackType).reset(); } + } else { + profile = getPlayerProfile(playerName); } if (isStorageMode()) { // Clear Files/Database - SpartanBukkit.storageThread.execute(() -> { + SpartanBukkit.dataThread.execute(() -> { + PatternStorage.delete(profile); + synchronized (playerProfiles) { playerProfiles.remove(playerName); } @@ -448,6 +404,8 @@ public static void resetData(String playerName) { } }); } else { + SpartanBukkit.dataThread.execute(() -> PatternStorage.delete(profile)); + synchronized (playerProfiles) { playerProfiles.remove(playerName); } @@ -457,7 +415,7 @@ public static void resetData(String playerName) { } enoughData = false; MainMenu.refresh(); - SpartanMenu.playerInfo.refresh(playerName); + InteractiveInventory.playerInfo.refresh(playerName); } // Separator @@ -490,13 +448,10 @@ public static Collection getFiles() { return new ArrayList<>(0); } - // Separator - public static Map getLogs() { - long startTime = System.currentTimeMillis(); Map cache = new LinkedHashMap<>(); int byteSize = 0; - isFull = false; + boolean isFull = false; boolean continueWithYAML = false; // Separator @@ -517,8 +472,6 @@ public static Map getLogs() { if (byteSize >= maxBytes) { isFull = true; break; - } else if (System.currentTimeMillis() - startTime >= cacheTimeLimit) { - break; } } } @@ -543,8 +496,6 @@ public static Map getLogs() { if (byteSize >= maxBytes) { isFull = true; break; - } else if (System.currentTimeMillis() - startTime >= cacheTimeLimit) { - break; } } rs.close(); @@ -584,14 +535,10 @@ public static Map getLogs() { if (byteSize >= maxBytes) { isFull = true; break; - } else if (System.currentTimeMillis() - startTime >= cacheTimeLimit) { - break; } - } else if (System.currentTimeMillis() - startTime >= cacheTimeLimit) { - break; } } - if (isFull || System.currentTimeMillis() - startTime >= cacheTimeLimit) { + if (isFull) { break; } } @@ -600,18 +547,40 @@ public static Map getLogs() { return cache; } - public static int getStorageKey(Enums.HackType hackType, DataType dataType) { - return (hackType.hashCode() * SpartanBukkit.hashCodeMultiplier) + dataType.hashCode(); - } - // Separator - private static String recalculateCache() { + public static void refresh(boolean enabledPlugin) { + Runnable runnable = () -> { + // Complete Storage + AntiCheatLogs.refresh(); + Config.sql.refreshDatabase(); + Criticals.clear(); + + if (enabledPlugin) { + CloudBase.refresh(true); + buildCache(); + PatternStorage.reload(); + CloudBase.refresh(false); + } else { + CloudBase.clear(true); + PatternStorage.clear(); + CancelViolation.clear(); + ViolationAnalysis.clear(); + } + }; + + if (!SpartanBukkit.isSynchronised()) { + runnable.run(); + } else { + SpartanBukkit.dataThread.executeIfFree(runnable); + } + } + + private static void buildCache() { if (isStorageMode()) { Map logs = getLogs(); // Separator - String toReturn; int size = logs.size(); if (size > 0) { @@ -715,26 +684,16 @@ private static String recalculateCache() { } } enoughData = false; - updateComprehensionCache(); + updateCache(); MainMenu.refresh(); - - // Separator - toReturn = "Done loading " + size + " rows of data to the Research Engine."; } catch (Exception ex) { ex.printStackTrace(); - toReturn = null; } - } else { - toReturn = null; } - return toReturn; - } else { - isFull = false; - return "Research Engine will function with memory only due to all log saving options being disabled."; } } - private static void updateComprehensionCache() { + private static void updateCache() { if (!playerProfiles.isEmpty()) { Collection playerProfiles; @@ -742,10 +701,10 @@ private static void updateComprehensionCache() { playerProfiles = new ArrayList<>(ResearchEngine.playerProfiles.values()); } Enums.HackType[] hackTypes = Enums.HackType.values(); - DataType[] dataTypes = getDynamicUsableDataTypes(false); + Enums.DataType[] dataTypes = getDynamicUsableDataTypes(false); List legitimatePlayers = getLegitimatePlayers(); int mines = 0, logs = 0, kicks = 0, warnings = 0, punishments = 0; - ViolationStatistics.calculateData(playerProfiles); + ViolationAnalysis.calculateData(playerProfiles); for (PlayerProfile playerProfile : playerProfiles) { playerProfile.evidence.judge(); @@ -781,10 +740,10 @@ private static void updateComprehensionCache() { for (Enums.HackType hackType : hackTypes) { hackType.getCheck().clearMaxCancelledViolations(); - for (DataType dataType : dataTypes) { + for (Enums.DataType dataType : dataTypes) { if (hackType.getCheck().isEnabled(dataType, null, null)) { - boolean bedrock = dataType == DataType.Bedrock; - Map averages = new LinkedHashMap<>(); + boolean bedrock = dataType == Enums.DataType.Bedrock; + Map averages = new LinkedHashMap<>(); for (PlayerProfile playerProfile : playerProfiles) { if (bedrock == playerProfile.isBedrockPlayer() @@ -795,10 +754,10 @@ private static void updateComprehensionCache() { if (!list.isEmpty()) { for (PlayerViolation playerViolation : list) { int timeMoment = AlgebraUtils.integerFloor(playerViolation.time / duration); - ViolationStatistics.TimePeriod timePeriod = averages.get(timeMoment); + ViolationAnalysis.TimePeriod timePeriod = averages.get(timeMoment); if (timePeriod == null) { - timePeriod = new ViolationStatistics.TimePeriod(); + timePeriod = new ViolationAnalysis.TimePeriod(); timePeriod.add(playerProfile, playerViolation); averages.put(timeMoment, timePeriod); } else { @@ -814,7 +773,7 @@ private static void updateComprehensionCache() { Map violationAveragesDivisor = new LinkedHashMap<>(); // Add the average violations for the executed detections based on each time period - for (ViolationStatistics.TimePeriod timePeriod : averages.values()) { + for (ViolationAnalysis.TimePeriod timePeriod : averages.values()) { for (Map.Entry individualViolationAverages : timePeriod.getAverageViolations().entrySet()) { int hash = individualViolationAverages.getKey(); violationAverages.put( @@ -881,7 +840,7 @@ private static void updateComprehensionCache() { } else { // We clear because there are no players statisticalProgress = new StatisticalProgress(); averageMining.clear(); - ViolationStatistics.clear(); + ViolationAnalysis.clear(); CancelViolation.clear(); for (Enums.HackType hackType : Enums.HackType.values()) { @@ -889,26 +848,4 @@ private static void updateComprehensionCache() { } } } - - // Separator - - public enum DataType { - Java, Bedrock, Universal; - - public final String lowerCase; - - DataType() { - switch (this.ordinal()) { - case 0: - lowerCase = "java"; - break; - case 1: - lowerCase = "bedrock"; - break; - default: - lowerCase = "universal"; - break; - } - } - } } diff --git a/src/main/java/com/vagdedes/spartan/objects/statistics/ViolationStatistics.java b/src/main/java/com/vagdedes/spartan/functionality/performance/ViolationAnalysis.java similarity index 92% rename from src/main/java/com/vagdedes/spartan/objects/statistics/ViolationStatistics.java rename to src/main/java/com/vagdedes/spartan/functionality/performance/ViolationAnalysis.java index c4af9ae..10bd086 100644 --- a/src/main/java/com/vagdedes/spartan/objects/statistics/ViolationStatistics.java +++ b/src/main/java/com/vagdedes/spartan/functionality/performance/ViolationAnalysis.java @@ -1,16 +1,15 @@ -package com.vagdedes.spartan.objects.statistics; +package com.vagdedes.spartan.functionality.performance; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.profiling.PlayerViolation; -import com.vagdedes.spartan.objects.system.Check; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.profiling.PlayerViolation; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.math.probability.ProbabilityRank; import me.vagdedes.spartan.system.Enums; import java.util.*; -public class ViolationStatistics { +public class ViolationAnalysis { private static final Map> violationProbabilityPie = Collections.synchronizedMap(new LinkedHashMap<>()); @@ -77,7 +76,7 @@ public static void clear() { private static void remove(Collection playerProfiles, Enums.HackType hackType, - ResearchEngine.DataType dataType) { + Enums.DataType dataType) { for (PlayerProfile profile : playerProfiles) { if (profile.getDataType() == dataType) { profile.evidence.remove(hackType, false, true, false); @@ -92,10 +91,10 @@ public static void calculateData(Collection playerProfiles) { if (!playerProfiles.isEmpty() && ResearchEngine.enoughData()) { playerProfiles = new ArrayList<>(playerProfiles); - ResearchEngine.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); + Enums.DataType[] dataTypes = ResearchEngine.getDynamicUsableDataTypes(false); for (Enums.HackType hackType : Enums.HackType.values()) { - for (ResearchEngine.DataType dataType : dataTypes) { + for (Enums.DataType dataType : dataTypes) { int majorHash = Objects.hash(hackType, dataType); if (hackType.getCheck().isEnabled(dataType, null, null)) { @@ -117,7 +116,7 @@ public static void calculateData(Collection playerProfiles) { } } - if (totalViolations >= ResearchEngine.logRequirement) { + if (totalViolations >= ResearchEngine.dataRequirement) { calculateProfileProbability( playerProfiles, hackType, @@ -152,7 +151,7 @@ public static void calculateData(Collection playerProfiles) { private static void calculateProfileProbability(Collection playerProfiles, Enums.HackType hackType, - ResearchEngine.DataType dataType, + Enums.DataType dataType, int majorHash, int totalViolations) { Map violationProbability = violationProbabilityPie.get(majorHash); @@ -210,7 +209,7 @@ private static void calculateProfileProbability(Collection player private static void judgeProbability(Collection playerProfiles, Enums.HackType hackType, - ResearchEngine.DataType dataType, + Enums.DataType dataType, int majorHash) { synchronized (profileProbabilityWave) { Map probabilityData = profileProbabilityWave.get(majorHash); diff --git a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/CheckProtection.java b/src/main/java/com/vagdedes/spartan/functionality/protections/CheckDelay.java similarity index 77% rename from src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/CheckProtection.java rename to src/main/java/com/vagdedes/spartan/functionality/protections/CheckDelay.java index 8b0bc3b..05578ae 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/identifiers/simple/CheckProtection.java +++ b/src/main/java/com/vagdedes/spartan/functionality/protections/CheckDelay.java @@ -1,20 +1,21 @@ -package com.vagdedes.spartan.handlers.identifiers.simple; +package com.vagdedes.spartan.functionality.protections; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.TPS; import me.vagdedes.spartan.system.Enums; import java.util.ArrayList; import java.util.List; import java.util.UUID; -public class CheckProtection { +public class CheckDelay { private static final Enums.HackType[] mostlyAffected; private static long cooldown = 0L, delay = 0L; + private static final Cooldowns cooldowns = new Cooldowns(null); static { Enums.HackType[] hackTypes = Enums.HackType.values(); @@ -33,8 +34,9 @@ public class CheckProtection { } mostlyAffected = checksAffectedByCombatArray.toArray(new Enums.HackType[0]); } + public static void cancel(UUID uuid, int ticks) { - SpartanBukkit.cooldowns.add(uuid + "=check=protection", ticks); + cooldowns.add(uuid.toString(), ticks); } public static void cancel(int ticks, int secondsDelay) { @@ -51,7 +53,7 @@ public static void cancel(int ticks, int secondsDelay) { public static boolean hasCooldown(SpartanPlayer player) { return cooldown >= System.currentTimeMillis() || player.getHandlers().has(Handlers.HandlerType.GameMode) - || !SpartanBukkit.cooldowns.canDo(player.uuid + "=check=protection"); + || !cooldowns.canDo(player.uuid.toString()); } public static void evadeCommonFalsePositives(SpartanPlayer player, Compatibility.CompatibilityType compatibilityType, Enums.HackType[] hackTypes, int ticks) { diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/ReconnectCooldown.java b/src/main/java/com/vagdedes/spartan/functionality/protections/ReconnectCooldown.java deleted file mode 100644 index 15db100..0000000 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/ReconnectCooldown.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.vagdedes.spartan.functionality.protections; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; -import com.vagdedes.spartan.utils.server.ConfigUtils; -import me.vagdedes.spartan.system.Enums; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerLoginEvent; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -public class ReconnectCooldown { - - private static final Map cooldown = new LinkedHashMap<>(Config.getMaxPlayers()); - - public static void run(Player p, PlayerLoginEvent e) { - int config_cooldown = Config.settings.getInteger("reconnect_cooldown"); - - if (config_cooldown > 0 && !Permissions.has(p, Enums.Permission.RECONNECT)) { - Long ms = cooldown.get(p.getUniqueId()); - - if (ms != null) { - long time = System.currentTimeMillis() - ms; - - if (time <= config_cooldown * 1000L) { - String kick = Config.messages.getColorfulString("reconnect_kick_message").replace("{time}", String.valueOf(config_cooldown - ((int) (time / 1000L)))); - e.disallow(PlayerLoginEvent.Result.KICK_OTHER, ConfigUtils.replaceWithSyntax(p, kick, null)); - } - } - } - } - - public static void clear() { - cooldown.clear(); - } - - public static void remove(Player p) { - cooldown.put(p.getUniqueId(), System.currentTimeMillis()); - } - - public static void loadCooldowns() { - List players = SpartanBukkit.getPlayers(); - - if (players.size() > 0) { - for (SpartanPlayer p : players) { - remove(p.getPlayer()); - } - } - } -} diff --git a/src/main/java/com/vagdedes/spartan/functionality/protections/ServerFlying.java b/src/main/java/com/vagdedes/spartan/functionality/protections/ServerFlying.java index 2479bb5..598e32e 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/protections/ServerFlying.java +++ b/src/main/java/com/vagdedes/spartan/functionality/protections/ServerFlying.java @@ -1,13 +1,13 @@ package com.vagdedes.spartan.functionality.protections; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.movement.irregularmovements.IrregularMovements; import com.vagdedes.spartan.compatibility.manual.vanilla.Attributes; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.BouncingBlocks; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Velocity; -import com.vagdedes.spartan.handlers.stability.DetectionLocation; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.BouncingBlocks; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Velocity; +import com.vagdedes.spartan.functionality.identifiers.simple.DetectionLocation; +import com.vagdedes.spartan.functionality.server.Permissions; public class ServerFlying { diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/Chunks.java b/src/main/java/com/vagdedes/spartan/functionality/server/Chunks.java similarity index 95% rename from src/main/java/com/vagdedes/spartan/handlers/stability/Chunks.java rename to src/main/java/com/vagdedes/spartan/functionality/server/Chunks.java index f30877b..a700642 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/Chunks.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/Chunks.java @@ -1,7 +1,5 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.server; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.system.SpartanBukkit; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/functionality/important/MultiVersion.java b/src/main/java/com/vagdedes/spartan/functionality/server/MultiVersion.java similarity index 97% rename from src/main/java/com/vagdedes/spartan/functionality/important/MultiVersion.java rename to src/main/java/com/vagdedes/spartan/functionality/server/MultiVersion.java index afa3fb9..20279c1 100644 --- a/src/main/java/com/vagdedes/spartan/functionality/important/MultiVersion.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/MultiVersion.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.functionality.important; +package com.vagdedes.spartan.functionality.server; -import com.vagdedes.spartan.configuration.Config; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; import com.vagdedes.spartan.utils.server.ConfigUtils; import org.bukkit.Bukkit; diff --git a/src/main/java/com/vagdedes/spartan/functionality/server/Permissions.java b/src/main/java/com/vagdedes/spartan/functionality/server/Permissions.java new file mode 100644 index 0000000..49c4633 --- /dev/null +++ b/src/main/java/com/vagdedes/spartan/functionality/server/Permissions.java @@ -0,0 +1,101 @@ +package com.vagdedes.spartan.functionality.server; + +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; +import me.vagdedes.spartan.system.Enums; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class Permissions { + + private static final String alternativeAdminKey = "spartan.*"; + private static final Enums.Permission[] staffPermissions = new Enums.Permission[]{ + Enums.Permission.STAFF_CHAT, Enums.Permission.WAVE, Enums.Permission.WARN, + Enums.Permission.ADMIN, Enums.Permission.KICK, Enums.Permission.NOTIFICATIONS, + Enums.Permission.USE_BYPASS, Enums.Permission.MANAGE, Enums.Permission.INFO, + }; + + // Separator + + public static boolean has(Player p) { + for (Enums.Permission permission : Enums.Permission.values()) { + if (has(p, permission)) { + return true; + } + } + return false; + } + + // Separator + + public static boolean has(SpartanPlayer p, Enums.Permission permission) { + Player n = p.getPlayer(); + return n != null && n.isOnline() && has(n, permission); + } + + public static boolean has(Player p, Enums.Permission permission) { + if (p.hasPermission(permission.getKey())) { + return true; + } else { + Enums.Permission admin = Enums.Permission.ADMIN; + return permission != admin + ? p.hasPermission(Enums.Permission.ADMIN.getKey()) + || p.hasPermission(alternativeAdminKey) + : p.hasPermission(alternativeAdminKey); + } + } + + // Separator + + public static boolean isBypassing(SpartanPlayer p, Enums.HackType hackType) { + if (p.isOp()) { + return Config.settings.getBoolean("Important.op_bypass"); + } else { + Player n = p.getPlayer(); + return n != null && n.isOnline() + && (isBypassing(n, null) + || hackType != null && isBypassing(n, hackType)); + } + } + + private static boolean isBypassing(Player p, Enums.HackType hackType) { + String key = Enums.Permission.BYPASS.getKey() + (hackType != null ? "." + hackType.toString().toLowerCase() : ""); + return p.hasPermission(key); + } + + // Separator + + public static boolean isStaff(SpartanPlayer player) { + if (player.isOp()) { + return true; + } else { + for (Enums.Permission permission : staffPermissions) { + Player realPlayer = player.getPlayer(); + + if (realPlayer != null && realPlayer.isOnline() && realPlayer.hasPermission(permission.getKey())) { + return true; + } + } + return false; + } + } + + public static List getStaff() { + List players = SpartanBukkit.getPlayers(); + int size = players.size(); + + if (size > 0) { + List array = new ArrayList<>(size); + + for (SpartanPlayer player : players) { + if (isStaff(player)) { + array.add(player); + } + } + return array; + } + return new ArrayList<>(0); + } +} diff --git a/src/main/java/com/vagdedes/spartan/system/SpartanBukkit.java b/src/main/java/com/vagdedes/spartan/functionality/server/SpartanBukkit.java similarity index 80% rename from src/main/java/com/vagdedes/spartan/system/SpartanBukkit.java rename to src/main/java/com/vagdedes/spartan/functionality/server/SpartanBukkit.java index 5f97409..ed82c1c 100644 --- a/src/main/java/com/vagdedes/spartan/system/SpartanBukkit.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/SpartanBukkit.java @@ -1,15 +1,13 @@ -package com.vagdedes.spartan.system; +package com.vagdedes.spartan.functionality.server; import com.vagdedes.spartan.Register; +import com.vagdedes.spartan.abstraction.check.Threads; +import com.vagdedes.spartan.abstraction.pattern.implementation.MovementPatterns; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.essential.protocollib.ProtocolLib; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.connection.Piracy; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Threads; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.connection.Piracy; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.utils.server.ReflectionUtils; import org.bukkit.Bukkit; import org.bukkit.World; @@ -21,41 +19,22 @@ public class SpartanBukkit { public static final boolean supportedFork = MultiVersion.fork().equals("Spigot") || MultiVersion.fork().equals("Paper"), - canAdvertise = !Piracy.enabled || IDs.isBuiltByBit() || IDs.isSongoda() || IDs.isPolymart(), - hasResourcePack; - public static Cooldowns cooldowns = new Cooldowns(null); - - static { - if (MultiVersion.isOrGreater(MultiVersion.MCVersion.V1_18)) { - boolean result = false; - - for (String option : new String[]{ - Bukkit.getResourcePack(), Bukkit.getResourcePackHash(), Bukkit.getResourcePackPrompt() - }) { - if (!option.isEmpty()) { - result = true; - break; - } - } - hasResourcePack = result; - } else { - hasResourcePack = false; - } - } + canAdvertise = !Piracy.enabled || IDs.isBuiltByBit() || IDs.isSongoda() || IDs.isPolymart(); public static final Threads.ThreadPool - analysisThread = new Threads.ThreadPool(TPS.tickTime), connectionThread = new Threads.ThreadPool(TPS.tickTime), - storageThread = new Threads.ThreadPool(5L), playerThread = MultiVersion.folia ? null : new Threads.ThreadPool(2L), + dataThread = new Threads.ThreadPool(1L), chunkThread = MultiVersion.folia ? null : new Threads.ThreadPool(1L), detectionThread = MultiVersion.folia ? null : new Threads.ThreadPool(1L); + public static final MovementPatterns + movementPatterns = new MovementPatterns(1_000L); + public static final int hashCodeMultiplier = 31; public static final long hashCodeMultiplierLong = 31L; private static final Map players = Collections.synchronizedMap(new LinkedHashMap<>(Config.getMaxPlayers())); - public static final UUID uuid = UUID.randomUUID(); public static final Class craftPlayer = ReflectionUtils.getClass( ReflectionUtils.class.getPackage().getName().substring(0, 19) // Package + "org.bukkit.craftbukkit." + Bukkit.getServer().getClass().getPackage().getName().substring(23) + ".entity.CraftPlayer" // Version diff --git a/src/main/java/com/vagdedes/spartan/system/SpartanScheduler.java b/src/main/java/com/vagdedes/spartan/functionality/server/SpartanScheduler.java similarity index 94% rename from src/main/java/com/vagdedes/spartan/system/SpartanScheduler.java rename to src/main/java/com/vagdedes/spartan/functionality/server/SpartanScheduler.java index 065683f..edf5282 100644 --- a/src/main/java/com/vagdedes/spartan/system/SpartanScheduler.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/SpartanScheduler.java @@ -1,9 +1,8 @@ -package com.vagdedes.spartan.system; +package com.vagdedes.spartan.functionality.server; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import org.bukkit.Bukkit; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/TPS.java b/src/main/java/com/vagdedes/spartan/functionality/server/TPS.java similarity index 93% rename from src/main/java/com/vagdedes/spartan/handlers/stability/TPS.java rename to src/main/java/com/vagdedes/spartan/functionality/server/TPS.java index c6597b9..3b33dea 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/TPS.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/TPS.java @@ -1,12 +1,10 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.server; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.configuration.Settings; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.configuration.implementation.Settings; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import org.bukkit.Bukkit; import java.util.*; diff --git a/src/main/java/com/vagdedes/spartan/handlers/stability/TestServer.java b/src/main/java/com/vagdedes/spartan/functionality/server/TestServer.java similarity index 96% rename from src/main/java/com/vagdedes/spartan/handlers/stability/TestServer.java rename to src/main/java/com/vagdedes/spartan/functionality/server/TestServer.java index 08bf664..4857d6b 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/stability/TestServer.java +++ b/src/main/java/com/vagdedes/spartan/functionality/server/TestServer.java @@ -1,9 +1,8 @@ -package com.vagdedes.spartan.handlers.stability; +package com.vagdedes.spartan.functionality.server; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.utils.java.StringUtils; import com.vagdedes.spartan.utils.server.PluginUtils; import org.bukkit.Bukkit; diff --git a/src/main/java/com/vagdedes/spartan/handlers/tracking/CombatProcessing.java b/src/main/java/com/vagdedes/spartan/functionality/tracking/CombatProcessing.java similarity index 90% rename from src/main/java/com/vagdedes/spartan/handlers/tracking/CombatProcessing.java rename to src/main/java/com/vagdedes/spartan/functionality/tracking/CombatProcessing.java index 070608d..56e026b 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/tracking/CombatProcessing.java +++ b/src/main/java/com/vagdedes/spartan/functionality/tracking/CombatProcessing.java @@ -1,10 +1,10 @@ -package com.vagdedes.spartan.handlers.tracking; +package com.vagdedes.spartan.functionality.tracking; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.objects.data.Decimals; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Decimals; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import org.bukkit.util.Vector; diff --git a/src/main/java/com/vagdedes/spartan/handlers/tracking/MovementProcessing.java b/src/main/java/com/vagdedes/spartan/functionality/tracking/MovementProcessing.java similarity index 82% rename from src/main/java/com/vagdedes/spartan/handlers/tracking/MovementProcessing.java rename to src/main/java/com/vagdedes/spartan/functionality/tracking/MovementProcessing.java index abb8265..0e3b93b 100644 --- a/src/main/java/com/vagdedes/spartan/handlers/tracking/MovementProcessing.java +++ b/src/main/java/com/vagdedes/spartan/functionality/tracking/MovementProcessing.java @@ -1,21 +1,21 @@ -package com.vagdedes.spartan.handlers.tracking; +package com.vagdedes.spartan.functionality.tracking; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.objects.data.Decimals; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Decimals; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; import com.vagdedes.spartan.utils.gameplay.MoveUtils; public class MovementProcessing { public static void run(SpartanPlayer p, - double dis, double hor, double ver, double box, + double dis, double hor, double ver, double box, float fall, boolean crawling) { if (p.canRunChecks(false)) { // Damage Damage.runMove(p); // NMS Distance Caching - p.setNmsDistance(dis, hor, ver, box); + p.setNmsDistance(dis, hor, ver, box, fall); if (!crawling) { // Jump/Fall Identifier diff --git a/src/main/java/com/vagdedes/spartan/gui/helpers/AntiCheatUpdates.java b/src/main/java/com/vagdedes/spartan/gui/helpers/AntiCheatUpdates.java deleted file mode 100644 index cb59577..0000000 --- a/src/main/java/com/vagdedes/spartan/gui/helpers/AntiCheatUpdates.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.vagdedes.spartan.gui.helpers; - -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.objects.features.StatisticalProgress; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.utils.math.AlgebraUtils; -import com.vagdedes.spartan.utils.server.InventoryUtils; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -public class AntiCheatUpdates { - - public static final String name = "AntiCheat Updates"; - - public static List getInformation(boolean showStatistics) { - int arraySize = 20; - double players; - List array = new ArrayList<>(arraySize), - statisticsArray = showStatistics ? new ArrayList<>(arraySize) : null; - - if (!showStatistics) { - players = 0.0; - } else { - StatisticalProgress object = ResearchEngine.getProgress(); - - if (object.logs > 0) { - List playerProfiles = ResearchEngine.getPlayerProfiles(); - players = playerProfiles.size(); // purposely double to help with the divisions - - if (players > 0) { - Collection staffOnline = object.getStaffOnline(); - int hackers = ResearchEngine.getHackers().size(), - suspectedPlayers = ResearchEngine.getSuspectedPlayers().size(), - legitimates = ResearchEngine.getLegitimatePlayers().size(), - staffOnlineAmount = staffOnline.size(); - - // Separator - - if (hackers > 0) { - statisticsArray.add("§c" + Math.max(AlgebraUtils.cut((hackers / players) * 100.0, 2), 0.01) + "§r§c% §7of players are §chackers"); - } - if (suspectedPlayers > 0) { - statisticsArray.add("§c" + Math.max(AlgebraUtils.cut((suspectedPlayers / players) * 100.0, 2), 0.01) + "§r§c% §7of players are §csuspected"); - } - if (legitimates > 0) { - statisticsArray.add("§c" + Math.max(AlgebraUtils.cut((legitimates / players) * 100.0, 2), 0.01) + "§r§c% §7of players are §clegitimate"); - } - if (object.kicks > 0 - || object.warnings > 0 - || object.punishments > 0) { - statisticsArray.add("§c" + object.kicks + " §r§c" + (object.kicks == 1 ? "kick" : "kicks") - + "§7, §c" + object.warnings + " §r§c" + (object.warnings == 1 ? "warning" : "warnings") - + " §7& §c" + object.punishments + " §r§c" + (object.punishments == 1 ? "punishment" : "punishments") - + " §7executed"); - } - if (object.mines > 0) { - statisticsArray.add("§c" + object.mines + " ore " + (object.mines == 1 ? "block" : "§r§cblocks") + " have been §cmined"); - } - if (staffOnlineAmount > 0) { - int counter = 10; - - if (!statisticsArray.isEmpty()) { - statisticsArray.add(""); - } - statisticsArray.add("§c" + staffOnlineAmount + " §7staff " + (staffOnlineAmount == 1 ? "player is" : "players are") + " §conline§8:"); - - if (staffOnlineAmount > counter) { - counter = 0; - - for (SpartanPlayer player : staffOnline) { - statisticsArray.add("§c" + player.name); - counter++; - - if (counter == 10) { - break; - } - } - } else { - for (SpartanPlayer player : staffOnline) { - statisticsArray.add("§c" + player.name); - } - } - } - } - } else { - players = 0.0; - } - } - - // Separator - if (showStatistics) { - InventoryUtils.prepareDescription(array, "Important Information"); - } - - // Separator - if (showStatistics) { - if (players > 0.0) { - array.add("§7Data from §4" + ((int) players) + " stored " + (players == 1 ? "player" : "players") + "§8:"); - } else { - array.add("§7Data from §4stored players§8:"); - } - - if (!statisticsArray.isEmpty()) { - array.addAll(statisticsArray); - } else { - array.add("§7" + PlayerStateLists.noDataAvailable); - } - } - return array; - } -} diff --git a/src/main/java/com/vagdedes/spartan/interfaces/commands/CommandExecution.java b/src/main/java/com/vagdedes/spartan/interfaces/commands/CommandExecution.java deleted file mode 100644 index 99067af..0000000 --- a/src/main/java/com/vagdedes/spartan/interfaces/commands/CommandExecution.java +++ /dev/null @@ -1,685 +0,0 @@ -package com.vagdedes.spartan.interfaces.commands; - -import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.compatibility.manual.essential.MinigameMaker; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.moderation.Wave; -import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.notifications.clickablemessage.ClickableMessage; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; -import com.vagdedes.spartan.utils.math.AlgebraUtils; -import com.vagdedes.spartan.utils.server.ConfigUtils; -import com.vagdedes.spartan.utils.server.NetworkUtils; -import io.signality.utils.system.Events; -import me.vagdedes.spartan.api.API; -import me.vagdedes.spartan.system.Enums; -import me.vagdedes.spartan.system.Enums.Permission; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -import java.util.*; - -public class CommandExecution implements CommandExecutor { - - public static final int maxConnectedArgumentLength = 4096; - private static final String[] timeCharacters = new String[]{"m", "h", "d", "w", "y"}; - - private static void buildCommand(CommandSender sender, ChatColor chatColor, String command, String description) { - ClickableMessage.sendCommand(sender, chatColor + command, description, command); - } - - public static boolean isCustomCommand(String command) { - return command.length() > 0 && !command.toLowerCase().startsWith(Register.plugin.getName().toLowerCase()); - } - - public static boolean spartanMessage(CommandSender sender, boolean isPlayer) { - if (!isPlayer || Permissions.has((Player) sender)) { - String v = API.getVersion(); - sender.sendMessage(""); - String command = "§4" + SpartanEdition.getProductName(false) - + " §8[§7(§fVersion: " + v + "§7)§8, §7(§fID: " - + IDs.hide(IDs.user()) + "/" + IDs.hide(IDs.nonce()) + "§7)§8]"; - - sender.sendMessage(command); - sender.sendMessage("§8§l<> §7Required command argument"); - sender.sendMessage("§8§l[] §7Optional command argument"); - return true; - } - sender.sendMessage(Config.messages.getColorfulString("unknown_command")); - return false; - } - - public static void completeMessage(CommandSender sender, String list) { - boolean isPlayer = sender instanceof Player; - SpartanPlayer player = isPlayer ? SpartanBukkit.getPlayer((Player) sender) : null; - isPlayer &= player != null; - - if (spartanMessage(sender, isPlayer)) { - String command = Register.plugin.getName().toLowerCase(); - boolean info = !isPlayer || Permissions.has(player, Enums.Permission.INFO), - manage = !isPlayer || Permissions.has(player, Enums.Permission.MANAGE); - - switch (list) { - case "default": - if ((info || manage) && isPlayer) { - buildCommand(sender, ChatColor.GREEN, "/" + command + " menu", - "Click this command to open the plugin's inventory menu."); - } - if (!isPlayer || Permissions.has(player, Permission.ADMIN)) { - ClickableMessage.sendCommand(sender, ChatColor.GREEN + "/" + command + " customer-support ", "This command can be used to provide crucial details to the developers about problematic detections.", null); - ClickableMessage.sendCommand(sender, ChatColor.GREEN + "/" + command + " customer-support [explanation]", "This command can be used to provide crucial details to the developers about a check.", null); - } - if (manage) { - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " toggle ", - "This command can be used to enable/disable a check and its detections.", null); - } - if (!isPlayer || Permissions.has(player, Permission.RELOAD)) { - buildCommand(sender, ChatColor.RED, "/" + command + " reload", - "Click this command to reload the plugin's cache."); - } - if (!isPlayer || info - || Permissions.has(player, Permission.KICK) - || Permissions.has(player, Permission.WARN) - || Permissions.has(player, Permission.USE_BYPASS) - || Permissions.has(player, Permission.WAVE)) { - buildCommand(sender, ChatColor.RED, "/" + command + " moderation", - "Click this command to view a list of moderation commands."); - } - if (!isPlayer || Permissions.has(player, Permission.CONDITION)) { - buildCommand(sender, ChatColor.RED, "/" + command + " conditions", - "Click this command to view a list of conditional commands."); - } - break; - case "moderation": - boolean permission = false; - - if (isPlayer && DetectionNotifications.hasPermission(player)) { - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " notifications [frequency]", - "This command can be used to receive chat messages whenever a player is suspected of using hack modules.", null); - } - if (isPlayer && info) { - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " info [player]", - "This command can be used to view useful information about a player and execute actions upon them.", null); - } - if (!isPlayer || Permissions.has(player, Permission.USE_BYPASS)) { - permission = true; - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " bypass [seconds]", - "This command can be used to cause a player to temporarily bypass a check and its detections.", null); - } - if (!isPlayer || Permissions.has(player, Permission.WARN)) { - permission = true; - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " warn ", - "This command can be used to individually warn a player about something important.", null); - } - if (!isPlayer || Permissions.has(player, Permission.KICK)) { - permission = true; - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " kick ", - "This command can be used to kick players from the server for a specific reason.", null); - } - if (!isPlayer || Permissions.has(player, Permission.WAVE)) { - permission = true; - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " wave [player] [command]", - "This command can be used to add a player to a list with a command representing their punishment. " + - "This list can be executed manually by a player or automatically based on the plugin's configuration, " + - "and cause added players to punished all at once and in order." - + "\n\n" - + "Example: /" + command + " wave add playerName ban {player} You have been banned for hacking!", null); - } - if (!isPlayer || Permissions.has(player, Permission.ADMIN)) { - permission = true; - ClickableMessage.sendCommand(sender, ChatColor.RED + "/" + command + " proxy-command ", - "This command can be used to transfer commands to the proxy/network of servers. (Example: BungeeCord)", null); - } - - if (!permission) { - completeMessage(sender, "default"); - } - break; - case "conditions": - if (!isPlayer || Permissions.has(player, Permission.CONDITION)) { - sender.sendMessage(ChatColor.RED + "/" + command + " if equals do "); - sender.sendMessage(ChatColor.RED + "/" + command + " if contains do "); - sender.sendMessage(ChatColor.RED + "/" + command + " if is-less-than do "); - sender.sendMessage(ChatColor.RED + "/" + command + " if is-greater-than do "); - } else { - completeMessage(sender, "default"); - } - break; - case "commands": - sender.sendMessage(ChatColor.RED + "Run '/spartan commands' for a list of commands"); - default: - break; - } - } - } - - public static int num(final String s) { - return Integer.parseInt(s); - } - - public static double dbl(final String s) { - return Double.parseDouble(s); - } - - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - boolean isPlayer = sender instanceof Player; - - if (label.equalsIgnoreCase(Register.plugin.getName()) && (isPlayer || sender instanceof ConsoleCommandSender)) { - SpartanPlayer player = isPlayer ? SpartanBukkit.getPlayer((Player) sender) : null; - - if (isPlayer && player == null) { - return false; - } - if (args.length == 1) { - if (isPlayer && args[0].equalsIgnoreCase("Menu")) { - SpartanMenu.mainMenu.open(player); - - } else if (args[0].equalsIgnoreCase("Moderation")) { - completeMessage(sender, args[0].toLowerCase()); - - } else if (args[0].equalsIgnoreCase("Conditions")) { - completeMessage(sender, args[0].toLowerCase()); - - } else if (args[0].equalsIgnoreCase("Reload") || args[0].equalsIgnoreCase("Rl")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.RELOAD)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - Config.reload(sender); - - } else if (isPlayer && args[0].equalsIgnoreCase("Info")) { - if (!Permissions.has((Player) sender, Permission.INFO)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - SpartanMenu.playerInfo.open(player, sender.getName()); - - } else if (isPlayer && args[0].equalsIgnoreCase("Notifications")) { - if (!DetectionNotifications.hasPermission(player)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - DetectionNotifications.toggle(player, 0); - - } else if (Compatibility.CompatibilityType.MinigameMaker.isFunctional() && args[0].equalsIgnoreCase("Add-Incompatible-Item")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - int counter = 0; - StringBuilder events = new StringBuilder(); - - for (Events.EventType eventType : Events.EventType.values()) { - counter++; - String event = eventType.toString().toLowerCase().replace("_", "-"); - - if (counter % 2 == 0) { - events.append(ChatColor.YELLOW).append(event).append(ChatColor.DARK_GRAY).append(", "); - } else { - events.append(ChatColor.GRAY).append(event).append(ChatColor.DARK_GRAY).append(", "); - } - } - events = new StringBuilder(events.substring(0, events.length() - 2)); - sender.sendMessage(""); - sender.sendMessage(ChatColor.GOLD + "Events: " + events); - sender.sendMessage(ChatColor.LIGHT_PURPLE + "Hint: use %spc% for space characters."); - sender.sendMessage(ChatColor.RED + "Usage: /spartan add-incompatible-item [name] "); - sender.sendMessage(ChatColor.RED + "Usage: /spartan add-incompatible-item [name] "); - sender.sendMessage(ChatColor.GREEN + "Example #1: /spartan add-incompatible-item block-break diamond-pickaxe FastPlace|FastBreak|BlockReach 3"); - sender.sendMessage(ChatColor.GREEN + "Example #2: /spartan add-incompatible-item player-hand-damage-player iron-sword arthur's%spc%excalibur KillAura 1"); - sender.sendMessage(""); - - if (isPlayer) { - SpartanMenu.supportIncompatibleItems.open(player); - } - - } else { - completeMessage(sender, "default"); - } - } else if (args.length >= 2) { - if (args[0].equalsIgnoreCase("Proxy-Command")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - StringBuilder argumentsToStringBuilder = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - argumentsToStringBuilder.append(args[i]).append(" "); - } - String argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); - - if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { - sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); - return true; - } - if (!NetworkUtils.executeCommand(isPlayer ? player.getPlayer() : null, argumentsToString)) { - sender.sendMessage(Config.messages.getColorfulString("failed_command")); - return true; - } - sender.sendMessage(Config.messages.getColorfulString("successful_command")); - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("Wave")) { - String command = args[1]; - - if (isPlayer && !Permissions.has((Player) sender, Permission.WAVE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (command.equalsIgnoreCase("Run")) { - if (Wave.getWaveList().length == 0) { - sender.sendMessage(Config.messages.getColorfulString("empty_wave_list")); - return true; - } - if (!Wave.start()) { - sender.sendMessage(Config.messages.getColorfulString("failed_command")); - } - } else if (command.equalsIgnoreCase("Clear")) { - Wave.clear(); - sender.sendMessage(Config.messages.getColorfulString("wave_clear_message")); - } else if (command.equalsIgnoreCase("List")) { - sender.sendMessage(ChatColor.GRAY + "Wave Queued Players" + ChatColor.DARK_GRAY + ":"); - sender.sendMessage(Wave.getWaveListString()); - } else { - completeMessage(sender, "moderation"); - } - - } else if (isPlayer && args[0].equalsIgnoreCase("Info")) { - if (!Permissions.has((Player) sender, Permission.INFO)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - SpartanMenu.playerInfo.open(player, ConfigUtils.replaceWithSyntax(args[1], null)); - - } else if (args[0].equalsIgnoreCase("Toggle")) { - String check = args[1]; - - if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - boolean exists = false; - - for (Enums.HackType hackType : Enums.HackType.values()) { - if (hackType.getCheck().getName().equalsIgnoreCase(check)) { - check = hackType.toString(); - exists = true; - break; - } - } - if (exists) { - Enums.HackType type = Enums.HackType.valueOf(check); - Check checkObj = type.getCheck(); - - if (checkObj.isEnabled(null, null, null)) { - checkObj.setEnabled(null, false); - String message = Config.messages.getColorfulString("check_disable_message"); - message = ConfigUtils.replaceWithSyntax(isPlayer ? (Player) sender : null, message, type); - sender.sendMessage(message); - } else { - checkObj.setEnabled(null, true); - String message = Config.messages.getColorfulString("check_enable_message"); - message = ConfigUtils.replaceWithSyntax(isPlayer ? (Player) sender : null, message, type); - sender.sendMessage(message); - } - } else { - sender.sendMessage(Config.messages.getColorfulString("non_existing_check")); - } - - } else if (args[0].equalsIgnoreCase("Customer-Support")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - AwarenessNotifications.forcefullySend(sender, "Please wait..."); - - SpartanBukkit.connectionThread.execute(() -> { - Enums.HackType[] hackTypes = Enums.HackType.values(); - Set set = new HashSet<>(hackTypes.length); - - for (Enums.HackType hackType : hackTypes) { - if (hackType.getCheck().getProblematicDetections() > 0) { - set.add(hackType); - } - } - int size = set.size(); - - if (size > 0) { - String discordTag = args[1]; - - for (Enums.HackType hackType : set) { - AwarenessNotifications.forcefullySend(sender, - hackType.getCheck().getName() + ": " + CloudConnections.sendCustomerSupport(discordTag, hackType.toString(), "Identified Problematic Detection", false) - ); - } - } else { - AwarenessNotifications.forcefullySend(sender, "No problematic checks found, please specify a check name instead. (Example: /spartan customer-support " + Enums.HackType.values()[0] + " DiscordName#0001 Explanation)"); - } - }); - - } else if (isPlayer && args[0].equalsIgnoreCase("Notifications")) { - if (!DetectionNotifications.hasPermission(player)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - String divisorString = args[1]; - - if (AlgebraUtils.validInteger(divisorString)) { - int divisor = Math.min(Integer.parseInt(divisorString), Check.maxViolationsPerCycle); - - if (divisor > 0) { - Integer cachedDivisor = DetectionNotifications.getDivisor(player, true); - - if (cachedDivisor != null && cachedDivisor != divisor) { - DetectionNotifications.change(player, divisor, true); - } else { - DetectionNotifications.toggle(player, divisor); - } - } else { - completeMessage(sender, "moderation"); - } - } else { - completeMessage(sender, "moderation"); - } - - } else { - completeMessage(sender, "default"); - } - } else { // 3 or more arguments - StringBuilder argumentsToStringBuilder = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - argumentsToStringBuilder.append(args[i]).append(" "); - } - String argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); - - if (args[0].equalsIgnoreCase("Kick")) { - SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); - - if (isPlayer && !Permissions.has((Player) sender, Permission.KICK)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { - sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); - return true; - } - if (t == null) { - sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); - return true; - } - t.kick(sender, argumentsToString); - - } else if (args[0].equalsIgnoreCase("Warn")) { - SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); - - if (isPlayer && !Permissions.has((Player) sender, Permission.WARN)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { - sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); - return true; - } - if (t == null) { - sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); - return true; - } - t.warn(sender, argumentsToString); - - } else if (args[0].equalsIgnoreCase("Bypass")) { - boolean noSeconds = args.length == 3; - - if (noSeconds || args.length == 4) { - Enums.HackType[] hackTypes = Enums.HackType.values(); - int maxHackTypes = hackTypes.length; - SpartanPlayer t = SpartanBukkit.getPlayer(args[1]); - String[] checks = args[2].split(",", maxHackTypes); - String sec = noSeconds ? null : args[3]; - - if (isPlayer && !Permissions.has((Player) sender, Permission.USE_BYPASS)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (t == null) { - sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); - return true; - } - List found = new ArrayList<>(maxHackTypes); - - for (String check : checks) { - for (Enums.HackType hackType : hackTypes) { - if (hackType.getCheck().getName().equalsIgnoreCase(check)) { - found.add(hackType); - break; - } - } - } - if (!found.isEmpty()) { - for (Enums.HackType hackType : found) { - int seconds = noSeconds ? 0 : Integer.parseInt(sec); - - if (noSeconds) { - t.getViolations(hackType).addDisableCause("Command-" + sender.getName(), null, 0); - } else { - if (seconds < 1 || seconds > 3600) { - sender.sendMessage(ChatColor.RED + "Seconds must be between 1 and 3600."); - return true; - } - t.getViolations(hackType).addDisableCause("Command-" + sender.getName(), null, seconds * 20); - } - String message = ConfigUtils.replaceWithSyntax(t, Config.messages.getColorfulString("bypass_message"), hackType) - .replace("{time}", noSeconds ? "infinite" : String.valueOf(seconds)); - sender.sendMessage(message); - } - } else { - sender.sendMessage(Config.messages.getColorfulString("non_existing_check")); - } - } else { - completeMessage(sender, "moderation"); - } - } else if (args[0].equalsIgnoreCase("Wave")) { - String command = args[1]; - OfflinePlayer t = Bukkit.getOfflinePlayer(args[2]); - - if (isPlayer && !Permissions.has((Player) sender, Permission.WAVE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (command.equalsIgnoreCase("add") && args.length >= 4) { - if (Wave.getWaveList().length >= 100) { - sender.sendMessage(Config.messages.getColorfulString("full_wave_list")); - return true; - } - argumentsToStringBuilder = new StringBuilder(); - for (int i = 3; i < args.length; i++) { - argumentsToStringBuilder.append(args[i]).append(" "); - } - argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); - - if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { - sender.sendMessage(Config.messages.getColorfulString("massive_command_reason")); - return true; - } - String message = Config.messages.getColorfulString("wave_add_message"); - message = ConfigUtils.replaceWithSyntax(t, message, null); - sender.sendMessage(message); - Wave.add(t.getUniqueId(), argumentsToString); // After to allow for further messages to take palce - } else if (command.equalsIgnoreCase("remove")) { - UUID uuid = t.getUniqueId(); - - if (Wave.getCommand(uuid) == null) { - String message = Config.messages.getColorfulString("wave_not_added_message"); - message = ConfigUtils.replaceWithSyntax(t, message, null); - sender.sendMessage(message); - return true; - } - Wave.remove(uuid); - String message = Config.messages.getColorfulString("wave_remove_message"); - message = ConfigUtils.replaceWithSyntax(t, message, null); - sender.sendMessage(message); - } else { - completeMessage(sender, "moderation"); - } - - } else if (args.length == 3 && args[0].equalsIgnoreCase("Customer-Support")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - AwarenessNotifications.forcefullySend(sender, "Please wait..."); - - SpartanBukkit.connectionThread.execute(() -> { - String check = args[1]; - String discordTag = args[2]; - AwarenessNotifications.forcefullySend(sender, CloudConnections.sendCustomerSupport(discordTag, check, "No Provided Description", false)); - }); - } else if (args.length >= 4) { - argumentsToStringBuilder = new StringBuilder(); - for (int i = 3; i < args.length; i++) { - argumentsToStringBuilder.append(args[i]).append(" "); - } - argumentsToString = argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1); - - if (args[0].equalsIgnoreCase("Customer-Support")) { - if (isPlayer && !Permissions.has((Player) sender, Permission.ADMIN)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - if (isPlayer ? argumentsToString.length() > player.getMaxChatLength() : argumentsToString.length() > maxConnectedArgumentLength) { - sender.sendMessage(Config.messages.getColorfulString("failed_command")); // Different reply, do not change - return true; - } - String argumentsToStringThreaded = argumentsToString; - AwarenessNotifications.forcefullySend(sender, "Please wait..."); - - SpartanBukkit.connectionThread.execute(() -> { - String check = args[1]; - String discordTag = args[2]; - AwarenessNotifications.forcefullySend(sender, CloudConnections.sendCustomerSupport(discordTag, check, argumentsToStringThreaded, false)); - }); - - } else if (Compatibility.CompatibilityType.MinigameMaker.isFunctional() && args[0].equalsIgnoreCase("Add-Incompatible-Item")) { - if (args.length == 6) { - if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - String seconds = args[5]; - - if (AlgebraUtils.validInteger(seconds) && MinigameMaker.addItem(args[1], args[2], args[4], args[3], Math.max(Integer.parseInt(seconds), 1))) { - if (isPlayer) { - SpartanMenu.supportIncompatibleItems.open(player); - } else { - sender.sendMessage(ChatColor.GREEN + "Incompatible item successfully added."); - } - } else { - Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); - } - } else if (args.length == 5) { - if (isPlayer && !Permissions.has((Player) sender, Permission.MANAGE)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - String seconds = args[4]; - - if (AlgebraUtils.validInteger(seconds) && MinigameMaker.addItem(args[1], args[2], args[3], "%spc%", Math.max(Integer.parseInt(seconds), 1))) { - if (isPlayer) { - SpartanMenu.supportIncompatibleItems.open(player); - } else { - sender.sendMessage(ChatColor.GREEN + "Incompatible item successfully added."); - } - } else { - Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); - } - } else { - Bukkit.dispatchCommand(sender, "spartan add-incompatible-item"); - } - } else if (args.length >= 7) { - if (isPlayer && !Permissions.has((Player) sender, Permission.CONDITION)) { - sender.sendMessage(Config.messages.getColorfulString("no_permission")); - return true; - } - SpartanPlayer t = SpartanBukkit.getPlayer(args[0]); - - if (t == null) { - sender.sendMessage(Config.messages.getColorfulString("player_not_found_message")); - return true; - } - if (args[1].equalsIgnoreCase("if") && args[5].equalsIgnoreCase("do")) { - final String condition = ConfigUtils.replaceWithSyntax(t, args[2], null); - final String result = ConfigUtils.replaceWithSyntax(t, args[4], null); - - argumentsToStringBuilder = new StringBuilder(); - for (int i = 6; i < args.length; i++) { - argumentsToStringBuilder.append(args[i]).append(" "); - } - final String command = ConfigUtils.replaceWithSyntax(t, argumentsToStringBuilder.substring(0, argumentsToStringBuilder.length() - 1), null); - - switch (args[3].toLowerCase()) { - case "equals": - case "=": - if (condition.equalsIgnoreCase(result)) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - } - break; - case "not-equals": - case "/=": - if (!condition.equalsIgnoreCase(result)) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - } - break; - case "contains": - if (condition.contains(result)) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - } - break; - case "is-less-than": - case "<": - if (AlgebraUtils.validInteger(condition) && AlgebraUtils.validInteger(result) && num(condition) < num(result) - || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validDecimal(result) && dbl(condition) < dbl(result) - || AlgebraUtils.validInteger(condition) && AlgebraUtils.validDecimal(result) && num(condition) < dbl(result) - || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validInteger(result) && dbl(condition) < num(result)) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - } - break; - case "is-greater-than": - case ">": - if (AlgebraUtils.validInteger(condition) && AlgebraUtils.validInteger(result) && num(condition) > num(result) - || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validDecimal(result) && dbl(condition) > dbl(result) - || AlgebraUtils.validInteger(condition) && AlgebraUtils.validDecimal(result) && num(condition) > dbl(result) - || AlgebraUtils.validDecimal(condition) && AlgebraUtils.validInteger(result) && dbl(condition) > num(result)) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - } - break; - default: - break; - } - } - } - } else { - completeMessage(sender, "default"); - } - } - } else if (isPlayer && SpartanMenu.mainMenu.open(player, false)) { - completeMessage(sender, "commands"); - } else { - completeMessage(sender, "default"); - } - } - return false; - } -} diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventHandler_Incompatible.java b/src/main/java/com/vagdedes/spartan/listeners/EventHandler_Incompatible.java similarity index 81% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventHandler_Incompatible.java rename to src/main/java/com/vagdedes/spartan/listeners/EventHandler_Incompatible.java index 55e9960..6f91b37 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventHandler_Incompatible.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventHandler_Incompatible.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler1.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler1.java similarity index 82% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler1.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler1.java index d0184f3..93e1694 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler1.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler1.java @@ -1,22 +1,20 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.profiling.PlayerFight; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.inventory.ImpossibleInventory; import com.vagdedes.spartan.compatibility.manual.damage.NoHitDelay; -import com.vagdedes.spartan.configuration.Config; import com.vagdedes.spartan.functionality.chat.ChatProtection; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Explosion; +import com.vagdedes.spartan.functionality.identifiers.simple.DetectionLocation; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.management.Config; import com.vagdedes.spartan.functionality.performance.MaximumCheckedPlayers; -import com.vagdedes.spartan.functionality.protections.Explosion; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.protections.ReconnectCooldown; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.DetectionLocation; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.profiling.PlayerFight; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -51,7 +49,7 @@ private void Join(PlayerJoinEvent e) { SpartanBukkit.runDelayedTask(p, () -> { if (p != null) { Config.settings.runOnLogin(p); - CloudFeature.announce(p); + CloudBase.announce(p); } }, 10); } @@ -68,11 +66,9 @@ private void Leave(PlayerQuitEvent e) { MaximumCheckedPlayers.remove(p); // Utils - Permissions.remove(p); PlayerLimitPerIP.remove(p); // Features - ReconnectCooldown.remove(n); ChatProtection.remove(p); // System diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler10.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler10.java similarity index 88% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler10.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler10.java index 7aa24bb..1585914 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler10.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler10.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler2.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler2.java similarity index 90% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler2.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler2.java index 635445d..74217f4 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler2.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler2.java @@ -1,12 +1,12 @@ -package com.vagdedes.spartan.interfaces.listeners; - -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.tracking.CombatProcessing; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +package com.vagdedes.spartan.listeners; + +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.tracking.CombatProcessing; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Location; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler3.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler3.java similarity index 87% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler3.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler3.java index 9b4d317..3d2640e 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler3.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler3.java @@ -1,21 +1,20 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.movement.NoFall; import com.vagdedes.spartan.compatibility.manual.abilities.ItemsAdder; import com.vagdedes.spartan.functionality.chat.ChatProtection; import com.vagdedes.spartan.functionality.chat.StaffChat; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.protections.Explosion; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.protections.ReconnectCooldown; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.FloorProtection; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.Liquid; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Explosion; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.FloorProtection; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Liquid; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.GameMode; import org.bukkit.block.Block; @@ -132,10 +131,7 @@ private void Login(PlayerLoginEvent e) { UUID uuid = n.getUniqueId(); // Protections - CheckProtection.cancel(uuid, SpartanBukkit.hasResourcePack ? 100 : 5); - - // Configuration - ReconnectCooldown.run(n, e); + CheckDelay.cancel(uuid, 5); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler4.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler4.java similarity index 84% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler4.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler4.java index 241b12f..215486f 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler4.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler4.java @@ -1,12 +1,12 @@ -package com.vagdedes.spartan.interfaces.listeners; - -import com.vagdedes.spartan.abstraction.InventoryMenu; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.gui.SpartanMenu; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Piston; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +package com.vagdedes.spartan.listeners; + +import com.vagdedes.spartan.abstraction.inventory.InventoryMenu; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Piston; +import com.vagdedes.spartan.functionality.inventory.InteractiveInventory; +import com.vagdedes.spartan.functionality.protections.CheckDelay; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.StringUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Material; @@ -26,7 +26,7 @@ public class EventsHandler4 implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void WorldSave(WorldSaveEvent e) { - CheckProtection.cancel(60, 30); + CheckDelay.cancel(60, 30); } @EventHandler(priority = EventPriority.HIGHEST) @@ -98,7 +98,7 @@ private void InventoryClick(InventoryClickEvent e) { | p.getViolations(Enums.HackType.InventoryClicks).process()) { e.setCancelled(true); } else if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { - for (InventoryMenu menu : SpartanMenu.menus) { + for (InventoryMenu menu : InteractiveInventory.menus) { if (menu.handle(p, title, item, click, slot)) { e.setCancelled(true); break; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler5.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler5.java similarity index 90% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler5.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler5.java index 5602585..429f71d 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler5.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler5.java @@ -1,14 +1,14 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.abilities.ItemsAdder; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.BouncingBlocks; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Explosion; +import com.vagdedes.spartan.functionality.identifiers.simple.Building; +import com.vagdedes.spartan.functionality.identifiers.simple.SensitiveBlockBreak; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.protections.Building; -import com.vagdedes.spartan.functionality.protections.Explosion; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.BouncingBlocks; -import com.vagdedes.spartan.handlers.identifiers.simple.SensitiveBlockBreak; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler6.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler6.java similarity index 92% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler6.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler6.java index b09e8fe..145a610 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler6.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler6.java @@ -1,21 +1,21 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.compatibility.manual.abilities.ItemsAdder; import com.vagdedes.spartan.compatibility.manual.abilities.mcmmo.mcMMO; import com.vagdedes.spartan.compatibility.manual.building.MythicMobs; import com.vagdedes.spartan.compatibility.manual.damage.NoHitDelay; import com.vagdedes.spartan.compatibility.manual.essential.Essentials; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.configuration.Config; import com.vagdedes.spartan.functionality.chat.ChatProtection; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.protections.Explosion; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.FloorProtection; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.handlers.stability.TestServer; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Explosion; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.FloorProtection; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TestServer; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import com.vagdedes.spartan.utils.gameplay.MoveUtils; import me.vagdedes.spartan.system.Enums; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler7.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler7.java similarity index 69% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler7.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler7.java index d165c2d..fc9dcda 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler7.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler7.java @@ -1,5 +1,7 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.exploits.Exploits; import com.vagdedes.spartan.checks.inventory.ImpossibleInventory; import com.vagdedes.spartan.checks.movement.MorePackets; @@ -8,15 +10,14 @@ import com.vagdedes.spartan.checks.movement.irregularmovements.IrregularMovements; import com.vagdedes.spartan.checks.movement.speed.Speed; import com.vagdedes.spartan.functionality.chat.ChatProtection; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.protections.CheckDelay; import com.vagdedes.spartan.functionality.protections.ServerFlying; -import com.vagdedes.spartan.handlers.identifiers.simple.CheckProtection; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.tracking.CombatProcessing; -import com.vagdedes.spartan.handlers.tracking.MovementProcessing; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.tracking.CombatProcessing; +import com.vagdedes.spartan.functionality.tracking.MovementProcessing; import com.vagdedes.spartan.utils.gameplay.PlayerData; +import com.vagdedes.spartan.utils.java.HashHelper; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Location; @@ -33,7 +34,6 @@ public class EventsHandler7 implements Listener { - private static boolean heavyMovementChecks = false; public static final Enums.HackType[] handledChecks = new Enums.HackType[]{ NoFall.check, IrregularMovements.check, @@ -44,27 +44,6 @@ public class EventsHandler7 implements Listener { Exploits.check }; - static { - refresh(); - } - - public static void refresh() { - heavyMovementChecks = false; - - for (Enums.HackType hackType : - new Enums.HackType[]{ - NoFall.check, - IrregularMovements.check, - NoSlowdown.check, - Speed.check, - MorePackets.check}) { - if (hackType.getCheck().isEnabled(null, null, null)) { - heavyMovementChecks = true; - break; - } - } - } - @EventHandler(priority = EventPriority.HIGHEST) private void PlayerFlight(PlayerToggleFlightEvent e) { Player n = e.getPlayer(); @@ -149,10 +128,40 @@ private void Move(PlayerMoveEvent e) { box = toY - to.getBlockY(), ver = toY - fromY, hor = Math.sqrt(preXZ); + float fall = p.getFallDistance(); boolean crawling = p.isCrawling(); + // Patterns + long situation = HashHelper.hashPlayer(p); + situation = HashHelper.extendLong(situation, HashHelper.hashEnvironment(p, to)); + SpartanBukkit.movementPatterns.all.collect( + p.getProfile(), + situation, + dis, + dis != 0.0 || p.getValueOrDefault(p.getPreviousNmsDistance(), 0.0) != 0.0 + ); + SpartanBukkit.movementPatterns.horizontal.collect( + p.getProfile(), + situation, + hor, + hor != 0.0 || p.getValueOrDefault(p.getPreviousNmsHorizontalDistance(), 0.0) != 0.0 + ); + SpartanBukkit.movementPatterns.vertical.collect( + p.getProfile(), + situation, + ver, + ver != 0.0 || p.getValueOrDefault(p.getPreviousNmsVerticalDistance(), 0.0) != 0.0 + ); + SpartanBukkit.movementPatterns.fall.collect( + p.getProfile(), + situation, + fall, + fall != 0.0 || p.getValueOrDefault(p.getPreviousNmsFall(), 0.0f) != 0.0 + ); + SpartanBukkit.movementPatterns.store(); + // Handlers - MovementProcessing.run(p, dis, hor, ver, box, crawling); + MovementProcessing.run(p, dis, hor, ver, box, fall, crawling); CombatProcessing.runMove(p, to); // Detections @@ -163,9 +172,7 @@ private void Move(PlayerMoveEvent e) { } p.getExecutor(Enums.HackType.Exploits).handle(cancelled, dis); - if ((dis == 0.0 && p.getCustomDistance() == 0.0 - || dis < 0.01 && p.getCustomDistance() < 0.01 && ver == 0.0) - && p.isOnGround() && p.isOnGroundCustom()) { + if (dis == 0.0) { return; } @@ -175,16 +182,14 @@ private void Move(PlayerMoveEvent e) { p.getExecutor(Enums.HackType.Exploits).handle(cancelled, Exploits.CHUNK); p.getExecutor(Enums.HackType.Speed).handle(cancelled, Speed.SPRINT); } - if (heavyMovementChecks) { - if (!crawling) { - p.getExecutor(Enums.HackType.NoFall).run(cancelled); - p.getExecutor(Enums.HackType.NoSlowdown).run(cancelled); - } - p.getExecutor(Enums.HackType.IrregularMovements).run(cancelled); - p.getExecutor(Enums.HackType.Speed).run(cancelled); - p.getExecutor(Enums.HackType.Speed).handle(cancelled, Speed.WATER); - p.getExecutor(Enums.HackType.MorePackets).run(cancelled); + if (!crawling) { + p.getExecutor(Enums.HackType.NoFall).run(cancelled); + p.getExecutor(Enums.HackType.NoSlowdown).run(cancelled); } + p.getExecutor(Enums.HackType.IrregularMovements).run(cancelled); + p.getExecutor(Enums.HackType.Speed).run(cancelled); + p.getExecutor(Enums.HackType.Speed).handle(cancelled, Speed.WATER); + p.getExecutor(Enums.HackType.MorePackets).run(cancelled); } @EventHandler(priority = EventPriority.HIGHEST) @@ -199,7 +204,7 @@ private void WorldChange(PlayerChangedWorldEvent e) { p.resetLocationData(); // Detections - CheckProtection.cancel(p.uuid, 20); + CheckDelay.cancel(p.uuid, 20); // System Cache.clear(p, n, false, true, true, false, p.getLocation()); diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler8.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler8.java similarity index 93% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler8.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler8.java index fef2692..f36744b 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler8.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler8.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.handlers.identifiers.simple.VehicleAccess; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.simple.VehicleAccess; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler9.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler9.java similarity index 83% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler9.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler9.java index 42221b1..fb5f7eb 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler9.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler9.java @@ -1,11 +1,11 @@ -package com.vagdedes.spartan.interfaces.listeners; - -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.protections.PlayerLimitPerIP; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudConnections; -import com.vagdedes.spartan.handlers.identifiers.simple.VehicleAccess; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +package com.vagdedes.spartan.listeners; + +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.PlayerLimitPerIP; +import com.vagdedes.spartan.functionality.connection.cloud.CloudConnections; +import com.vagdedes.spartan.functionality.identifiers.simple.VehicleAccess; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.server.PluginUtils; import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_13.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_13.java similarity index 89% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_13.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_13.java index bbf3207..6f69951 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_13.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_13.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.TridentUse; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.TridentUse; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import me.vagdedes.spartan.system.Enums; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_9.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_9.java similarity index 76% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_9.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_9.java index 73370f8..aca1a55 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_1_9.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_1_9.java @@ -1,8 +1,8 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.ElytraUse; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.ElytraUse; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_non_folia.java b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_non_folia.java similarity index 88% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_non_folia.java rename to src/main/java/com/vagdedes/spartan/listeners/EventsHandler_non_folia.java index 16ee81e..7c3f833 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/EventsHandler_non_folia.java +++ b/src/main/java/com/vagdedes/spartan/listeners/EventsHandler_non_folia.java @@ -1,6 +1,6 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; -import com.vagdedes.spartan.handlers.stability.Chunks; +import com.vagdedes.spartan.functionality.server.Chunks; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; diff --git a/src/main/java/com/vagdedes/spartan/interfaces/listeners/PlibHandlers.java b/src/main/java/com/vagdedes/spartan/listeners/PlibHandlers.java similarity index 93% rename from src/main/java/com/vagdedes/spartan/interfaces/listeners/PlibHandlers.java rename to src/main/java/com/vagdedes/spartan/listeners/PlibHandlers.java index a91842e..19fb4ee 100644 --- a/src/main/java/com/vagdedes/spartan/interfaces/listeners/PlibHandlers.java +++ b/src/main/java/com/vagdedes/spartan/listeners/PlibHandlers.java @@ -1,17 +1,17 @@ -package com.vagdedes.spartan.interfaces.listeners; +package com.vagdedes.spartan.listeners; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketEvent; import com.vagdedes.spartan.Register; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.checks.movement.NoSlowdown; import com.vagdedes.spartan.compatibility.manual.essential.protocollib.ProtocolLib; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.CombatUtils; import com.vagdedes.spartan.utils.gameplay.PlayerData; diff --git a/src/main/java/com/vagdedes/spartan/objects/statistics/PatternStorage.java b/src/main/java/com/vagdedes/spartan/objects/statistics/PatternStorage.java deleted file mode 100644 index ee49d93..0000000 --- a/src/main/java/com/vagdedes/spartan/objects/statistics/PatternStorage.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.vagdedes.spartan.objects.statistics; - -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.utils.math.AlgebraUtils; - -import java.util.*; - -public class PatternStorage { - - private static final Collection instances = Collections.synchronizedList(new ArrayList<>()); - - public static void consider(PlayerProfile profile) { - synchronized (instances) { - for (PatternStorage instance : instances) { - instance.considerLocal(profile); - } - } - } - - public static void block(PlayerProfile profile) { - synchronized (instances) { - for (PatternStorage instance : instances) { - instance.blockLocal(profile); - } - } - } - - // Separator - - private final String key; - private final int[] generalizations; - private final boolean generalization; - private final Map> available, unavailable; - private final Map>> correlations; - private final Set blocked; - - public PatternStorage(String key, int[] generalizations) { - this.key = key; - this.blocked = Collections.synchronizedSet(new HashSet<>()); - - this.generalizations = generalizations; - this.generalization = generalizations.length > 0; - - this.correlations = Collections.synchronizedMap(new LinkedHashMap<>()); - - this.available = Collections.synchronizedMap(new LinkedHashMap<>()); - this.available.put(0, new ArrayList<>()); - - this.unavailable = Collections.synchronizedMap(new LinkedHashMap<>()); - this.unavailable.put(0, new ArrayList<>()); - - for (int generalization : generalizations) { - this.available.put(generalization, new ArrayList<>()); - this.unavailable.put(generalization, new ArrayList<>()); - } - synchronized (instances) { - instances.add(this); - } - } - - // Separator - - public void store() { - // todo - } - - public void load() { - // todo - } - - // Separator - - private void rawCache(Map> map, - SpartanPlayer player, PatternValue value, int generalization) { - map.get(generalization).add(value); - this.correlations.computeIfAbsent( - player.getProfile(), - k -> new LinkedHashMap<>() - ).computeIfAbsent( - generalization, - k -> new ArrayList<>() - ).add(value); - } - - public void cache(SpartanPlayer player, Number number) { - PatternValue value = new PatternValue(number); - boolean legitimate = player.getProfile().isLegitimate(); - - synchronized (legitimate ? this.available : this.unavailable) { - synchronized (this.correlations) { - Map> map = - legitimate ? this.available : this.unavailable; - this.rawCache(map, player, value, 0); - - if (this.generalization) { - for (int generalization : this.generalizations) { - this.rawCache( - map, - player, - new PatternValue(AlgebraUtils.cut(number.doubleValue(), generalization), value.time), - generalization - ); - } - } - } - } - } - - // Separator - - private void considerLocal(PlayerProfile profile) { - synchronized (this.blocked) { - if (this.blocked.contains(profile)) { - this.blocked.remove(profile); - Map> map = this.correlations.get(profile); - - if (map != null) { - for (Map.Entry> entry : map.entrySet()) { - synchronized (this.available) { - synchronized (this.unavailable) { - this.unavailable.get(entry.getKey()).removeAll(entry.getValue()); - this.available.get(entry.getKey()).addAll(entry.getValue()); - } - } - } - } - } - } - } - - private void blockLocal(PlayerProfile profile) { - synchronized (this.blocked) { - if (!this.blocked.contains(profile)) { - this.blocked.add(profile); - Map> map = this.correlations.get(profile); - - if (map != null) { - for (Map.Entry> entry : map.entrySet()) { - synchronized (this.available) { - synchronized (this.unavailable) { - this.available.get(entry.getKey()).removeAll(entry.getValue()); - this.unavailable.get(entry.getKey()).addAll(entry.getValue()); - } - } - } - } - } - } - } - - // Separator - - public Collection get() { - return this.get(0); - } - - public Collection get(int generalization) { - synchronized (this.available) { - return this.available.get(generalization); - } - } - - public Collection get(SpartanPlayer player, int count) { - return this.get(player, 0, count); - } - - public Collection get(SpartanPlayer player, int generalization, int count) { - synchronized (this.correlations) { - Map> map = this.correlations.get(player.uuid); - - if (map != null) { - Collection values = map.get(generalization); - - if (values != null) { - int size = values.size(); - - if (size > count) { - size--; - return new ArrayList<>(values).subList(size - count, size); - } - } - } - return new ArrayList<>(0); - } - } - - // Separator -} diff --git a/src/main/java/com/vagdedes/spartan/objects/statistics/PatternValue.java b/src/main/java/com/vagdedes/spartan/objects/statistics/PatternValue.java deleted file mode 100644 index 1401aee..0000000 --- a/src/main/java/com/vagdedes/spartan/objects/statistics/PatternValue.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.vagdedes.spartan.objects.statistics; - -public class PatternValue { - - public final Number number; - public final long time; - - PatternValue(Number number) { - this(number, System.currentTimeMillis()); - } - - PatternValue(Number number, long time) { - this.number = number; - this.time = time; - } -} diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/BlockUtils.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/BlockUtils.java index 8f37ffa..ad54d7b 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/BlockUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/BlockUtils.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.server.MaterialUtils; import org.bukkit.Material; import org.bukkit.World; diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/CombatUtils.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/CombatUtils.java index 9e9e797..e469319 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/CombatUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/CombatUtils.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.configuration.Compatibility; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.configuration.implementation.Compatibility; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.math.TrigonometryUtils; import com.vagdedes.spartan.utils.server.MaterialUtils; diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/GroundUtils.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/GroundUtils.java index 65bef95..efabeda 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/GroundUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/GroundUtils.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.java.HashHelper; import com.vagdedes.spartan.utils.server.MaterialUtils; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/MoveUtils.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/MoveUtils.java index d660852..c9ede24 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/MoveUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/MoveUtils.java @@ -1,8 +1,8 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.math.AlgebraUtils; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/PatternUtils.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/PatternUtils.java index a222eab..29cd215 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/PatternUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/PatternUtils.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.handlers.stability.Cache; -import com.vagdedes.spartan.handlers.stability.Chunks; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.management.Cache; +import com.vagdedes.spartan.functionality.server.Chunks; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.java.MemoryUtils; import me.vagdedes.spartan.system.Enums; import org.bukkit.Material; diff --git a/src/main/java/com/vagdedes/spartan/utils/gameplay/PlayerData.java b/src/main/java/com/vagdedes/spartan/utils/gameplay/PlayerData.java index 0c52287..475bc44 100644 --- a/src/main/java/com/vagdedes/spartan/utils/gameplay/PlayerData.java +++ b/src/main/java/com/vagdedes/spartan/utils/gameplay/PlayerData.java @@ -1,17 +1,17 @@ package com.vagdedes.spartan.utils.gameplay; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.BouncingBlocks; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.GroundCollision; -import com.vagdedes.spartan.handlers.identifiers.complex.predictable.Liquid; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.Damage; -import com.vagdedes.spartan.handlers.identifiers.complex.unpredictable.ExtremeCollision; -import com.vagdedes.spartan.handlers.identifiers.simple.VehicleAccess; -import com.vagdedes.spartan.objects.data.Buffer; -import com.vagdedes.spartan.objects.data.Cooldowns; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.data.Buffer; +import com.vagdedes.spartan.abstraction.data.Cooldowns; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.BouncingBlocks; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.GroundCollision; +import com.vagdedes.spartan.functionality.identifiers.complex.predictable.Liquid; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.Damage; +import com.vagdedes.spartan.functionality.identifiers.complex.unpredictable.ExtremeCollision; +import com.vagdedes.spartan.functionality.identifiers.simple.VehicleAccess; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.math.AlgebraUtils; import com.vagdedes.spartan.utils.server.MaterialUtils; import org.bukkit.GameMode; diff --git a/src/main/java/com/vagdedes/spartan/utils/java/HashHelper.java b/src/main/java/com/vagdedes/spartan/utils/java/HashHelper.java index b517cc3..1b7c639 100644 --- a/src/main/java/com/vagdedes/spartan/utils/java/HashHelper.java +++ b/src/main/java/com/vagdedes/spartan/utils/java/HashHelper.java @@ -1,11 +1,11 @@ package com.vagdedes.spartan.utils.java; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.statistics.PatternValue; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternValue; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.GroundUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; @@ -71,11 +71,11 @@ public static long hashFloat(float[] array, int generalize) { public static long fastCollection(Collection collection) { Iterator iterator = collection.iterator(); - long hash = (iterator.next().number.hashCode() * SpartanBukkit.hashCodeMultiplierLong) + collection.size(); + long hash = (iterator.next().pattern.hashCode() * SpartanBukkit.hashCodeMultiplierLong) + collection.size(); Number value = null; while (iterator.hasNext()) { - value = iterator.next().number; + value = iterator.next().pattern; } if (value != null) { hash = extendLong(hash, value.hashCode()); @@ -84,33 +84,39 @@ public static long fastCollection(Collection collection) { } public static long collection(Collection collection) { - long result = 1L; + long hash = 1L; for (PatternValue value : collection) { - result = extendLong(result, value.number.hashCode()); + hash = extendLong(hash, value.pattern.hashCode()); } - return result; + return hash; } - public static long collection(Collection collection, int start, int end) { - long hash = 1L; - int pos = 0; + public static long collection(Collection collection, int fromIndex, int toIndex) { Iterator iterator = collection.iterator(); - if (start > 0) { - for (int i = 0; i < start; i++) { - iterator.next(); + if (fromIndex > 0) { + for (int i = 0; i < fromIndex; i++) { + if (iterator.hasNext()) { + iterator.next(); + } else { + return 1L; + } } + } + long hash = 1L; + int pos = fromIndex; + while (iterator.hasNext()) { - if (pos >= end) { - break; - } else { - hash = extendLong(hash, iterator.next().number.hashCode()); - pos++; + hash = extendLong(hash, iterator.next().pattern.hashCode()); + + if (pos == toIndex) { + return hash; } + pos++; } - return hash; + return 1L; } // Separator @@ -134,12 +140,17 @@ public static long hashPlayer(SpartanPlayer player) { if (damage != null && TPS.getTick(player) == player.getDamageTick()) { hash = extendLong(hash, damage.getCause().ordinal()); } + hash = extendLong(hash, player.getGameMode().toString().hashCode()); hash = extendLong(hash, Double.hashCode(player.getEyeHeight())); hash = extendLong(hash, Boolean.hashCode(player.isGliding())); hash = extendLong(hash, Boolean.hashCode(player.isSwimming())); hash = extendLong(hash, Boolean.hashCode(player.isCrawling())); hash = extendLong(hash, Boolean.hashCode(player.isFrozen())); hash = extendLong(hash, Boolean.hashCode(player.isSneaking())); + hash = extendLong(hash, Boolean.hashCode(player.isFlying())); + hash = extendLong(hash, Boolean.hashCode(player.isOnGround())); + hash = extendLong(hash, Math.min(player.getTicksOnAir(), 20)); + hash = extendLong(hash, Math.min(AlgebraUtils.integerFloor(player.getPing() / TPS.tickTimeDecimal), 1000)); potionEffects = player.getActivePotionEffects(); } if (!potionEffects.isEmpty()) { diff --git a/src/main/java/com/vagdedes/spartan/utils/java/MemoryUtils.java b/src/main/java/com/vagdedes/spartan/utils/java/MemoryUtils.java index 1da047f..f836bc1 100644 --- a/src/main/java/com/vagdedes/spartan/utils/java/MemoryUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/java/MemoryUtils.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.utils.java; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import java.util.Collection; diff --git a/src/main/java/com/vagdedes/spartan/utils/java/RequestUtils.java b/src/main/java/com/vagdedes/spartan/utils/java/RequestUtils.java index 671c640..70c23a9 100644 --- a/src/main/java/com/vagdedes/spartan/utils/java/RequestUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/java/RequestUtils.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.utils.java; -import com.vagdedes.spartan.functionality.synchronicity.SpartanEdition; -import com.vagdedes.spartan.functionality.synchronicity.cloud.CloudFeature; +import com.vagdedes.spartan.functionality.connection.cloud.CloudBase; +import com.vagdedes.spartan.functionality.connection.cloud.SpartanEdition; import javax.net.ssl.HttpsURLConnection; import java.io.BufferedReader; @@ -21,7 +21,7 @@ public static String[] get(String link, String method, String message, int timeO boolean isPost = method.equals("POST"); String[] split = link.split(" "); - String token = CloudFeature.getToken(); + String token = CloudBase.getToken(); URL url = new URL(split[0]); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.addRequestProperty("User-Agent", diff --git a/src/main/java/com/vagdedes/spartan/utils/math/AlgebraUtils.java b/src/main/java/com/vagdedes/spartan/utils/math/AlgebraUtils.java index 47c464e..e5308fb 100644 --- a/src/main/java/com/vagdedes/spartan/utils/math/AlgebraUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/math/AlgebraUtils.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.utils.math; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; import org.bukkit.Location; import org.bukkit.util.NumberConversions; import org.bukkit.util.Vector; @@ -286,6 +286,15 @@ public static boolean validInteger(String str) { } } + public static boolean validLong(String str) { + try { + Long.parseLong(str); + return true; + } catch (Exception ex) { + return false; + } + } + public static Double returnValidDecimal(String str) { try { return Double.parseDouble(str); diff --git a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPie.java b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPie.java index 06b9c29..007ddd6 100644 --- a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPie.java +++ b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPie.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.utils.math.probability; -import com.vagdedes.spartan.objects.statistics.PatternValue; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternValue; import java.util.Collection; import java.util.Comparator; @@ -39,7 +39,7 @@ public ProbabilityPie addMultiple(Collection numbers) { public ProbabilityPie addMultiplePatterns(Collection values) { for (PatternValue value : values) { - this.add(value.number); + this.add(value.pattern); } return this; } @@ -99,17 +99,23 @@ public ProbabilityPie decrease(Number number, int amount) { // Separator - public double getChance(Number number) { - return this.getChance(number, 0.0); + public double getProbabilityWithCount(int count) { + return count / this.total; } - public double getChance(Number number, double defaultValue) { + public double getProbability(Number number) { + return this.getProbability(number, 0.0); + } + + public double getProbability(Number number, double defaultValue) { Integer count = this.map.get(number); return count != null ? count / this.total : defaultValue; } public Stream> getChancesRanked() { - return this.map.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())); + return this.map.entrySet().stream().sorted( + Map.Entry.comparingByValue(Comparator.reverseOrder()) + ); } // Separator @@ -131,4 +137,8 @@ public int getSlices() { public int getTotal() { return (int) this.total; } + + public boolean hasData() { + return this.total > 0; + } } diff --git a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPredictor.java b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPredictor.java index 0c93a59..fb2c609 100644 --- a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPredictor.java +++ b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityPredictor.java @@ -1,80 +1,61 @@ package com.vagdedes.spartan.utils.math.probability; -import com.vagdedes.spartan.objects.statistics.PatternValue; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternValue; import com.vagdedes.spartan.utils.java.HashHelper; import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; +import java.util.Iterator; +import java.util.LinkedList; public class ProbabilityPredictor { - private final Map outcomes; + public final ProbabilityPie pie; + public final double patternSignificance; - private static class ProbabilityPredictorOutcome { - public final ProbabilityPie pie; - public final double patternSignificance; + public ProbabilityPredictor(Collection> totalPatterns, + Collection currentPattern) { + this.pie = new ProbabilityPie(); - public ProbabilityPredictorOutcome(ProbabilityPie pie, - int patternCount, - int patternSize, - int allPatternsCount) { - this.pie = pie; - this.patternSignificance = (patternCount * patternSize) / (double) allPatternsCount; - } - } - - public ProbabilityPredictor() { - this(-1); - } - - public ProbabilityPredictor(int capacity) { - this.outcomes = capacity >= 0 ? new LinkedHashMap<>(capacity) : new LinkedHashMap<>(); - } + if (!totalPatterns.isEmpty()) { + long currentPatternHash = HashHelper.collection(currentPattern); + int currentPatternSize = currentPattern.size(), + totalPatternSize = 0; - public ProbabilityPredictorOutcome calculate(Collection allPatterns, - Collection currentPattern) { - int allPatternsSize = allPatterns.size(); + for (Collection allPatterns : totalPatterns) { + int allPatternsSize = allPatterns.size(); - if (allPatternsSize > 0) { - int patternSize = currentPattern.size(); - long patternHash = HashHelper.collection(currentPattern); + if (currentPatternSize <= allPatternsSize) { + totalPatternSize += allPatternsSize; + boolean next = false; + Iterator iterator = allPatterns.iterator(); + LinkedList list = new LinkedList<>(); - if (patternSize <= allPatternsSize) { - long hash = (HashHelper.fastCollection(allPatterns) * SpartanBukkit.hashCodeMultiplierLong) - + patternHash; - ProbabilityPredictorOutcome outcome = this.outcomes.get(hash); + for (int i = 0; i < currentPatternSize; i++) { + list.add(iterator.next()); + } - if (outcome != null) { - return outcome; - } else { - ProbabilityPie pie = new ProbabilityPie(); - boolean next = false; - int pos = 0, patternCount = 0; + while (iterator.hasNext()) { + PatternValue pattern = iterator.next(); + list.add(pattern); + list.removeFirst(); - for (PatternValue pattern : allPatterns) { if (next) { next = false; - patternCount++; - pie.add(pattern.number); + this.pie.add(pattern.pattern); } - if (patternHash == HashHelper.collection(allPatterns, pos - patternSize, pos)) { + if (currentPatternHash == HashHelper.collection(list)) { next = true; } - pos++; } - outcome = new ProbabilityPredictorOutcome( - pie, - patternCount, - patternSize, - allPatternsSize - ); - this.outcomes.put(hash, outcome); - return outcome; } } + if (totalPatternSize > 0) { + this.patternSignificance = (this.pie.getTotal() * currentPatternSize) / (double) totalPatternSize; + } else { + this.patternSignificance = 0.0; + } + } else { + this.patternSignificance = 0.0; } - return null; } -} +} \ No newline at end of file diff --git a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityRank.java b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityRank.java index 6294e6b..57a4a93 100644 --- a/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityRank.java +++ b/src/main/java/com/vagdedes/spartan/utils/math/probability/ProbabilityRank.java @@ -1,6 +1,6 @@ package com.vagdedes.spartan.utils.math.probability; -import com.vagdedes.spartan.objects.statistics.PatternValue; +import com.vagdedes.spartan.abstraction.pattern.implementation.base.PatternValue; import java.util.*; @@ -44,7 +44,7 @@ public ProbabilityRank addMultiple(Map map) { public ProbabilityRank addMultiplePatterns(Collection values) { for (PatternValue value : values) { - this.numbers.add(value.number.doubleValue()); + this.numbers.add(value.pattern.doubleValue()); } this.sorted = false; return this; @@ -82,4 +82,14 @@ public double getChance(Number number) { } return ((start + end) / 2.0) / this.numbers.size(); } + + // Separator + + public boolean hasData() { + return !this.numbers.isEmpty(); + } + + public int getTotal() { + return this.numbers.size(); + } } diff --git a/src/main/java/com/vagdedes/spartan/utils/server/ConfigUtils.java b/src/main/java/com/vagdedes/spartan/utils/server/ConfigUtils.java index f89faf7..5f3a829 100644 --- a/src/main/java/com/vagdedes/spartan/utils/server/ConfigUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/server/ConfigUtils.java @@ -1,17 +1,17 @@ package com.vagdedes.spartan.utils.server; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.functionality.important.Permissions; -import com.vagdedes.spartan.functionality.synchronicity.CrossServerInformation; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.profiling.PlayerProfile; -import com.vagdedes.spartan.objects.profiling.PunishmentHistory; -import com.vagdedes.spartan.objects.replicates.SpartanLocation; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.abstraction.check.Check; +import com.vagdedes.spartan.abstraction.profiling.PlayerProfile; +import com.vagdedes.spartan.abstraction.profiling.PunishmentHistory; +import com.vagdedes.spartan.abstraction.replicates.SpartanLocation; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.connection.cloud.CrossServerInformation; +import com.vagdedes.spartan.functionality.performance.ResearchEngine; +import com.vagdedes.spartan.functionality.server.MultiVersion; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.TPS; import com.vagdedes.spartan.utils.java.TimeUtils; import com.vagdedes.spartan.utils.math.AlgebraUtils; import me.vagdedes.spartan.api.API; @@ -230,18 +230,4 @@ public static void set(String path, Object value) { Register.plugin.saveConfig(); Register.plugin.reloadConfig(); } - - public static int getDirectorySize(String directory) { - File[] files = new File(directory).listFiles(); - int i = 0; - - if (files != null) { - for (File file : files) { - if (file.isFile()) { - i++; - } - } - } - return i; - } } diff --git a/src/main/java/com/vagdedes/spartan/utils/server/InventoryUtils.java b/src/main/java/com/vagdedes/spartan/utils/server/InventoryUtils.java index ef7eb40..fb94487 100644 --- a/src/main/java/com/vagdedes/spartan/utils/server/InventoryUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/server/InventoryUtils.java @@ -1,7 +1,7 @@ package com.vagdedes.spartan.utils.server; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import me.vagdedes.spartan.system.Enums; import org.bukkit.Material; import org.bukkit.OfflinePlayer; diff --git a/src/main/java/com/vagdedes/spartan/utils/server/MaterialUtils.java b/src/main/java/com/vagdedes/spartan/utils/server/MaterialUtils.java index 69db52c..1809e8d 100644 --- a/src/main/java/com/vagdedes/spartan/utils/server/MaterialUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/server/MaterialUtils.java @@ -1,9 +1,9 @@ package com.vagdedes.spartan.utils.server; -import com.vagdedes.spartan.functionality.important.MultiVersion; -import com.vagdedes.spartan.objects.replicates.SpartanBlock; -import com.vagdedes.spartan.objects.replicates.SpartanInventory; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; +import com.vagdedes.spartan.abstraction.replicates.SpartanBlock; +import com.vagdedes.spartan.abstraction.replicates.SpartanInventory; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.MultiVersion; import com.vagdedes.spartan.utils.gameplay.BlockUtils; import com.vagdedes.spartan.utils.gameplay.PlayerData; import com.vagdedes.spartan.utils.math.AlgebraUtils; diff --git a/src/main/java/com/vagdedes/spartan/utils/server/NetworkUtils.java b/src/main/java/com/vagdedes/spartan/utils/server/NetworkUtils.java index 0284d39..c80ab3e 100644 --- a/src/main/java/com/vagdedes/spartan/utils/server/NetworkUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/server/NetworkUtils.java @@ -1,10 +1,10 @@ package com.vagdedes.spartan.utils.server; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.server.Permissions; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/com/vagdedes/spartan/utils/server/PluginUtils.java b/src/main/java/com/vagdedes/spartan/utils/server/PluginUtils.java index 208f8a3..bd1ce67 100644 --- a/src/main/java/com/vagdedes/spartan/utils/server/PluginUtils.java +++ b/src/main/java/com/vagdedes/spartan/utils/server/PluginUtils.java @@ -1,26 +1,26 @@ package com.vagdedes.spartan.utils.server; import com.vagdedes.spartan.Register; -import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class PluginUtils { private static final List - exists = new ArrayList<>(), - contains = new ArrayList<>(); + exists = Collections.synchronizedList(new ArrayList<>()), + contains = Collections.synchronizedList(new ArrayList<>()); public static void clear() { - exists.clear(); - contains.clear(); - } - - public static boolean isCommandRegistered(String command) { - return Bukkit.getPluginCommand(command) != null; + synchronized (exists) { + synchronized (contains) { + exists.clear(); + contains.clear(); + } + } } public static List getDependentPlugins(String independent) { @@ -47,19 +47,22 @@ public static List getDependentPlugins(String independent) { } public static boolean contains(String key) { - if (contains.contains(key)) { - return true; - } - String[] split = key.toLowerCase().split(" "); + synchronized (contains) { + if (contains.contains(key)) { + return true; + } else { + String[] split = key.toLowerCase().split(" "); - for (Plugin p : Register.manager.getPlugins()) { - if (p.isEnabled()) { - String plugin = p.getName().toLowerCase(); + for (Plugin p : Register.manager.getPlugins()) { + if (p.isEnabled()) { + String plugin = p.getName().toLowerCase(); - for (String name : split) { - if (plugin.contains(name)) { - contains.add(key); - return true; + for (String name : split) { + if (plugin.contains(name)) { + contains.add(key); + return true; + } + } } } } @@ -77,13 +80,16 @@ public static boolean exists(String[] names) { } public static boolean exists(String name) { - if (exists.contains(name)) { - return true; - } - for (Plugin p : Register.manager.getPlugins()) { - if (p.isEnabled() && p.getName().equalsIgnoreCase(name)) { - exists.add(name); + synchronized (exists) { + if (exists.contains(name)) { return true; + } else { + for (Plugin p : Register.manager.getPlugins()) { + if (p.isEnabled() && p.getName().equalsIgnoreCase(name)) { + exists.add(name); + return true; + } + } } } return false; diff --git a/src/main/java/me/vagdedes/spartan/api/API.java b/src/main/java/me/vagdedes/spartan/api/API.java index 00b4994..9aafb63 100644 --- a/src/main/java/me/vagdedes/spartan/api/API.java +++ b/src/main/java/me/vagdedes/spartan/api/API.java @@ -120,10 +120,12 @@ public static void reloadConfig() { BackgroundAPI.reloadConfig(); } + @Deprecated public static void reloadPermissions() { BackgroundAPI.reloadPermissions(); } + @Deprecated public static void reloadPermissions(Player p) { BackgroundAPI.reloadPermissions(p); } @@ -269,6 +271,7 @@ public static void warnPlayer(Player p, String reason) { BackgroundAPI.warnPlayer(p, reason); } + @Deprecated public static void addPermission(Player p, Permission permission) { BackgroundAPI.addPermission(p, permission); } diff --git a/src/main/java/me/vagdedes/spartan/api/BackgroundAPI.java b/src/main/java/me/vagdedes/spartan/api/BackgroundAPI.java index a8e0fa2..b008638 100644 --- a/src/main/java/me/vagdedes/spartan/api/BackgroundAPI.java +++ b/src/main/java/me/vagdedes/spartan/api/BackgroundAPI.java @@ -1,19 +1,18 @@ package me.vagdedes.spartan.api; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.configuration.Config; -import com.vagdedes.spartan.functionality.important.Permissions; +import com.vagdedes.spartan.functionality.management.Config; +import com.vagdedes.spartan.functionality.server.Permissions; import com.vagdedes.spartan.functionality.moderation.Wave; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; import com.vagdedes.spartan.functionality.notifications.DetectionNotifications; -import com.vagdedes.spartan.functionality.protections.Latency; -import com.vagdedes.spartan.handlers.connection.IDs; -import com.vagdedes.spartan.handlers.stability.CancelViolation; -import com.vagdedes.spartan.handlers.stability.ResearchEngine; -import com.vagdedes.spartan.handlers.stability.TPS; -import com.vagdedes.spartan.objects.data.Handlers; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.system.SpartanBukkit; +import com.vagdedes.spartan.functionality.connection.Latency; +import com.vagdedes.spartan.functionality.connection.IDs; +import com.vagdedes.spartan.functionality.performance.CancelViolation; +import com.vagdedes.spartan.functionality.server.TPS; +import com.vagdedes.spartan.abstraction.data.Handlers; +import com.vagdedes.spartan.abstraction.replicates.SpartanPlayer; +import com.vagdedes.spartan.functionality.server.SpartanBukkit; import com.vagdedes.spartan.utils.gameplay.GroundUtils; import me.vagdedes.spartan.system.Enums; import me.vagdedes.spartan.system.Enums.HackType; @@ -151,7 +150,7 @@ static int getCancelViolation(HackType hackType, String worldName) { } static int getCancelViolation(HackType hackType) { - return CancelViolation.get(hackType, ResearchEngine.DataType.Universal); + return CancelViolation.get(hackType, Enums.DataType.Universal); } @Deprecated @@ -166,15 +165,17 @@ static void reloadConfig() { } } + @Deprecated static void reloadPermissions() { if (Config.settings.getBoolean("Important.enable_developer_api")) { - Permissions.clear(); + AwarenessNotifications.forcefullySend("The API method 'reloadPermissions' has been removed."); } } + @Deprecated static void reloadPermissions(Player p) { if (Config.settings.getBoolean("Important.enable_developer_api")) { - Permissions.remove(p.getUniqueId()); + AwarenessNotifications.forcefullySend("The API method 'reloadPermissions' has been removed."); } } @@ -401,9 +402,10 @@ static void warnPlayer(Player p, String reason) { AwarenessNotifications.forcefullySend("The API method 'warnPlayer' has been removed."); } + @Deprecated static void addPermission(Player p, Permission permission) { if (Config.settings.getBoolean("Important.enable_developer_api")) { - Permissions.add(p, permission); + AwarenessNotifications.forcefullySend("The API method 'addPermission' has been removed."); } } diff --git a/src/main/java/me/vagdedes/spartan/api/PlayerViolationEvent.java b/src/main/java/me/vagdedes/spartan/api/PlayerViolationEvent.java index 8d82f2f..bda3138 100644 --- a/src/main/java/me/vagdedes/spartan/api/PlayerViolationEvent.java +++ b/src/main/java/me/vagdedes/spartan/api/PlayerViolationEvent.java @@ -1,10 +1,6 @@ package me.vagdedes.spartan.api; import com.vagdedes.spartan.functionality.notifications.AwarenessNotifications; -import com.vagdedes.spartan.objects.replicates.SpartanPlayer; -import com.vagdedes.spartan.objects.system.Check; -import com.vagdedes.spartan.system.SpartanBukkit; -import me.vagdedes.spartan.system.Enums; import me.vagdedes.spartan.system.Enums.HackType; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/src/main/java/me/vagdedes/spartan/system/Enums.java b/src/main/java/me/vagdedes/spartan/system/Enums.java index 3293e9f..6f21210 100644 --- a/src/main/java/me/vagdedes/spartan/system/Enums.java +++ b/src/main/java/me/vagdedes/spartan/system/Enums.java @@ -1,7 +1,7 @@ package me.vagdedes.spartan.system; import com.vagdedes.spartan.Register; -import com.vagdedes.spartan.objects.system.Check; +import com.vagdedes.spartan.abstraction.check.Check; public class Enums { @@ -131,4 +131,24 @@ public String toString() { public enum ArmorState { Full, Semi, Empty } + + public enum DataType { + Java, Bedrock, Universal; + + public final String lowerCase; + + DataType() { + switch (this.ordinal()) { + case 0: + lowerCase = "java"; + break; + case 1: + lowerCase = "bedrock"; + break; + default: + lowerCase = "universal"; + break; + } + } + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 569c6fa..432d484 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,9 +1,9 @@ name: Spartan author: Evangelos Dedes @Vagdedes main: com.vagdedes.spartan.Register -version: Phase 532.2 +version: Phase 533 website: https://www.idealistic.ai -description: Machine Learning cheat prevention made simple. +description: In the mission to create & maintain the best Minecraft anti-cheat, powered by Machine Learning. api-version: 1.13 softdepend: [ProtocolLib, UltimateStatistics, FileGUI, MinigameMaker, AntiAltAccount, mcMMO, ProtocolSupport, VeinMiner, AcidRain, AcidIsland, EcoEnchants, CustomEnchantsPlus,