mirror of
https://github.com/jonesdevelopment/sonar.git
synced 2026-11-05 09:20:15 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7f48ecdf0 | ||
|
|
2c82047ac3 | ||
|
|
d03b8ff195 | ||
|
|
183bbc0019 | ||
|
|
31282d81c4 | ||
|
|
f0c143fadf | ||
|
|
6be001ede8 | ||
|
|
8044b92fb8 | ||
|
|
81b83b5123 | ||
|
|
a0c054e0a4 | ||
|
|
a668073d17 | ||
|
|
2653754590 | ||
|
|
7a1d22d922 | ||
|
|
f04703405d | ||
|
|
add066ea0e | ||
|
|
6bc2b1cb82 | ||
|
|
41e43bcba6 | ||
|
|
d7f150bf6d | ||
|
|
37101c665d | ||
|
|
4b3e88fcda | ||
|
|
b10a04294d | ||
|
|
0b06b59f3a | ||
|
|
a09beb9309 |
No files matched your search
@@ -53,6 +53,10 @@ Massive thanks to the sponsors of Sonar who help keep this project running:
|
||||
|
||||
<a href="https://github.com/Hydoxl"><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/107579333?v=4&h=50&w=50&fit=cover&mask=circle&maxage=7d" alt="logo" align="center"></a>
|
||||
|
||||
### Past Sponsors
|
||||
|
||||
<a href="https://github.com/ItzErpandX"><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/84748484?v=4?s=400?v=4&h=50&w=50&fit=cover&mask=circle&maxage=7d" alt="logo" align="center"></a>
|
||||
|
||||
## Building
|
||||
If you want to build your own version of Sonar, please take a look at the [Sonar building documentation](https://docs.jonesdev.xyz/development/building).
|
||||
<br>
|
||||
|
||||
+2
-2
@@ -33,8 +33,8 @@ import static xyz.jonesdev.sonar.api.profiler.SimpleProcessProfiler.*;
|
||||
import static xyz.jonesdev.sonar.api.timer.SystemTimer.DATE_FORMATTER;
|
||||
|
||||
@Getter
|
||||
public final class ActionBarNotificationHandler extends NotificationHandler {
|
||||
private int animationIndex;
|
||||
public class ActionBarNotificationHandler extends NotificationHandler {
|
||||
protected int animationIndex;
|
||||
|
||||
@Override
|
||||
public void handleNotification() {
|
||||
|
||||
+3
@@ -122,6 +122,7 @@ final class FallbackBukkitInboundHandler extends FallbackInboundHandlerAdapter {
|
||||
updateRegistry(FallbackPacketRegistry.LOGIN, Objects.requireNonNull(protocolVersion));
|
||||
break;
|
||||
default:
|
||||
byteBuf.release();
|
||||
throw ProtocolUtil.DEBUG ? new DecoderException("Bad handshake intent " + handshake.getIntent())
|
||||
: QuietDecoderException.INSTANCE;
|
||||
}
|
||||
@@ -146,6 +147,8 @@ final class FallbackBukkitInboundHandler extends FallbackInboundHandlerAdapter {
|
||||
|
||||
byteBuf.readerIndex(originalReaderIndex);
|
||||
ctx.fireChannelRead(byteBuf);
|
||||
} else {
|
||||
ctx.fireChannelRead(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,6 @@ dependencies {
|
||||
compileOnly(project(":api"))
|
||||
compileOnly(rootProject.libs.imagefilters)
|
||||
|
||||
testCompileOnly(project(":api"))
|
||||
testCompileOnly(rootProject.libs.imagefilters)
|
||||
testImplementation(project(":api"))
|
||||
testImplementation(rootProject.libs.imagefilters)
|
||||
}
|
||||
@@ -109,12 +109,12 @@ public final class StandardCaptchaGenerator implements CaptchaGenerator {
|
||||
// Randomize the colors for the gradient effect
|
||||
for (int i = 0; i < COLORS.length; i++) {
|
||||
final float random = 0.9f + RANDOM.nextFloat() * 0.1f;
|
||||
COLORS[i] = Color.getHSBColor(RANDOM.nextFloat(), random, random);
|
||||
COLORS[i] = Color.getHSBColor(RANDOM.nextFloat(), random * 0.8f, random);
|
||||
}
|
||||
|
||||
// Apply the random gradient effect
|
||||
graphics.setPaint(new LinearGradientPaint(0, 0, width, height,
|
||||
COLOR_FRACTIONS, COLORS, MultipleGradientPaint.CycleMethod.REFLECT));
|
||||
COLOR_FRACTIONS, COLORS, MultipleGradientPaint.CycleMethod.REPEAT));
|
||||
}
|
||||
|
||||
private void drawCharacters(final @NotNull Graphics2D graphics,
|
||||
|
||||
@@ -96,6 +96,12 @@ public final class FallbackUserWrapper implements FallbackUser {
|
||||
return;
|
||||
}
|
||||
|
||||
// How? Is there some kind of de-sync or race condition?
|
||||
if (channel.pipeline().context(FALLBACK_FRAME_ENCODER) != null) {
|
||||
channel.close(); // Nope ¯\_(ツ)_/¯
|
||||
return;
|
||||
}
|
||||
|
||||
// Mark the player as connected by caching them in a map of verifying players
|
||||
Sonar.get0().getFallback().getConnected().compute(inetAddress, (__, v) -> true);
|
||||
|
||||
|
||||
+12
-1
@@ -76,7 +76,18 @@ public class FallbackPreparer {
|
||||
public final FallbackPacket NO_MOVE_ABILITIES_BEDROCK = new PlayerAbilitiesPacket(0x06, 0, 0);
|
||||
public final FallbackPacket CAPTCHA_POSITION = new FallbackPacketSnapshot(new SetPlayerPositionRotationPacket(
|
||||
SPAWN_X_POSITION, 10000, SPAWN_Z_POSITION, 0, 90, 0, 0, false, false, true));
|
||||
public final FallbackPacket EMPTY_CHUNK_DATA = new FallbackPacketSnapshot(new ChunkDataPacket(0, 0));
|
||||
// I think the people working at Microsoft are actually the *real* ultimate trolls of the internet!
|
||||
public final FallbackPacket[] EMPTY_CHUNK_DATA = new FallbackPacket[]{
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(0, 0)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(0, 1)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(0, -1)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(1, 0)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(1, 1)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(1, -1)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(-1, 0)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(-1, 1)),
|
||||
new FallbackPacketSnapshot(new ChunkDataPacket(-1, -1))
|
||||
};
|
||||
public final FallbackPacket PRE_JOIN_KEEP_ALIVE = new FallbackPacketSnapshot(new KeepAlivePacket(PRE_JOIN_KEEP_ALIVE_ID));
|
||||
public final FallbackPacket[] REGISTRY_SYNC_1_20 = new FallbackPacket[] {
|
||||
new FallbackPacketSnapshot(new RegistryDataPacket(DimensionRegistry.CODEC_1_20, null, null))};
|
||||
|
||||
+6
-2
@@ -64,9 +64,13 @@ public final class FallbackGravityHandler extends FallbackVerificationHandler {
|
||||
// Make sure the client knows that we're sending chunks next
|
||||
if (user.getProtocolVersion().greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_20_3)) {
|
||||
user.delayedWrite(START_WRITING_CHUNKS);
|
||||
|
||||
for (final FallbackPacket section : EMPTY_CHUNK_DATA) {
|
||||
user.delayedWrite(section);
|
||||
}
|
||||
} else {
|
||||
user.delayedWrite(EMPTY_CHUNK_DATA[0]);
|
||||
}
|
||||
// Teleport player into an empty world by sending an empty chunk packet
|
||||
user.delayedWrite(EMPTY_CHUNK_DATA);
|
||||
// Spawn the invisible platform below the player
|
||||
if (enableCollisionsCheck) {
|
||||
final int index = RANDOM.nextInt(BLOCKS_PACKETS.length);
|
||||
|
||||
-6
@@ -108,10 +108,6 @@ public final class FallbackPreJoinHandler extends FallbackVerificationHandler {
|
||||
}
|
||||
// Ensure that the client locale is correct
|
||||
validateClientLocale(clientInformation.getLocale());
|
||||
// Check if the player sent an unused bit flag in the skin section
|
||||
// TODO: check if this causes issues with cosmetics in pvp clients
|
||||
checkState((clientInformation.getSkinParts() & 0x80) == 0,
|
||||
"sent unused bit flag: " + clientInformation.getSkinParts());
|
||||
|
||||
receivedClientInfo = true;
|
||||
} else if (packet instanceof PluginMessagePacket) {
|
||||
@@ -191,8 +187,6 @@ public final class FallbackPreJoinHandler extends FallbackVerificationHandler {
|
||||
if (user.getProtocolVersion().greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_8)) {
|
||||
brand = brand.substring(1);
|
||||
}
|
||||
// Check for illegal client brands
|
||||
checkState(!brand.equals("Vanilla"), "illegal client brand: " + brand);
|
||||
// Regex pattern for validating client brands
|
||||
final Pattern pattern = Sonar.get0().getConfig().getVerification().getBrand().getValidRegex();
|
||||
checkState(pattern.matcher(brand).matches(), "client brand does not match pattern: " + brand);
|
||||
|
||||
@@ -187,7 +187,7 @@ verification:
|
||||
# Měl by Sonar také kontrolovat hráče Geyser (Bedrock)?
|
||||
# Tato funkce je experimentální a může způsobit problémy
|
||||
# Pokud je toto zakázáno, hráči Bedrock budou přeskočeni
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# Doba, za kterou hráč přestal odesílat pakety před odpojením
|
||||
# (Hodnota udávaná v milisekundách: 1 sekunda = 1000 milisekund)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -184,7 +184,7 @@ verification:
|
||||
# Sollte Sonar auch Geyser (Bedrock)-Spieler überprüfen?
|
||||
# Diese Funktion ist experimentell und kann Probleme verursachen
|
||||
# Wenn dies deaktiviert ist, werden Bedrock-Spieler übersprungen
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# Die Zeit, seit der der Spieler keine Pakete mehr sendet, bevor er die Verbindung trennt
|
||||
# (Dieser Wert stellt die Zeit in Millisekunden dar: 1 Sekunde = 1000 Millisekunden)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -187,7 +187,7 @@ verification:
|
||||
# Should Sonar also check Geyser (Bedrock) players?
|
||||
# This feature is experimental and might cause issues
|
||||
# If this is disabled, Bedrock players will be skipped
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# The time since the player stopped sending packets before disconnecting
|
||||
# (This value represents the time in milliseconds: 1 second = 1000 milliseconds)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -186,7 +186,7 @@ verification:
|
||||
# Sonar devrait-il également vérifier les joueurs Geyser (Bedrock) ?
|
||||
# Cette fonctionnalité est expérimentale et peut causer des problèmes
|
||||
# Si cela est désactivé, les joueurs Bedrock seront ignorés
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# Temps écoulé depuis que le joueur a cessé d'envoyer des paquets avant de se déconnecter
|
||||
# (Cette valeur représente le temps en millisecondes : 1 seconde = 1000 millisecondes)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -185,7 +185,7 @@ verification:
|
||||
# უნდა შეამოწმოს თუ არა Sonar-მა Geyser (Bedrock) მოთამაშეები?
|
||||
# ეს ფუნქცია ექსპერიმენტულია და შეიძლება გამოიწვიოს პრობლემები
|
||||
# თუ ეს გამორთულია, Bedrock მოთამაშეები გამოვლენილი იქნება
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# დროის ოდენობა, რომელიც უნდა გავიდეს, სერვერთან კავშირის გარეშე, სანამ მოთამაშე დროებით გავარდება სერვერიდან.
|
||||
# (ეს არის ნაჩვენები მილიწამებში: 1 წამი = 1000 მილიწამი)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -186,7 +186,7 @@ verification:
|
||||
# Moet Sonar ook Geyser (Bedrock) spelers controleren?
|
||||
# Deze functie is experimenteel en kan problemen veroorzaken
|
||||
# Als dit is uitgeschakeld, worden Bedrock-spelers overgeslagen
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# De hoeveelheid tijd die moet verstrijken voordat een speler een time-out krijgt
|
||||
# (Deze waarde vertegenwoordigt de tijd in milliseconden: 1 seconde = 1000 milliseconden)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -186,7 +186,7 @@ verification:
|
||||
# Czy Sonar powinien również sprawdzać graczy Geyser (Bedrock)?
|
||||
# Ta funkcja jest eksperymentalna i może powodować problemy
|
||||
# Jeśli ta opcja jest wyłączona, gracze Bedrock będą pomijani
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# Czas, jaki ma upłynąć od zatrzymania wysyłania pakietów przez gracza do wyrzucenia.
|
||||
# (Wartość ta reprezentuje czas w milisekundach: 1 sekunda = 1000 milisekund)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -186,7 +186,7 @@ verification:
|
||||
# O Sonar também deve verificar jogadores Geyser (Bedrock)?
|
||||
# Este recurso é experimental e pode causar problemas
|
||||
# Se isso estiver desativado, jogadores Bedrock serão ignorados
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# O tempo desde que o jogador parou de enviar pacotes antes de desconectar
|
||||
# (Este valor representa o tempo em milissegundos: 1 segundo = 1000 milissegundos)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -185,7 +185,7 @@ verification:
|
||||
# Следует ли Sonar также проверять игроков Geyser (Bedrock)?
|
||||
# Эта функция экспериментальна и может вызывать проблемы
|
||||
# Если это отключено, игроки Bedrock будут пропущены
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# Время, прошедшее с момента прекращения отправки пакетов игроком до отключения.
|
||||
# (Это значение представляет время в миллисекундах: 1 секунда = 1000 миллисекунд)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -182,7 +182,7 @@ verification:
|
||||
# Sonar 是否应该检查来自 Geyser 的(基岩版)玩家?
|
||||
# 此功能是实验性的. 请报告任何因为误判而导致无法通过检查的问题
|
||||
# 如果关闭该选项 Sonar 将不检查这些玩家以便直接连接到服务器.
|
||||
check-geyser-players: true
|
||||
check-geyser-players: false
|
||||
# 播放器断开连接前停止发送数据包的时间
|
||||
# (该值为毫秒. 1秒等于1000毫秒.)
|
||||
read-timeout: 8000
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
group=xyz.jonesdev
|
||||
version=2.1.28
|
||||
version=2.1.32
|
||||
description=A lightweight, effective, and easy-to-use anti-bot plugin for Velocity, BungeeCord, and Bukkit.
|
||||
@@ -1,7 +1,7 @@
|
||||
[versions]
|
||||
netty = "4.1.119.Final"
|
||||
adventure = "4.18.0"
|
||||
adventure-platform = "4.3.4"
|
||||
netty = "4.2.1.Final"
|
||||
adventure = "4.21.0"
|
||||
adventure-platform = "4.4.0"
|
||||
bstats = "3.1.0"
|
||||
libby = "2.0.0-SNAPSHOT"
|
||||
pluginyml = "0.6.0"
|
||||
@@ -9,7 +9,7 @@ pluginyml = "0.6.0"
|
||||
[plugins]
|
||||
indra-git = "net.kyori.indra.git:3.1.3"
|
||||
shadow = "com.gradleup.shadow:8.3.6"
|
||||
spotless = "com.diffplug.spotless:7.0.2"
|
||||
spotless = "com.diffplug.spotless:7.0.4"
|
||||
pluginyml-bungee = { id = "net.minecrell.plugin-yml.bungee", version.ref = "pluginyml" }
|
||||
pluginyml-bukkit = { id = "net.minecrell.plugin-yml.bukkit", version.ref = "pluginyml" }
|
||||
|
||||
@@ -32,7 +32,7 @@ caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.0"
|
||||
annotations = "org.jetbrains:annotations:26.0.2"
|
||||
simpleyaml = "com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4"
|
||||
ormlite = "com.j256.ormlite:ormlite-jdbc:6.1"
|
||||
lombok = "org.projectlombok:lombok:1.18.36"
|
||||
lombok = "org.projectlombok:lombok:1.18.38"
|
||||
bungeecord = "net.md-5:bungeecord-proxy:1.21-SNAPSHOT"
|
||||
velocity = "com.velocitypowered:velocity-proxy:3.4.0-SNAPSHOT"
|
||||
# We have to use 1.8.8 for backwards compatibility
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -205,7 +205,7 @@ fi
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
Reference in new issue
Block a user