Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a63a50f1cf
|
||
|
|
b34161bb49
|
||
|
|
3dbc108b8d | ||
|
|
781d30eb43 | ||
|
|
518e602bf3 | ||
|
|
d62f0440ad | ||
|
|
bf29fa5ca7 | ||
|
|
104691b816 | ||
|
|
097816760f | ||
|
|
5f1b040c99 | ||
|
|
911a655aaf | ||
|
|
82133e7ac7 | ||
|
|
d85f2bc2d5 | ||
|
|
877e3630b7 | ||
|
|
0c4495e502 | ||
|
|
8cb92bb074 | ||
|
|
89a07cd06e | ||
|
|
698a611511 | ||
|
|
0f598bb1da | ||
|
|
1a8c1caa39 | ||
|
|
c24fe4a4d9 | ||
|
|
2da0cc6761 | ||
|
|
80b7726f18 | ||
|
|
9bab457d58 | ||
|
|
37d294afe3 | ||
|
|
6ea9c1dcba | ||
|
|
1f98050abb | ||
|
|
cea1ac00f0 | ||
|
|
620aaa3ff2 | ||
|
|
381ad66339 | ||
|
|
de70d23c54 | ||
|
|
b49474a56f | ||
|
|
058f034245 | ||
|
|
d94333eed7 | ||
|
|
2550dc9fbf | ||
|
|
8be3d974e4 | ||
|
|
cab082cdd5 | ||
|
|
5a65dbcdb9 | ||
|
|
0ca1ecd421 | ||
|
|
c6ec0da14c | ||
|
|
76bcfc8b9a | ||
|
|
70506aaf64 | ||
|
|
873d9f8c10 | ||
|
|
8f40552dc5 | ||
|
|
6302888a33 | ||
|
|
ea7cc9a9f3 | ||
|
|
ea928ce6db | ||
|
|
d19ee78c41 | ||
|
|
924f4e7344 | ||
|
|
6e4c938767 | ||
|
|
e534738336 | ||
|
|
92d40ca4cf |
No files matched your search
@@ -22,3 +22,4 @@
|
||||
|
||||
# Common build-tool wrapper scripts ('.cmd' versions are handled by 'Common.gitattributes')
|
||||
gradlew text eol=lf
|
||||
.gitea/CODEOWNERS linguist-detectable=false
|
||||
@@ -0,0 +1,3 @@
|
||||
# Pull requests request review from the eligible staff team(s).
|
||||
# One approval from either an Admin or Developer satisfies branch protection.
|
||||
* @trueog/Admins @trueog/Developers
|
||||
+13
-2
@@ -1,11 +1,11 @@
|
||||
Before you start contributing, please take a moment to review our contributing guidelines.
|
||||
If you can't contribute but like the project, feel free to show your support by starring the project on GitHub or
|
||||
joining the [Discord](https://jonesdev.xyz/discord).
|
||||
joining the [Discord](https://sonar.top/discord).
|
||||
|
||||
## Contributing Guidelines:
|
||||
|
||||
1. Fork the repository and create a new branch for your contribution.
|
||||
2. Follow the coding guidelines for your code.
|
||||
2. Adhere to the Coding Guidelines and LLM Guidelines.
|
||||
3. Test your code before committing and pushing it.
|
||||
4. Use [semantic](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716) commit messages for your commits.
|
||||
|
||||
@@ -17,6 +17,17 @@ joining the [Discord](https://jonesdev.xyz/discord).
|
||||
- Write clear comments to explain complex parts of your code.
|
||||
- Ensure your code is easy to read and maintain.
|
||||
|
||||
## LLM Guidelines
|
||||
|
||||
Keep the use of AI (including LLMs) for code generation to an absolute minimum. If possible, avoid using AI entirely due to potential complications regarding authorship, intellectual property, and copyright.
|
||||
|
||||
If AI was utilized during the development of a Pull Request, you must disclose its exact use in the PR description. This includes:
|
||||
- The specific tool and model used (e.g., GPT 5.4, Claude 4.7 Sonnet, Gemini 3.1 Pro)
|
||||
- The nature of its use (e.g., optimization)
|
||||
- The exact prompts used, where relevant
|
||||
|
||||
Please note that submissions will be rejected if AI usage raises concerns regarding code quality, licensing, or integrity.
|
||||
|
||||
## Bug Reports:
|
||||
|
||||
1. Check if someone has already reported the bug.
|
||||
|
||||
@@ -4,5 +4,5 @@ contact_links:
|
||||
url: https://docs.jonesdev.xyz/
|
||||
about: Need help configuring Sonar or have questions regarding the installation and usage?
|
||||
- name: Discord
|
||||
url: https://jonesdev.xyz/discord/
|
||||
url: https://sonar.top/discord/
|
||||
about: If you have any further questions, please feel free to join the Discord server and open a ticket.
|
||||
+8
-7
@@ -11,7 +11,7 @@
|
||||
[](https://www.codefactor.io/repository/github/jonesdevelopment/sonar/overview/main)
|
||||
[](https://github.com/jonesdevelopment/sonar/releases)
|
||||
[](https://github.com/jonesdevelopment/sonar/issues)
|
||||
[](https://jonesdev.xyz/discord)
|
||||
[](https://sonar.top/discord)
|
||||
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||
<br>
|
||||
<!-- Quick navigation -->
|
||||
@@ -21,16 +21,17 @@
|
||||
|
|
||||
[Pull Requests](https://github.com/jonesdevelopment/sonar/pulls)
|
||||
|
|
||||
[Discord](https://jonesdev.xyz/discord)
|
||||
[Discord](https://sonar.top/discord)
|
||||
|
|
||||
[License](https://github.com/jonesdevelopment/sonar/?tab=readme-ov-file#license)
|
||||
|
|
||||
[Documentation](https://docs.jonesdev.xyz/)
|
||||
</div>
|
||||
|
||||
> ### Notice about Sonar 3.0
|
||||
>
|
||||
> We're excited to announce the public release of Sonar 3.0.
|
||||
> If you are interested, please check out https://sonar.top/. You can read more about what sets Sonar 3.0 apart from Sonar 2.0 [here](<https://docs.sonar.top/faq>).
|
||||
> If you want more robust protection, better performance, and awesome new features, check out Sonar 3.0!
|
||||
> If you want more robust protection, better performance, and awesome new features, check out Sonar 3.0 at https://sonar.top/!
|
||||
> You can read more about what sets Sonar 3.0 apart from Sonar 2.0 [here](<https://sonar.top/docs/features>).
|
||||
|
||||
## Design and Goal
|
||||
* Effective, lightweight, and easy-to-use
|
||||
@@ -52,10 +53,10 @@ Sonar also protects against spambot attacks since it queues the incoming connect
|
||||
|
||||
### False positives
|
||||
Sonar is unlikely to ever falsely prevent a player from joining the server since Minecraft uses the TCP protocol, which means that packets are always sent in the correct order. Therefore, lag or ping should not affect the bot check.
|
||||
If you or one of your players experiences a false positive, make sure to report it by opening a [GitHub issue](https://github.com/jonesdevelopment/sonar/issues/new/choose) or a ticket on the [Discord server](https://jonesdev.xyz/discord/).
|
||||
If you or one of your players experiences a false positive, make sure to report it by opening a [GitHub issue](https://github.com/jonesdevelopment/sonar/issues/new/choose) or a ticket on the [Discord server](https://sonar.top/discord/).
|
||||
|
||||
## Sponsors
|
||||
If you are interested in sponsoring this project, please contact me via [Discord](https://jonesdev.xyz/discord/).
|
||||
If you are interested in sponsoring this project, please contact me via [Discord](https://sonar.top/discord/).
|
||||
|
||||
### Past Sponsors
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ If you discover a security vulnerability within Sonar, please follow these steps
|
||||
|
||||
## Contact
|
||||
|
||||
If you have any questions or concerns regarding the security of this project, please open a ticket on Discord or contact me via email at contact@jonesdev.xyz.
|
||||
If you have any questions or concerns regarding the security of this project, please open a ticket on Discord or contact me via email at support@sonar.top.
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up JDK 17
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '17'
|
||||
java-version: '21'
|
||||
distribution: 'temurin'
|
||||
|
||||
- name: Setup Gradle
|
||||
@@ -42,6 +42,13 @@ jobs:
|
||||
path: bukkit/build/libs/Sonar-Bukkit.jar
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload Paper Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Sonar-Paper
|
||||
path: paper/build/libs/Sonar-Paper.jar
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload BungeeCord Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Sonar Contributors
|
||||
* Copyright (C) 2026 Sonar Contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -56,7 +56,7 @@ public final class AntiBot {
|
||||
return shouldPerform(Sonar.get0().getConfig().getVerification().getMap().getTiming());
|
||||
}
|
||||
|
||||
private static boolean shouldPerform(final SonarConfiguration.Verification.Timing timing) {
|
||||
public static boolean shouldPerform(final SonarConfiguration.Verification.Timing timing) {
|
||||
return timing == SonarConfiguration.Verification.Timing.ALWAYS
|
||||
|| (timing == SonarConfiguration.Verification.Timing.DURING_ATTACK
|
||||
&& Sonar.get0().getAttackTracker().getCurrentAttack() != null);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Sonar Contributors
|
||||
* Copyright (C) 2026 Sonar Contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -21,6 +21,7 @@ import io.netty.channel.Channel;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.api.timer.SystemTimer;
|
||||
|
||||
@@ -45,6 +46,8 @@ public interface SonarUser {
|
||||
|
||||
boolean isGeyser();
|
||||
|
||||
@Nullable String getHostname();
|
||||
|
||||
/**
|
||||
* Disconnect the player during/after verification
|
||||
* using our custom Disconnect packet.
|
||||
|
||||
@@ -75,7 +75,8 @@ public enum ProtocolVersion {
|
||||
MINECRAFT_1_21_6(771, "1.21.6"),
|
||||
MINECRAFT_1_21_7(772, "1.21.7"),
|
||||
MINECRAFT_1_21_9(773, "1.21.9"),
|
||||
MINECRAFT_1_21_11(774, "1.21.11");
|
||||
MINECRAFT_1_21_11(774, "1.21.11"),
|
||||
MINECRAFT_26_1(775, "26.1");
|
||||
|
||||
private final int protocol;
|
||||
private final String name;
|
||||
|
||||
@@ -167,12 +167,12 @@ public final class SonarConfiguration {
|
||||
Sonar.get0().getLogger().warn(" ");
|
||||
}
|
||||
|
||||
verification.gravity.enabled = generalConfig.getBoolean("verification.checks.gravity.enabled");
|
||||
verification.gravity.checkCollisions = generalConfig.getBoolean("verification.checks.collision.enabled");
|
||||
verification.gravity.timing = Verification.Timing.valueOf(generalConfig.getString("verification.checks.gravity.timing"));
|
||||
verification.gravity.collisionTiming = Verification.Timing.valueOf(generalConfig.getString("verification.checks.collision.timing"));
|
||||
verification.gravity.captchaOnFail = generalConfig.getBoolean("verification.checks.gravity.captcha-on-fail");
|
||||
verification.gravity.maxMovementTicks = clamp(generalConfig.getInt("verification.checks.gravity.max-movement-ticks"), 2, 100);
|
||||
|
||||
verification.vehicle.enabled = generalConfig.getBoolean("verification.checks.vehicle.enabled");
|
||||
verification.vehicle.timing = Verification.Timing.valueOf(generalConfig.getString("verification.checks.vehicle.timing"));
|
||||
verification.vehicle.minimumPackets = clamp(generalConfig.getInt("verification.checks.vehicle.minimum-packets"), 0, 20);
|
||||
|
||||
verification.map.timing = Verification.Timing.valueOf(generalConfig.getString("verification.checks.map-captcha.timing"));
|
||||
@@ -181,6 +181,7 @@ public final class SonarConfiguration {
|
||||
verification.map.maxTries = clamp(generalConfig.getInt("verification.checks.map-captcha.max-tries"), 1, 100);
|
||||
verification.map.alphabet = generalConfig.getString("verification.checks.map-captcha.alphabet");
|
||||
verification.map.backgroundImage = null;
|
||||
verification.map.placeInOffhand = generalConfig.getBoolean("verification.checks.map-captcha.place-in-offhand");
|
||||
|
||||
final String backgroundPath = generalConfig.getString("verification.checks.map-captcha.background");
|
||||
if (!backgroundPath.isEmpty()) {
|
||||
@@ -201,6 +202,7 @@ public final class SonarConfiguration {
|
||||
verification.validNameRegex = Pattern.compile(generalConfig.getString("verification.checks.valid-name-regex"));
|
||||
|
||||
verification.checkGeyser = generalConfig.getBoolean("verification.check-geyser-players");
|
||||
verification.checkEagler = generalConfig.getBoolean("verification.check-eagler-players");
|
||||
verification.logConnections = generalConfig.getBoolean("verification.log-connections");
|
||||
verification.logDuringAttack = generalConfig.getBoolean("verification.log-during-attack");
|
||||
verification.debugXYZPositions = generalConfig.getBoolean("verification.debug-xyz-positions");
|
||||
@@ -251,7 +253,12 @@ public final class SonarConfiguration {
|
||||
|
||||
SonarCommand.prepareCachedTabSuggestions();
|
||||
|
||||
supportUrl = messagesConfig.getString("support-url");
|
||||
supportUrl = messagesConfig.getString("support-url")
|
||||
.replace("jonesdev.xyz", "sonar.top") // Migration: Replace legacy URL
|
||||
.trim();
|
||||
if (supportUrl.contains("://sonar.top/")) {
|
||||
Sonar.get0().getLogger().warn("Consider entering a custom support URL (if applicable).");
|
||||
}
|
||||
header = MiniMessage.miniMessage().deserialize(
|
||||
String.join("<newline>", messagesConfig.getStringList("header")),
|
||||
Placeholder.unparsed("support-url", supportUrl),
|
||||
@@ -373,19 +380,20 @@ public final class SonarConfiguration {
|
||||
private int maxTries;
|
||||
private String alphabet;
|
||||
private File backgroundImage;
|
||||
private boolean placeInOffhand;
|
||||
}
|
||||
|
||||
@Getter
|
||||
public static final class Gravity {
|
||||
private boolean enabled;
|
||||
private boolean checkCollisions;
|
||||
private Timing timing;
|
||||
private Timing collisionTiming;
|
||||
private boolean captchaOnFail;
|
||||
private int maxMovementTicks;
|
||||
}
|
||||
|
||||
@Getter
|
||||
public static final class Vehicle {
|
||||
private boolean enabled;
|
||||
private Timing timing;
|
||||
private int minimumPackets;
|
||||
}
|
||||
|
||||
@@ -415,6 +423,7 @@ public final class SonarConfiguration {
|
||||
|
||||
private int timeOfDay;
|
||||
private boolean checkGeyser;
|
||||
private boolean checkEagler;
|
||||
private boolean logConnections;
|
||||
private boolean logDuringAttack;
|
||||
private boolean debugXYZPositions;
|
||||
|
||||
+6
-4
@@ -20,6 +20,7 @@ package xyz.jonesdev.sonar.api.database.controller;
|
||||
import com.alessiodp.libby.LibraryManager;
|
||||
import com.j256.ormlite.dao.Dao;
|
||||
import com.j256.ormlite.dao.DaoManager;
|
||||
import com.j256.ormlite.jdbc.JdbcConnectionSource;
|
||||
import com.j256.ormlite.jdbc.JdbcPooledConnectionSource;
|
||||
import com.j256.ormlite.stmt.QueryBuilder;
|
||||
import com.j256.ormlite.support.ConnectionSource;
|
||||
@@ -93,10 +94,11 @@ public final class VerifiedPlayerController {
|
||||
"?autoReconnect=true");
|
||||
}
|
||||
|
||||
connectionSource = new JdbcPooledConnectionSource(jdbcURL,
|
||||
Sonar.get0().getConfig().getGeneralConfig().getString("database.username"),
|
||||
Sonar.get0().getConfig().getGeneralConfig().getString("database.password"),
|
||||
cachedDatabaseType.getDatabaseType());
|
||||
final String user = Sonar.get0().getConfig().getGeneralConfig().getString("database.username");
|
||||
final String pass = Sonar.get0().getConfig().getGeneralConfig().getString("database.password");
|
||||
connectionSource = cachedDatabaseType == SonarConfiguration.Database.Type.H2
|
||||
? new JdbcConnectionSource(jdbcURL, user, pass, cachedDatabaseType.getDatabaseType())
|
||||
: new JdbcPooledConnectionSource(jdbcURL, user, pass, cachedDatabaseType.getDatabaseType());
|
||||
|
||||
try {
|
||||
TableUtils.createTableIfNotExists(connectionSource, VerifiedPlayer.class);
|
||||
|
||||
@@ -64,8 +64,8 @@ public class UpdateChecker {
|
||||
lastCheckResult = CheckResult.LATEST_VERSION;
|
||||
}
|
||||
} catch (Throwable throwable) {
|
||||
Sonar.get0().getLogger().warn("Unable to retrieve version information: {}", throwable);
|
||||
throwable.printStackTrace(System.err);
|
||||
Sonar.get0().getLogger().warn("Failed to check for updates (is your firewall set up properly?): {}",
|
||||
throwable);
|
||||
lastCheckResult = CheckResult.API_ERROR;
|
||||
}
|
||||
});
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ allprojects {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven(url = "https://repo.jonesdev.xyz/releases/") // Bungee & Velocity proxy module
|
||||
maven(url = "https://s01.oss.sonatype.org/content/repositories/snapshots/") // libby
|
||||
maven(url = "https://repo.alessiodp.com/snapshots/") // libby
|
||||
}
|
||||
|
||||
apply(plugin = "java")
|
||||
|
||||
@@ -8,7 +8,7 @@ bukkit {
|
||||
name = rootProject.name
|
||||
main = "xyz.jonesdev.sonar.bukkit.SonarBukkitPlugin"
|
||||
authors = listOf("Jones Development", "Sonar Contributors")
|
||||
website = "https://jonesdev.xyz/discord/"
|
||||
website = "https://sonar.top/discord/"
|
||||
load = BukkitPluginDescription.PluginLoadOrder.POSTWORLD
|
||||
softDepend = listOf("Geyser-Spigot", "floodgate", "Protocolize", "ProtocolSupport",
|
||||
"ViaVersion", "packetevents", "ProtocolLib", "FastLogin")
|
||||
|
||||
@@ -81,7 +81,8 @@ public enum BukkitServerVersion {
|
||||
MINECRAFT_1_21_8,
|
||||
MINECRAFT_1_21_9,
|
||||
MINECRAFT_1_21_10,
|
||||
MINECRAFT_1_21_11;
|
||||
MINECRAFT_1_21_11,
|
||||
MINECRAFT_26_1;
|
||||
|
||||
static final BukkitServerVersion[] REVERSED_VALUES;
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.common.netty.TailExceptionsHandler;
|
||||
import xyz.jonesdev.sonar.common.statistics.GlobalSonarStatistics;
|
||||
|
||||
import java.net.InetAddress;
|
||||
@@ -85,5 +86,8 @@ public final class InboundHandler extends ChannelInboundHandlerAdapter {
|
||||
@Override
|
||||
public void exceptionCaught(final @NotNull ChannelHandlerContext ctx, final Throwable cause) throws Exception {
|
||||
ctx.close();
|
||||
if (TailExceptionsHandler.LOG_EXCEPTIONS) {
|
||||
cause.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import static xyz.jonesdev.sonar.common.protocol.SonarPacketPreparer.*;
|
||||
public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter {
|
||||
protected @Nullable String username;
|
||||
protected ProtocolVersion protocolVersion;
|
||||
protected @Nullable String handshakeHostname;
|
||||
protected @Nullable RemovalListener channelRemovalListener;
|
||||
|
||||
/**
|
||||
@@ -65,6 +66,7 @@ public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter
|
||||
throw QuietDecoderException.INSTANCE;
|
||||
}
|
||||
protocolVersion = ProtocolVersion.fromId(protocol);
|
||||
handshakeHostname = hostname;
|
||||
ctx.pipeline().addFirst(SONAR_BANDWIDTH, BandwidthHandler.INSTANCE);
|
||||
}
|
||||
|
||||
@@ -121,8 +123,7 @@ public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter
|
||||
}
|
||||
|
||||
// Don't continue the verification process if the verification is disabled
|
||||
if (!Sonar.get0().getAntiBot().shouldVerifyNewPlayers()
|
||||
|| EaglerUtil.isEaglerConnection(ctx.channel())) {
|
||||
if (!Sonar.get0().getAntiBot().shouldVerifyNewPlayers()) {
|
||||
initialLogin(ctx.channel(), inetAddress, initialLoginAction);
|
||||
return;
|
||||
}
|
||||
@@ -134,6 +135,13 @@ public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter
|
||||
return;
|
||||
}
|
||||
|
||||
// Completely skip EaglercraftX connections if configured
|
||||
if (EaglerUtil.isEaglerConnection(ctx.channel())
|
||||
&& !Sonar.get0().getConfig().getVerification().isCheckEagler()) {
|
||||
initialLogin(ctx.channel(), inetAddress, initialLoginAction);
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure we actually have to verify the player
|
||||
final String fingerprint = FingerprintingUtil.getFingerprint(username, hostAddress);
|
||||
if (Sonar.get0().getVerifiedPlayerController().getCache().contains(fingerprint)) {
|
||||
@@ -160,7 +168,8 @@ public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter
|
||||
}
|
||||
|
||||
// Create an instance for the user and let the verification handler take over the channel
|
||||
return () -> new UserWrapper(ctx, inetAddress, protocolVersion, username, fingerprint, geyser);
|
||||
return () -> new UserWrapper(ctx, inetAddress, protocolVersion, username, fingerprint, geyser,
|
||||
handshakeHostname);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -193,6 +202,7 @@ public abstract class InboundHandlerAdapter extends ChannelInboundHandlerAdapter
|
||||
// Don't remove floodgate's pipelines
|
||||
|| entry.getKey().startsWith("geyser")
|
||||
|| entry.getKey().startsWith("floodgate")
|
||||
|| entry.getKey().startsWith("eagler")
|
||||
|| entry.getKey().equals("DefaultChannelPipeline$TailContext#0")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import lombok.ToString;
|
||||
import lombok.experimental.Accessors;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.api.antibot.SonarUser;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
@@ -47,7 +48,7 @@ import java.net.InetAddress;
|
||||
import static xyz.jonesdev.sonar.api.antibot.ChannelPipelines.*;
|
||||
|
||||
@Getter
|
||||
@ToString(of = {"protocolVersion", "inetAddress", "geyser"})
|
||||
@ToString(of = {"protocolVersion", "inetAddress", "hostname", "geyser"})
|
||||
public final class UserWrapper implements SonarUser {
|
||||
@Accessors(fluent = true)
|
||||
private final Channel channel;
|
||||
@@ -56,6 +57,7 @@ public final class UserWrapper implements SonarUser {
|
||||
private final String fingerprint;
|
||||
private final String username;
|
||||
private final boolean geyser;
|
||||
private final @Nullable String hostname;
|
||||
private final SystemTimer loginTimer;
|
||||
@Setter
|
||||
private boolean forceCaptcha;
|
||||
@@ -65,13 +67,15 @@ public final class UserWrapper implements SonarUser {
|
||||
final @NotNull ProtocolVersion protocolVersion,
|
||||
final @NotNull String username,
|
||||
final @NotNull String fingerprint,
|
||||
final boolean geyser) {
|
||||
final boolean geyser,
|
||||
final @Nullable String hostname) {
|
||||
this.channel = ctx.channel();
|
||||
this.inetAddress = inetAddress;
|
||||
this.protocolVersion = protocolVersion;
|
||||
this.username = username;
|
||||
this.fingerprint = fingerprint;
|
||||
this.geyser = geyser;
|
||||
this.hostname = hostname;
|
||||
this.loginTimer = new SystemTimer();
|
||||
|
||||
GlobalSonarStatistics.totalAttemptedVerifications++;
|
||||
|
||||
@@ -47,7 +47,7 @@ class LibraryLoader {
|
||||
Library.builder()
|
||||
.groupId("com{}github{}ben-manes{}caffeine")
|
||||
.artifactId("caffeine")
|
||||
.version("3.2.0")
|
||||
.version("3.2.3")
|
||||
.relocate("com{}github{}benmanes{}caffeine", "xyz{}jonesdev{}sonar{}libs{}caffeine")
|
||||
.build(),
|
||||
// ORMLite
|
||||
|
||||
@@ -25,6 +25,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
@ChannelHandler.Sharable
|
||||
public final class TailExceptionsHandler extends ChannelDuplexHandler {
|
||||
public static final TailExceptionsHandler INSTANCE = new TailExceptionsHandler();
|
||||
// Do not enable unless instructed by support.
|
||||
public static final boolean LOG_EXCEPTIONS = Boolean.getBoolean("sonar.log-netty-exceptions");
|
||||
|
||||
// We can override the default exceptionCaught method since the server
|
||||
// does not have any other pipelines that could handle this error.
|
||||
@@ -33,5 +35,8 @@ public final class TailExceptionsHandler extends ChannelDuplexHandler {
|
||||
public void exceptionCaught(final @NotNull ChannelHandlerContext ctx, final Throwable cause) throws Exception {
|
||||
// Close the channel if we encounter any errors.
|
||||
ctx.close();
|
||||
if (LOG_EXCEPTIONS) {
|
||||
cause.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import net.kyori.adventure.nbt.IntBinaryTag;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.api.config.SonarConfiguration;
|
||||
@@ -37,6 +38,7 @@ import xyz.jonesdev.sonar.common.protocol.dimension.DimensionType;
|
||||
import xyz.jonesdev.sonar.common.protocol.entity.EntityType;
|
||||
import xyz.jonesdev.sonar.common.protocol.item.ItemType;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.configuration.RegistryDataPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.configuration.UpdateTagsPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.login.LoginSuccessPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.play.*;
|
||||
import xyz.jonesdev.sonar.common.util.ComponentHolder;
|
||||
@@ -71,6 +73,10 @@ public class SonarPacketPreparer {
|
||||
0, 36 + MAP_SLOT, 1, ItemType.FILLED_MAP, CompoundBinaryTag.builder()
|
||||
.put("map", IntBinaryTag.intBinaryTag(0)) // map id
|
||||
.build());
|
||||
public static final SonarPacket CAPTCHA_SET_CONTAINER_SLOT_OFFHAND = new SetContainerSlotPacket(
|
||||
0, 45, 1, ItemType.FILLED_MAP, CompoundBinaryTag.builder()
|
||||
.put("map", IntBinaryTag.intBinaryTag(0)) // map id
|
||||
.build());
|
||||
public final static SonarPacket CAPTCHA_HELD_ITEM_SLOT = new SetHeldItemPacket(MAP_SLOT);
|
||||
public final SonarPacket DEFAULT_ABILITIES = new PlayerAbilitiesPacket(0x00, 0, 0);
|
||||
public final SonarPacket NO_MOVE_ABILITIES = new PlayerAbilitiesPacket(0x02, 0, 0);
|
||||
@@ -98,6 +104,8 @@ public class SonarPacketPreparer {
|
||||
public final SonarPacket[] REGISTRY_SYNC_1_21_4 = RegistryDataPacket.of(DimensionRegistry.CODEC_1_21_4);
|
||||
public final SonarPacket[] REGISTRY_SYNC_1_21_5 = RegistryDataPacket.of(DimensionRegistry.CODEC_1_21_5);
|
||||
public final SonarPacket[] REGISTRY_SYNC_1_21_11 = RegistryDataPacket.of(DimensionRegistry.CODEC_1_21_11);
|
||||
public final SonarPacket[] REGISTRY_SYNC_26_1 = RegistryDataPacket.of(DimensionRegistry.CODEC_26_1);
|
||||
public final SonarPacket TAGS_UPDATE_26_1 = UpdateTagsPacket.of(DimensionRegistry.TAGS_26_1);
|
||||
public final SonarPacket START_WRITING_CHUNKS = new GameEventPacket(13, 0);
|
||||
public final static SonarPacket INVALID_HELD_ITEM_SLOT = new SetHeldItemPacket(-1);
|
||||
public final SonarPacket RANDOM_KEEP_ALIVE = new SonarPacketSnapshot(new KeepAlivePacket(RANDOM.nextInt()));
|
||||
@@ -120,7 +128,6 @@ public class SonarPacketPreparer {
|
||||
public SonarPacket spawnPosition;
|
||||
public SonarPacket fallStartPosition;
|
||||
public SonarPacket fallStartPositionLegacy;
|
||||
public static SonarPacket transferToOrigin;
|
||||
public SonarPacket blacklisted;
|
||||
public SonarPacket alreadyQueued;
|
||||
public SonarPacket alreadyVerifying;
|
||||
@@ -207,15 +214,6 @@ public class SonarPacketPreparer {
|
||||
unsupportedVersion = new SonarPacketSnapshot(new DisconnectPacket(Sonar.get0().getConfig().getVerification().getUnsupportedVersion(), true));
|
||||
tooManyOnlinePerIP = new SonarPacketSnapshot(new DisconnectPacket(Sonar.get0().getConfig().getTooManyOnlinePerIp(), true));
|
||||
|
||||
// Prepare transfer packet
|
||||
if (Sonar.get0().getConfig().getGeneralConfig().getBoolean("verification.transfer.enabled")) {
|
||||
transferToOrigin = new SonarPacketSnapshot(new TransferPacket(
|
||||
Sonar.get0().getConfig().getGeneralConfig().getString("verification.transfer.destination-host"),
|
||||
Sonar.get0().getConfig().getGeneralConfig().getInt("verification.transfer.destination-port")));
|
||||
} else {
|
||||
transferToOrigin = null;
|
||||
}
|
||||
|
||||
// Prepare update time packet
|
||||
final int timeOfDay = Sonar.get0().getConfig().getVerification().getTimeOfDay();
|
||||
if (timeOfDay != 1000) {
|
||||
@@ -295,8 +293,17 @@ public class SonarPacketPreparer {
|
||||
+ Sonar.get0().getConfig().getVerification().getMaxPacketCount();
|
||||
}
|
||||
|
||||
public static @Nullable SonarPacket getTagsPacket(final @NotNull ProtocolVersion protocolVersion) {
|
||||
if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_26_1)) {
|
||||
return TAGS_UPDATE_26_1;
|
||||
}
|
||||
return null; // apparently doesn't crash the client; we're safe... for now.
|
||||
}
|
||||
|
||||
public static SonarPacket[] getRegistryPackets(final @NotNull ProtocolVersion protocolVersion) {
|
||||
if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_21_11)) {
|
||||
if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_26_1)) {
|
||||
return REGISTRY_SYNC_26_1;
|
||||
} else if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_21_11)) {
|
||||
return REGISTRY_SYNC_1_21_11;
|
||||
} else if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_21_5)) {
|
||||
return REGISTRY_SYNC_1_21_5;
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.configuration.FinishConfigurationPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.configuration.RegistryDataPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.configuration.UpdateTagsPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.handshake.HandshakePacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.login.LoginAcknowledgedPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.login.LoginStartPacket;
|
||||
@@ -75,6 +76,8 @@ public enum SonarPacketRegistry {
|
||||
clientbound.register(RegistryDataPacket.class, RegistryDataPacket::new,
|
||||
map(0x05, MINECRAFT_1_20_2, true),
|
||||
map(0x07, MINECRAFT_1_20_5, true));
|
||||
clientbound.register(UpdateTagsPacket.class, UpdateTagsPacket::new,
|
||||
map(0x0D, MINECRAFT_1_20_5, true));
|
||||
|
||||
serverbound.register(ClientInformationPacket.class, ClientInformationPacket::new,
|
||||
map(0x00, MINECRAFT_1_20_2, false));
|
||||
@@ -109,7 +112,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x2B, MINECRAFT_1_20_5, true),
|
||||
map(0x2C, MINECRAFT_1_21_2, true),
|
||||
map(0x2B, MINECRAFT_1_21_5, true),
|
||||
map(0x30, MINECRAFT_1_21_9, true));
|
||||
map(0x30, MINECRAFT_1_21_9, true),
|
||||
map(0x31, MINECRAFT_26_1, true));
|
||||
// minecraft:keep_alive
|
||||
clientbound.register(KeepAlivePacket.class, KeepAlivePacket::new,
|
||||
map(0x00, MINECRAFT_1_7_2, true),
|
||||
@@ -128,7 +132,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x26, MINECRAFT_1_20_5, true),
|
||||
map(0x27, MINECRAFT_1_21_2, true),
|
||||
map(0x26, MINECRAFT_1_21_5, true),
|
||||
map(0x2B, MINECRAFT_1_21_9, true));
|
||||
map(0x2B, MINECRAFT_1_21_9, true),
|
||||
map(0x2C, MINECRAFT_26_1, true));
|
||||
// minecraft:disconnect
|
||||
clientbound.register(DisconnectPacket.class, DisconnectPacket::new,
|
||||
map(0x40, MINECRAFT_1_7_2, true),
|
||||
@@ -166,7 +171,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x40, MINECRAFT_1_20_5, true),
|
||||
map(0x42, MINECRAFT_1_21_2, true),
|
||||
map(0x41, MINECRAFT_1_21_5, true),
|
||||
map(0x46, MINECRAFT_1_21_9, true));
|
||||
map(0x46, MINECRAFT_1_21_9, true),
|
||||
map(0x48, MINECRAFT_26_1, true));
|
||||
// minecraft:player_abilities
|
||||
clientbound.register(PlayerAbilitiesPacket.class, PlayerAbilitiesPacket::new,
|
||||
map(0x39, MINECRAFT_1_7_2, true),
|
||||
@@ -186,7 +192,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x38, MINECRAFT_1_20_5, true),
|
||||
map(0x3A, MINECRAFT_1_21_2, true),
|
||||
map(0x39, MINECRAFT_1_21_5, true),
|
||||
map(0x3E, MINECRAFT_1_21_9, true));
|
||||
map(0x3E, MINECRAFT_1_21_9, true),
|
||||
map(0x40, MINECRAFT_26_1, true));
|
||||
// minecraft:level_chunk_with_light
|
||||
clientbound.register(ChunkDataPacket.class, ChunkDataPacket::new,
|
||||
map(0x21, MINECRAFT_1_7_2, true),
|
||||
@@ -205,7 +212,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x27, MINECRAFT_1_20_5, true),
|
||||
map(0x28, MINECRAFT_1_21_2, true),
|
||||
map(0x27, MINECRAFT_1_21_5, true),
|
||||
map(0x2C, MINECRAFT_1_21_9, true));
|
||||
map(0x2C, MINECRAFT_1_21_9, true),
|
||||
map(0x2D, MINECRAFT_26_1, true));
|
||||
// minecraft:remove_entities
|
||||
clientbound.register(RemoveEntitiesPacket.class, RemoveEntitiesPacket::new,
|
||||
map(0x13, MINECRAFT_1_7_2, true),
|
||||
@@ -227,7 +235,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x42, MINECRAFT_1_20_5, true),
|
||||
map(0x47, MINECRAFT_1_21_2, true),
|
||||
map(0x46, MINECRAFT_1_21_5, true),
|
||||
map(0x4B, MINECRAFT_1_21_9, true));
|
||||
map(0x4B, MINECRAFT_1_21_9, true),
|
||||
map(0x4D, MINECRAFT_26_1, true));
|
||||
// minecraft:set_passengers
|
||||
clientbound.register(SetPassengersPacket.class, SetPassengersPacket::new,
|
||||
map(0x1B, MINECRAFT_1_7_2, true),
|
||||
@@ -246,7 +255,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x5F, MINECRAFT_1_20_5, true),
|
||||
map(0x65, MINECRAFT_1_21_2, true),
|
||||
map(0x64, MINECRAFT_1_21_5, true),
|
||||
map(0x69, MINECRAFT_1_21_9, true));
|
||||
map(0x69, MINECRAFT_1_21_9, true),
|
||||
map(0x6B, MINECRAFT_26_1, true));
|
||||
// minecraft:add_entity
|
||||
clientbound.register(SpawnEntityPacket.class, SpawnEntityPacket::new,
|
||||
map(0x0E, MINECRAFT_1_7_2, true),
|
||||
@@ -270,7 +280,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x49, MINECRAFT_1_20_5, true),
|
||||
map(0x4E, MINECRAFT_1_21_2, true),
|
||||
map(0x4D, MINECRAFT_1_21_5, true),
|
||||
map(0x52, MINECRAFT_1_21_9, true));
|
||||
map(0x52, MINECRAFT_1_21_9, true),
|
||||
map(0x54, MINECRAFT_26_1, true));
|
||||
// minecraft:ping
|
||||
clientbound.register(TransactionPacket.class, TransactionPacket::new,
|
||||
map(0x32, MINECRAFT_1_7_2, true),
|
||||
@@ -288,7 +299,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x35, MINECRAFT_1_20_5, true),
|
||||
map(0x37, MINECRAFT_1_21_2, true),
|
||||
map(0x36, MINECRAFT_1_21_5, true),
|
||||
map(0x3B, MINECRAFT_1_21_9, true));
|
||||
map(0x3B, MINECRAFT_1_21_9, true),
|
||||
map(0x3D, MINECRAFT_26_1, true));
|
||||
// minecraft:set_default_spawn_position
|
||||
clientbound.register(SetDefaultSpawnPositionPacket.class, SetDefaultSpawnPositionPacket::new,
|
||||
map(0x05, MINECRAFT_1_7_2, true),
|
||||
@@ -309,7 +321,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x56, MINECRAFT_1_20_5, true),
|
||||
map(0x5B, MINECRAFT_1_21_2, true),
|
||||
map(0x5A, MINECRAFT_1_21_5, true),
|
||||
map(0x5F, MINECRAFT_1_21_9, true));
|
||||
map(0x5F, MINECRAFT_1_21_9, true),
|
||||
map(0x61, MINECRAFT_26_1, true));
|
||||
// minecraft:map_item_data
|
||||
clientbound.register(MapDataPacket.class, MapDataPacket::new,
|
||||
map(0x34, MINECRAFT_1_7_2, true),
|
||||
@@ -327,7 +340,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x2C, MINECRAFT_1_20_5, true),
|
||||
map(0x2D, MINECRAFT_1_21_2, true),
|
||||
map(0x2C, MINECRAFT_1_21_5, true),
|
||||
map(0x31, MINECRAFT_1_21_9, true));
|
||||
map(0x31, MINECRAFT_1_21_9, true),
|
||||
map(0x33, MINECRAFT_26_1, true));
|
||||
// minecraft:container_set_slot
|
||||
clientbound.register(SetContainerSlotPacket.class, SetContainerSlotPacket::new,
|
||||
map(0x2F, MINECRAFT_1_7_2, true),
|
||||
@@ -361,7 +375,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x5C, MINECRAFT_1_20_5, true),
|
||||
map(0x61, MINECRAFT_1_21_2, true),
|
||||
map(0x60, MINECRAFT_1_21_5, true),
|
||||
map(0x65, MINECRAFT_1_21_9, true));
|
||||
map(0x65, MINECRAFT_1_21_9, true),
|
||||
map(0x67, MINECRAFT_26_1, true));
|
||||
// minecraft:system_chat
|
||||
clientbound.register(SystemChatPacket.class, SystemChatPacket::new,
|
||||
map(0x02, MINECRAFT_1_7_2, true),
|
||||
@@ -379,7 +394,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x6C, MINECRAFT_1_20_5, true),
|
||||
map(0x73, MINECRAFT_1_21_2, true),
|
||||
map(0x72, MINECRAFT_1_21_5, true),
|
||||
map(0x77, MINECRAFT_1_21_9, true));
|
||||
map(0x77, MINECRAFT_1_21_9, true),
|
||||
map(0x79, MINECRAFT_26_1, true));
|
||||
// minecraft:game_event
|
||||
clientbound.register(GameEventPacket.class, GameEventPacket::new,
|
||||
map(0x20, MINECRAFT_1_20_3, true),
|
||||
@@ -391,7 +407,8 @@ public enum SonarPacketRegistry {
|
||||
clientbound.register(TransferPacket.class, TransferPacket::new,
|
||||
map(0x73, MINECRAFT_1_20_5, true),
|
||||
map(0x7A, MINECRAFT_1_21_2, true),
|
||||
map(0x7F, MINECRAFT_1_21_9, true));
|
||||
map(0x7F, MINECRAFT_1_21_9, true),
|
||||
map(0x81, MINECRAFT_26_1, true));
|
||||
// minecraft:set_held_slot
|
||||
clientbound.register(SetHeldItemPacket.class, SetHeldItemPacket::new,
|
||||
map(0x09, MINECRAFT_1_7_2, true),
|
||||
@@ -412,7 +429,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x53, MINECRAFT_1_20_5, true),
|
||||
map(0x63, MINECRAFT_1_21_2, true),
|
||||
map(0x62, MINECRAFT_1_21_5, true),
|
||||
map(0x67, MINECRAFT_1_21_9, true));
|
||||
map(0x67, MINECRAFT_1_21_9, true),
|
||||
map(0x69, MINECRAFT_26_1, true));
|
||||
// minecraft:animate
|
||||
clientbound.register(EntityAnimationPacket.class, EntityAnimationPacket::new,
|
||||
map(0x0B, MINECRAFT_1_7_2, true),
|
||||
@@ -443,12 +461,14 @@ public enum SonarPacketRegistry {
|
||||
map(0x64, MINECRAFT_1_20_5, true),
|
||||
map(0x6B, MINECRAFT_1_21_2, true),
|
||||
map(0x6A, MINECRAFT_1_21_5, true),
|
||||
map(0x6F, MINECRAFT_1_21_9, true));
|
||||
map(0x6F, MINECRAFT_1_21_9, true),
|
||||
map(0x71, MINECRAFT_26_1, true));
|
||||
|
||||
// minecraft:client_tick_end
|
||||
serverbound.register(ClientTickEndPacket.class, ClientTickEndPacket::new,
|
||||
map(0x0B, MINECRAFT_1_21_2, false),
|
||||
map(0x0C, MINECRAFT_1_21_6, false));
|
||||
map(0x0C, MINECRAFT_1_21_6, false),
|
||||
map(0x0D, MINECRAFT_26_1, false));
|
||||
// minecraft:set_carried_item
|
||||
serverbound.register(SetHeldItemPacket.class, SetHeldItemPacket::new,
|
||||
map(0x09, MINECRAFT_1_7_2, false),
|
||||
@@ -465,7 +485,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x2F, MINECRAFT_1_20_5, false),
|
||||
map(0x31, MINECRAFT_1_21_2, false),
|
||||
map(0x33, MINECRAFT_1_21_4, false),
|
||||
map(0x34, MINECRAFT_1_21_6, false));
|
||||
map(0x34, MINECRAFT_1_21_6, false),
|
||||
map(0x35, MINECRAFT_26_1, false));
|
||||
// minecraft:paddle_boat
|
||||
serverbound.register(PaddleBoatPacket.class, PaddleBoatPacket::new,
|
||||
map(0x11, MINECRAFT_1_9, false),
|
||||
@@ -483,7 +504,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x1C, MINECRAFT_1_20_3, false),
|
||||
map(0x1F, MINECRAFT_1_20_5, false),
|
||||
map(0x21, MINECRAFT_1_21_2, false),
|
||||
map(0x22, MINECRAFT_1_21_6, false));
|
||||
map(0x22, MINECRAFT_1_21_6, false),
|
||||
map(0x23, MINECRAFT_26_1, false));
|
||||
// minecraft:player_input
|
||||
serverbound.register(PlayerInputPacket.class, PlayerInputPacket::new,
|
||||
map(0x0C, MINECRAFT_1_7_2, false),
|
||||
@@ -502,7 +524,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x26, MINECRAFT_1_20_5, false),
|
||||
map(0x28, MINECRAFT_1_21_2, false),
|
||||
map(0x29, MINECRAFT_1_21_4, false),
|
||||
map(0x2A, MINECRAFT_1_21_6, false));
|
||||
map(0x2A, MINECRAFT_1_21_6, false),
|
||||
map(0x26, MINECRAFT_26_1, false));
|
||||
// minecraft:move_vehicle
|
||||
serverbound.register(VehicleMovePacket.class, VehicleMovePacket::new,
|
||||
map(0x10, MINECRAFT_1_9, false),
|
||||
@@ -520,7 +543,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x1B, MINECRAFT_1_20_3, false),
|
||||
map(0x1E, MINECRAFT_1_20_5, false),
|
||||
map(0x20, MINECRAFT_1_21_2, false),
|
||||
map(0x21, MINECRAFT_1_21_6, false));
|
||||
map(0x21, MINECRAFT_1_21_6, false),
|
||||
map(0x22, MINECRAFT_26_1, false));
|
||||
// minecraft:chat
|
||||
serverbound.register(SystemChatPacket.class, SystemChatPacket::new,
|
||||
map(0x01, MINECRAFT_1_7_2, false),
|
||||
@@ -533,7 +557,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x05, MINECRAFT_1_19_3, false),
|
||||
map(0x06, MINECRAFT_1_20_5, false),
|
||||
map(0x07, MINECRAFT_1_21_2, false),
|
||||
map(0x08, MINECRAFT_1_21_6, false));
|
||||
map(0x08, MINECRAFT_1_21_6, false),
|
||||
map(0x09, MINECRAFT_26_1, false));
|
||||
// minecraft:keep_alive
|
||||
serverbound.register(KeepAlivePacket.class, KeepAlivePacket::new,
|
||||
map(0x00, MINECRAFT_1_7_2, false),
|
||||
@@ -552,7 +577,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x15, MINECRAFT_1_20_3, false),
|
||||
map(0x18, MINECRAFT_1_20_5, false),
|
||||
map(0x1A, MINECRAFT_1_21_2, false),
|
||||
map(0x1B, MINECRAFT_1_21_6, false));
|
||||
map(0x1B, MINECRAFT_1_21_6, false),
|
||||
map(0x1C, MINECRAFT_26_1, false));
|
||||
// minecraft:client_information
|
||||
serverbound.register(ClientInformationPacket.class, ClientInformationPacket::new,
|
||||
map(0x15, MINECRAFT_1_7_2, false),
|
||||
@@ -567,7 +593,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x09, MINECRAFT_1_20_2, false),
|
||||
map(0x0A, MINECRAFT_1_20_5, false),
|
||||
map(0x0C, MINECRAFT_1_21_2, false),
|
||||
map(0x0D, MINECRAFT_1_21_6, false));
|
||||
map(0x0D, MINECRAFT_1_21_6, false),
|
||||
map(0x0E, MINECRAFT_26_1, false));
|
||||
// minecraft:custom_payload
|
||||
serverbound.register(PluginMessagePacket.class, PluginMessagePacket::new,
|
||||
map(0x17, MINECRAFT_1_7_2, false),
|
||||
@@ -584,7 +611,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x0F, MINECRAFT_1_20_2, false),
|
||||
map(0x12, MINECRAFT_1_21, false),
|
||||
map(0x14, MINECRAFT_1_21_2, false),
|
||||
map(0x15, MINECRAFT_1_21_6, false));
|
||||
map(0x15, MINECRAFT_1_21_6, false),
|
||||
map(0x16, MINECRAFT_26_1, false));
|
||||
// minecraft:move_player_status_only
|
||||
serverbound.register(SetPlayerOnGround.class, SetPlayerOnGround::new,
|
||||
map(0x03, MINECRAFT_1_7_2, false),
|
||||
@@ -603,7 +631,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x1A, MINECRAFT_1_20_3, false),
|
||||
map(0x1D, MINECRAFT_1_20_5, false),
|
||||
map(0x1F, MINECRAFT_1_21_2, false),
|
||||
map(0x20, MINECRAFT_1_21_6, false));
|
||||
map(0x20, MINECRAFT_1_21_6, false),
|
||||
map(0x21, MINECRAFT_26_1, false));
|
||||
// minecraft:move_player_pos
|
||||
serverbound.register(SetPlayerPositionPacket.class, SetPlayerPositionPacket::new,
|
||||
map(0x04, MINECRAFT_1_7_2, false),
|
||||
@@ -622,7 +651,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x17, MINECRAFT_1_20_3, false),
|
||||
map(0x1A, MINECRAFT_1_20_5, false),
|
||||
map(0x1C, MINECRAFT_1_21_2, false),
|
||||
map(0x1D, MINECRAFT_1_21_6, false));
|
||||
map(0x1D, MINECRAFT_1_21_6, false),
|
||||
map(0x1E, MINECRAFT_26_1, false));
|
||||
// minecraft:move_player_rot
|
||||
serverbound.register(SetPlayerRotationPacket.class, SetPlayerRotationPacket::new,
|
||||
map(0x05, MINECRAFT_1_7_2, false),
|
||||
@@ -641,7 +671,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x19, MINECRAFT_1_20_3, false),
|
||||
map(0x1C, MINECRAFT_1_20_5, false),
|
||||
map(0x1E, MINECRAFT_1_21_2, false),
|
||||
map(0x1F, MINECRAFT_1_21_6, false));
|
||||
map(0x1F, MINECRAFT_1_21_6, false),
|
||||
map(0x20, MINECRAFT_26_1, false));
|
||||
// minecraft:move_player_pos_rot
|
||||
serverbound.register(SetPlayerPositionRotationPacket.class, SetPlayerPositionRotationPacket::new,
|
||||
map(0x06, MINECRAFT_1_7_2, false),
|
||||
@@ -660,7 +691,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x18, MINECRAFT_1_20_3, false),
|
||||
map(0x1B, MINECRAFT_1_20_5, false),
|
||||
map(0x1D, MINECRAFT_1_21_2, false),
|
||||
map(0x1E, MINECRAFT_1_21_6, false));
|
||||
map(0x1E, MINECRAFT_1_21_6, false),
|
||||
map(0x1F, MINECRAFT_26_1, false));
|
||||
// minecraft:accept_teleportation
|
||||
serverbound.register(ConfirmTeleportationPacket.class, ConfirmTeleportationPacket::new,
|
||||
map(0x00, MINECRAFT_1_9, false));
|
||||
@@ -682,7 +714,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x27, MINECRAFT_1_20_5, false),
|
||||
map(0x29, MINECRAFT_1_21_2, false),
|
||||
map(0x2B, MINECRAFT_1_21_4, false),
|
||||
map(0x2C, MINECRAFT_1_21_6, false));
|
||||
map(0x2C, MINECRAFT_1_21_6, false),
|
||||
map(0x2D, MINECRAFT_26_1, false));
|
||||
// minecraft:swing
|
||||
serverbound.register(AnimationPacket.class, AnimationPacket::new,
|
||||
map(0x0A, MINECRAFT_1_7_2, false),
|
||||
@@ -700,7 +733,8 @@ public enum SonarPacketRegistry {
|
||||
map(0x38, MINECRAFT_1_21_2, false),
|
||||
map(0x3A, MINECRAFT_1_21_4, false),
|
||||
map(0x3B, MINECRAFT_1_21_5, false),
|
||||
map(0x3C, MINECRAFT_1_21_6, false));
|
||||
map(0x3C, MINECRAFT_1_21_6, false),
|
||||
map(0x3F, MINECRAFT_26_1, false));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -77,7 +77,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 8173;
|
||||
}
|
||||
return 9250;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 9250;
|
||||
}
|
||||
return 9451;
|
||||
}, protocolVersion -> (double) 0.75f),
|
||||
TRAPDOOR(protocolVersion -> {
|
||||
// We have to use wooden trapdoors for 1.7 since 1.7 doesn't have iron trapdoors
|
||||
@@ -129,7 +132,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 11303;
|
||||
}
|
||||
return 12380;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 12380;
|
||||
}
|
||||
return 12582;
|
||||
}, protocolVersion -> 0.1875),
|
||||
END_PORTAL_FRAME(protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_12_2)) {
|
||||
@@ -174,7 +180,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 8195;
|
||||
}
|
||||
return 9272;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 9272;
|
||||
}
|
||||
return 9473;
|
||||
}, protocolVersion -> 0.8125),
|
||||
DAYLIGHT_SENSOR(protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_12_2)) {
|
||||
@@ -222,7 +231,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 10016;
|
||||
}
|
||||
return 11093;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 11093;
|
||||
}
|
||||
return 11295;
|
||||
}, protocolVersion -> 0.375),
|
||||
COBBLESTONE_WALL(protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_12_2)) {
|
||||
@@ -267,7 +279,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 8706;
|
||||
}
|
||||
return 9783;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 9783;
|
||||
}
|
||||
return 9984;
|
||||
}, protocolVersion -> 1.5),
|
||||
STONE_SLABS(protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_12_2)) {
|
||||
@@ -315,7 +330,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 12120;
|
||||
}
|
||||
return 13197;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 13197;
|
||||
}
|
||||
return 13399;
|
||||
}, protocolVersion -> 0.5),
|
||||
WHITE_CARPET(protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_12_2)) {
|
||||
@@ -363,7 +381,10 @@ public enum BlockType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 11617;
|
||||
}
|
||||
return 12694;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 12694;
|
||||
}
|
||||
return 12896;
|
||||
}, protocolVersion -> protocolVersion.compareTo(MINECRAFT_1_8) < 0 ? 0 : 0.0625);
|
||||
|
||||
private final Function<ProtocolVersion, Integer> id;
|
||||
|
||||
+4
@@ -41,6 +41,8 @@ public final class DimensionRegistry {
|
||||
public final CompoundBinaryTag CODEC_1_21_4;
|
||||
public final CompoundBinaryTag CODEC_1_21_5;
|
||||
public final CompoundBinaryTag CODEC_1_21_11;
|
||||
public final CompoundBinaryTag CODEC_26_1;
|
||||
public final CompoundBinaryTag TAGS_26_1;
|
||||
|
||||
static {
|
||||
CODEC_1_16 = getCodec("codec_1_16.nbt");
|
||||
@@ -56,6 +58,8 @@ public final class DimensionRegistry {
|
||||
CODEC_1_21_4 = getCodec("codec_1_21_4.nbt");
|
||||
CODEC_1_21_5 = getCodec("codec_1_21_5.nbt");
|
||||
CODEC_1_21_11 = getCodec("codec_1_21_11.nbt");
|
||||
CODEC_26_1 = getCodec("codec_26_1.nbt");
|
||||
TAGS_26_1 = getCodec("tags_26_1.nbt");
|
||||
}
|
||||
|
||||
private @NotNull CompoundBinaryTag getCodec(final @NotNull String fileName) {
|
||||
|
||||
@@ -82,7 +82,10 @@ public enum ItemType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_7)) {
|
||||
return 1059;
|
||||
}
|
||||
return 1104;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 1104;
|
||||
}
|
||||
return 1105;
|
||||
}, protocolVersion -> {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21)) {
|
||||
return 26;
|
||||
@@ -93,7 +96,10 @@ public enum ItemType {
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_9)) {
|
||||
return 37;
|
||||
}
|
||||
return 44;
|
||||
if (protocolVersion.lessThanOrEquals(MINECRAFT_1_21_11)) {
|
||||
return 44;
|
||||
}
|
||||
return 46;
|
||||
});
|
||||
|
||||
private final Function<ProtocolVersion, Integer> id;
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (C) 2026 Jones Development
|
||||
*
|
||||
* All rights reserved.
|
||||
* This software is proprietary and cannot be copied, modified, or distributed without explicit permission.
|
||||
*/
|
||||
|
||||
package xyz.jonesdev.sonar.common.protocol.packets.configuration;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import net.kyori.adventure.nbt.BinaryTag;
|
||||
import net.kyori.adventure.nbt.CompoundBinaryTag;
|
||||
import net.kyori.adventure.nbt.IntBinaryTag;
|
||||
import net.kyori.adventure.nbt.ListBinaryTag;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacketSnapshot;
|
||||
import xyz.jonesdev.sonar.common.util.ProtocolUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// If you want a decent solution, use Sonar 3.0 - I don't have the time to implement tags.
|
||||
//
|
||||
// Taken from
|
||||
// https://github.com/BoomEaro/NanoLimbo/blob/feature/1.21.2/src/main/java/ua/nanit/limbo/protocol/packets/configuration/PacketUpdateTags.java
|
||||
@ToString
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor(access = AccessLevel.PROTECTED)
|
||||
public final class UpdateTagsPacket implements SonarPacket {
|
||||
private Map<String, Map<String, List<Integer>>> tags;
|
||||
|
||||
@Override
|
||||
public void encode(final ByteBuf byteBuf, final ProtocolVersion protocolVersion) {
|
||||
ProtocolUtil.writeVarInt(byteBuf, this.tags.size());
|
||||
for (Map.Entry<String, Map<String, List<Integer>>> entry : this.tags.entrySet()) {
|
||||
ProtocolUtil.writeString(byteBuf, entry.getKey());
|
||||
|
||||
Map<String, List<Integer>> subTags = entry.getValue();
|
||||
ProtocolUtil.writeVarInt(byteBuf, subTags.size());
|
||||
|
||||
for (Map.Entry<String, List<Integer>> subEntry : subTags.entrySet()) {
|
||||
ProtocolUtil.writeString(byteBuf, subEntry.getKey());
|
||||
|
||||
List<Integer> ids = subEntry.getValue();
|
||||
ProtocolUtil.writeVarInt(byteBuf, ids.size());
|
||||
for (int id : ids) {
|
||||
ProtocolUtil.writeVarInt(byteBuf, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static @NotNull SonarPacket of(@NotNull CompoundBinaryTag tags) {
|
||||
Map<String, Map<String, List<Integer>>> tagsMap = new HashMap<>();
|
||||
|
||||
for (Map.Entry<String, ? extends BinaryTag> namedTag : tags) {
|
||||
Map<String, List<Integer>> subTagsMap = new HashMap<>();
|
||||
CompoundBinaryTag subTag = (CompoundBinaryTag) namedTag.getValue();
|
||||
|
||||
for (Map.Entry<String, ? extends BinaryTag> subNamedTag : subTag) {
|
||||
List<Integer> idsList = new ArrayList<>();
|
||||
ListBinaryTag ids = (ListBinaryTag) subNamedTag.getValue();
|
||||
for (BinaryTag id : ids) {
|
||||
idsList.add(((IntBinaryTag) id).value());
|
||||
}
|
||||
subTagsMap.put(subNamedTag.getKey(), idsList);
|
||||
}
|
||||
tagsMap.put(namedTag.getKey(), subTagsMap);
|
||||
}
|
||||
return new SonarPacketSnapshot(new UpdateTagsPacket(tagsMap));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(final ByteBuf byteBuf, final ProtocolVersion protocolVersion) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -25,6 +25,7 @@ import lombok.ToString;
|
||||
import net.kyori.adventure.nbt.CompoundBinaryTag;
|
||||
import net.kyori.adventure.nbt.LongArrayBinaryTag;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
import xyz.jonesdev.sonar.common.util.ProtocolUtil;
|
||||
@@ -111,7 +112,7 @@ public final class ChunkDataPacket implements SonarPacket {
|
||||
// Since 1.21.5. The length of the long array of PaletteStorage no longer depends on the VarInt in the packet
|
||||
// SingularPalette doesn't need to read any additional long array.
|
||||
// So we'll remove suffix 0 as array length here. The cost of writing a palette has been reduced from 3 to 2 bytes.
|
||||
final byte[] sectionData = protocolVersion.lessThan(ProtocolVersion.MINECRAFT_1_21_5) ? new byte[]{0, 0, 0, 0, 0, 0, 1, 0} : new byte[]{0, 0, 0, 0, 0, 1};
|
||||
final byte[] sectionData = getSectionDataBytes(protocolVersion);
|
||||
int count = 24;
|
||||
ProtocolUtil.writeVarInt(byteBuf, sectionData.length * count);
|
||||
|
||||
@@ -141,6 +142,20 @@ public final class ChunkDataPacket implements SonarPacket {
|
||||
}
|
||||
}
|
||||
|
||||
private static byte @NonNull [] getSectionDataBytes(@NonNull ProtocolVersion protocolVersion) {
|
||||
final byte[] sectionData;
|
||||
|
||||
|
||||
if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_26_1)) {
|
||||
sectionData = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
} else if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_21_5)) {
|
||||
sectionData = new byte[]{0, 0, 0, 0, 0, 1};
|
||||
} else {
|
||||
sectionData = new byte[]{0, 0, 0, 0, 0, 0, 1, 0};
|
||||
}
|
||||
return sectionData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(final ByteBuf byteBuf, final ProtocolVersion protocolVersion) {
|
||||
throw new UnsupportedOperationException();
|
||||
|
||||
+12
@@ -24,6 +24,7 @@ import lombok.NoArgsConstructor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
import xyz.jonesdev.sonar.common.util.ProtocolUtil;
|
||||
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@@ -34,6 +35,17 @@ public final class UpdateTimePacket implements SonarPacket {
|
||||
|
||||
@Override
|
||||
public void encode(final @NotNull ByteBuf byteBuf, final @NotNull ProtocolVersion protocolVersion) {
|
||||
if (protocolVersion.greaterThanOrEquals(ProtocolVersion.MINECRAFT_26_1)) {
|
||||
// muck fojang
|
||||
byteBuf.writeLong(timeOfDay);
|
||||
ProtocolUtil.writeVarInt(byteBuf, 1);
|
||||
ProtocolUtil.writeVarInt(byteBuf, 0); // dimension
|
||||
ProtocolUtil.writeVarLong(byteBuf, timeOfDay);
|
||||
byteBuf.writeFloat(0f); // partialTicks
|
||||
byteBuf.writeFloat(tickDayTime ? 1f : 0f); // rate
|
||||
return;
|
||||
}
|
||||
|
||||
byteBuf.writeLong(worldAge);
|
||||
byteBuf.writeLong(timeOfDay);
|
||||
|
||||
|
||||
@@ -18,18 +18,17 @@
|
||||
package xyz.jonesdev.sonar.common.util;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.util.AttributeKey;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@UtilityClass
|
||||
public class EaglerUtil {
|
||||
// https://github.com/lax1dude/eaglerxserver/blob/main/core/src/main/java/net/lax1dude/eaglercraft/backend/server/adapter/PipelineAttributes.java
|
||||
public static final AttributeKey<Object> EAGLER_LISTENER_DATA = AttributeKey.valueOf("$eagler0");
|
||||
public static final AttributeKey<Object> EAGLER_PIPELINE_DATA = AttributeKey.valueOf("$eagler1");
|
||||
// Detect EaglerXServer WebSocket connections by checking for Eagler-specific pipeline handlers.
|
||||
private static final String H_EAGLER_HANDSHAKE = "eagler-handshake";
|
||||
private static final String H_EAGLER_FRAME_CODEC = "eagler-frame-codec";
|
||||
|
||||
public boolean isEaglerConnection(final @NotNull Channel channel) {
|
||||
return channel.attr(EAGLER_LISTENER_DATA).get() != null
|
||||
|| channel.attr(EAGLER_PIPELINE_DATA).get() != null;
|
||||
return channel.pipeline().get(H_EAGLER_HANDSHAKE) != null
|
||||
|| channel.pipeline().get(H_EAGLER_FRAME_CODEC) != null;
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ package xyz.jonesdev.sonar.common.verification;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.api.antibot.SonarUser;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.CaptchaPreparer;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
import xyz.jonesdev.sonar.common.protocol.map.MapCaptchaInfo;
|
||||
@@ -43,9 +44,15 @@ public final class CaptchaHandler extends VerificationHandler {
|
||||
|
||||
this.tries = Sonar.get0().getConfig().getVerification().getMap().getMaxTries();
|
||||
|
||||
// We may not be on slot 4, so we need to make sure to synchronize the current slot
|
||||
user.delayedWrite(CAPTCHA_HELD_ITEM_SLOT);
|
||||
user.delayedWrite(CAPTCHA_SET_CONTAINER_SLOT);
|
||||
final boolean placeInOffhand = Sonar.get().getConfig().getVerification().getMap().isPlaceInOffhand()
|
||||
&& user.getProtocolVersion().greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_9);
|
||||
if (placeInOffhand) {
|
||||
user.delayedWrite(CAPTCHA_SET_CONTAINER_SLOT_OFFHAND);
|
||||
} else {
|
||||
// We may not be on slot 4, so we need to make sure to synchronize the current slot
|
||||
user.delayedWrite(CAPTCHA_HELD_ITEM_SLOT);
|
||||
user.delayedWrite(CAPTCHA_SET_CONTAINER_SLOT);
|
||||
}
|
||||
// Send random captcha to the player
|
||||
final MapCaptchaInfo captcha = CaptchaPreparer.getRandomCaptcha();
|
||||
this.answer = captcha.getAnswer().toLowerCase();
|
||||
|
||||
@@ -19,6 +19,7 @@ package xyz.jonesdev.sonar.common.verification;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.api.antibot.AntiBot;
|
||||
import xyz.jonesdev.sonar.api.antibot.SonarUser;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
@@ -38,8 +39,10 @@ public final class GravityHandler extends VerificationHandler {
|
||||
// Bedrock users start falling immediately
|
||||
this.canFall = user.isGeyser();
|
||||
// We don't want to check Geyser players for valid gravity, as this might cause issues because of the protocol
|
||||
this.enableGravityCheck = !user.isGeyser() && Sonar.get0().getConfig().getVerification().getGravity().isEnabled();
|
||||
this.enableCollisionsCheck = !user.isGeyser() && Sonar.get0().getConfig().getVerification().getGravity().isCheckCollisions();
|
||||
this.enableGravityCheck = !user.isGeyser() && AntiBot.shouldPerform(
|
||||
Sonar.get0().getConfig().getVerification().getGravity().getTiming());
|
||||
this.enableCollisionsCheck = !user.isGeyser() && AntiBot.shouldPerform(
|
||||
Sonar.get0().getConfig().getVerification().getGravity().getCollisionTiming());
|
||||
|
||||
// First, write the JoinGame packet to the buffer
|
||||
user.delayedWrite(joinGame);
|
||||
|
||||
@@ -138,6 +138,11 @@ public final class LoginHandler extends VerificationHandler {
|
||||
for (final SonarPacket packet : getRegistryPackets(user.getProtocolVersion())) {
|
||||
user.delayedWrite(packet);
|
||||
}
|
||||
// Write the tags because Mojang decided to screw everyone over in 26.1.
|
||||
final SonarPacket tags = getTagsPacket(user.getProtocolVersion());
|
||||
if (tags != null) {
|
||||
user.delayedWrite(tags);
|
||||
}
|
||||
// Write the FinishConfiguration packet to the buffer
|
||||
user.delayedWrite(FinishConfigurationPacket.INSTANCE);
|
||||
// Send all packets in one flush
|
||||
|
||||
@@ -19,6 +19,7 @@ package xyz.jonesdev.sonar.common.verification;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.jonesdev.sonar.api.Sonar;
|
||||
import xyz.jonesdev.sonar.api.antibot.AntiBot;
|
||||
import xyz.jonesdev.sonar.api.antibot.SonarUser;
|
||||
import xyz.jonesdev.sonar.api.antibot.protocol.ProtocolVersion;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacket;
|
||||
@@ -163,7 +164,8 @@ public final class ProtocolHandler extends VerificationHandler {
|
||||
|
||||
private void markSuccess() {
|
||||
// Pass the player to the next best verification handler
|
||||
if (!user.isGeyser() && Sonar.get0().getConfig().getVerification().getVehicle().isEnabled()) {
|
||||
if (!user.isGeyser()
|
||||
&& AntiBot.shouldPerform(Sonar.get0().getConfig().getVerification().getVehicle().getTiming())) {
|
||||
user.channel().pipeline().get(SonarPacketDecoder.class).setListener(new VehicleHandler(user));
|
||||
} else if (user.isForceCaptcha() || Sonar.get0().getAntiBot().shouldPerformCaptcha()) {
|
||||
user.channel().pipeline().get(SonarPacketDecoder.class).setListener(new CaptchaHandler(user));
|
||||
|
||||
+15
-5
@@ -31,14 +31,13 @@ import xyz.jonesdev.sonar.common.netty.MinecraftVarIntLengthEncoder;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacketDecoder;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacketEncoder;
|
||||
import xyz.jonesdev.sonar.common.protocol.SonarPacketListener;
|
||||
import xyz.jonesdev.sonar.common.protocol.packets.play.TransferPacket;
|
||||
import xyz.jonesdev.sonar.common.statistics.GlobalSonarStatistics;
|
||||
import xyz.jonesdev.sonar.common.util.ProtocolUtil;
|
||||
import xyz.jonesdev.sonar.common.util.exception.QuietDecoderException;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import static xyz.jonesdev.sonar.common.protocol.SonarPacketPreparer.transferToOrigin;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public abstract class VerificationHandler implements SonarPacketListener {
|
||||
protected final SonarUser user;
|
||||
@@ -57,17 +56,28 @@ public abstract class VerificationHandler implements SonarPacketListener {
|
||||
|
||||
// If enabled, transfer the player back to the origin server.
|
||||
// This feature was introduced by Mojang in Minecraft version 1.20.5.
|
||||
if (transferToOrigin != null && user.getProtocolVersion().greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_20_5)) {
|
||||
if (user.getProtocolVersion().greaterThanOrEquals(ProtocolVersion.MINECRAFT_1_20_5)
|
||||
&& Sonar.get0().getConfig().getGeneralConfig().getBoolean("verification.transfer.enabled")) {
|
||||
// Use the original handshake hostname if configured and available (for forced hosts / proxy setups),
|
||||
// otherwise fall back to the configured destination host.
|
||||
final String hostname = user.getHostname();
|
||||
final boolean useHandshake = Sonar.get0().getConfig().getGeneralConfig()
|
||||
.getBoolean("verification.transfer.use-handshake-hostname");
|
||||
final String destinationHost = useHandshake && hostname != null && !hostname.isEmpty()
|
||||
? hostname
|
||||
: Sonar.get0().getConfig().getGeneralConfig().getString("verification.transfer.destination-host");
|
||||
final int destinationPort = Sonar.get0().getConfig().getGeneralConfig().getInt("verification.transfer.destination-port");
|
||||
final TransferPacket transferPacket = new TransferPacket(destinationHost, destinationPort);
|
||||
// Send the transfer packet to the player (and close the channel if on Java Edition)
|
||||
if (user.isGeyser()) {
|
||||
user.write(transferToOrigin);
|
||||
user.write(transferPacket);
|
||||
// Make sure we cannot receive any more packets from the player
|
||||
user.channel().pipeline().remove(SonarPacketDecoder.class);
|
||||
user.channel().pipeline().remove(SonarPacketEncoder.class);
|
||||
user.channel().pipeline().remove(MinecraftVarInt21FrameDecoder.class);
|
||||
user.channel().pipeline().remove(MinecraftVarIntLengthEncoder.class);
|
||||
} else {
|
||||
ProtocolUtil.closeWith(user.channel(), user.getProtocolVersion(), transferToOrigin);
|
||||
ProtocolUtil.closeWith(user.channel(), user.getProtocolVersion(), transferPacket);
|
||||
}
|
||||
} else {
|
||||
// Disconnect player with the verification success message
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potřebujete pomoc nebo máte otázky? https://jonesdev.xyz/discord
|
||||
# Potřebujete pomoc nebo máte otázky? https://sonar.top/discord
|
||||
# Zdrojový kód: https://github.com/jonesdevelopment/sonar
|
||||
# Dokumentace: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licencováno pod GPL-3.0
|
||||
@@ -80,7 +80,7 @@ verification:
|
||||
# Všechny předpokládané pohyby jsou předpočítány, kvůli ušetření výkonu
|
||||
gravity:
|
||||
# Měl by Sonar zkoušet pro gravitaci hráče (Doporučováno)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Měl by Sonar přimět hráče, aby vyřešil CAPTCHA, pokud neuspějí při kontrole gravitace?
|
||||
captcha-on-fail: false
|
||||
# Maximální počet ticků, který má hráč padat aby byl puštěn na verifikační platformu
|
||||
@@ -89,12 +89,12 @@ verification:
|
||||
# Kontroluje, zda hráč naráží do bloků, které se vytvořily pod ním
|
||||
collision:
|
||||
# Měl by Sonar zkoušet jestli se hráč dotýka bloku? (Doporučováno)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Kontroluje, zda klient odesílá správné pakety při montáži vozidla
|
||||
vehicle:
|
||||
# Měl by sonar kontrolovat, zda hráč správně vstoupil na loď?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Minimální počet paketů odeslaných klientem
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -125,6 +125,9 @@ verification:
|
||||
# Znaky (čísla a písmena), které jsou povoleny k zobrazování v CAPTCHE
|
||||
# Nedoporučuje se přidávat čísla nebo písmena, která by se mohla navzájem podobat
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Zkouší pokuď hráč posílá správný "client brand packet" serveru
|
||||
client-brand:
|
||||
@@ -152,12 +155,19 @@ verification:
|
||||
# TransferTool pro Geyser, aby byli hráči Bedrocku přesměrováni na správný server.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Pokud používáte proxy s forced hosts, Sonar může použít název hostitele,
|
||||
# se kterým se hráč původně připojil (z handshake paketu), jako cíl přenosu.
|
||||
# Vypněte to, pokud jsou vaše forced hosts pouze pro interní směrování
|
||||
# a chcete, aby všichni hráči byli přeneseni na nakonfigurovaný destination-host.
|
||||
use-handshake-hostname: false
|
||||
# Na který server by měl Sonar přenést hráče, když projde ověřením?
|
||||
# Zadejte IP serveru, který hráči používají k běžnému připojení k vašemu serveru.
|
||||
# Například můžete zadat "mc.hypixel.net" nebo přímou IP jako "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# Jaký port by měl Sonar použít při přenosu hráče na původní server?
|
||||
# Pokud váš server nepotřebuje port pro připojení, můžete toto ponechat jako 25565.
|
||||
# Pokud používáte forced hosts (use-handshake-hostname: true), nastavte to na port,
|
||||
# na kterém proxy naslouchá (port "bind" v konfiguraci vašeho proxy).
|
||||
destination-port: 25565
|
||||
|
||||
# Gamemode hráče při verifikaci
|
||||
@@ -187,6 +197,9 @@ verification:
|
||||
# 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: false
|
||||
# Měl by Sonar kontrolovat také hráče EaglercraftX?
|
||||
# Tato funkce je experimentální a může způsobit problémy.
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Brauchst du Hilfe? https://jonesdev.xyz/discord
|
||||
# Brauchst du Hilfe? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Dokumentation: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, lizenziert unter GPL-3.0
|
||||
@@ -77,7 +77,7 @@ verification:
|
||||
# Alle vorhergesagten Bewegungen werden vorausberechnet, um die Leistung zu sparen
|
||||
gravity:
|
||||
# Soll Sonar auf gültige Client-Gravitation prüfen? (Empfohlen)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Soll Sonar den Spieler dazu bringen, ein CAPTCHA zu lösen, wenn er die Schwerkraftprüfung nicht besteht?
|
||||
captcha-on-fail: false
|
||||
# Maximale Anzahl an Ticks, die der Spieler fallen muss, um die Plattform erreichen zu dürfen
|
||||
@@ -86,12 +86,12 @@ verification:
|
||||
# Prüft, ob der Spieler mit Blöcken kollidiert, die unter ihm gespawnt sind
|
||||
collision:
|
||||
# Soll Sonar prüfen, ob der Spieler mit Blöcken kollidiert? (Empfohlen)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Überprüft, ob der Spieler beim Einsteigen in ein Boot die richtigen Pakete sendet
|
||||
vehicle:
|
||||
# Sollte Sonar prüfen, ob der Spieler richtig in ein Fahrzeug einsteigt?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Mindestanzahl der vom Client gesendeten Pakete
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -122,6 +122,9 @@ verification:
|
||||
# Zeichen (Buchstaben und Zahlen), die im Antwort-CAPTCHA erscheinen dürfen
|
||||
# Es wird nicht empfohlen, Zahlen oder Buchstaben hinzuzufügen, die einander ähneln könnten
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Überprüft, ob die Spieler eine gültige Client-Marke an den Server senden
|
||||
client-brand:
|
||||
@@ -149,12 +152,20 @@ verification:
|
||||
# TransferTool für Geyser einrichten, damit Bedrock-Spieler auf den richtigen Server umgeleitet werden.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Wenn Sie einen Proxy mit forced hosts verwenden, kann Sonar den Hostnamen,
|
||||
# mit dem der Spieler ursprünglich verbunden war (aus dem Handshake-Paket),
|
||||
# als Übertragungsziel verwenden.
|
||||
# Deaktivieren Sie diese Option, wenn Ihre forced hosts nur für das interne
|
||||
# Routing sind und alle Spieler zum konfigurierten destination-host übertragen werden sollen.
|
||||
use-handshake-hostname: false
|
||||
# Auf welchen Server soll Sonar den Spieler übertragen, wenn die Verifizierung bestanden wurde?
|
||||
# Bitte geben Sie die Server-IP ein, die von Spielern verwendet wird, um sich zu verbinden.
|
||||
# Sie können beispielsweise "mc.hypixel.net" oder eine direkte IP wie "1.1.1.1" verwenden.
|
||||
destination-host: "play.my-server.com"
|
||||
# Welchen Port sollte Sonar verwenden, wenn der Spieler auf den Ursprungsserver gesendet wird?
|
||||
# Wenn Ihr Server keinen Port zum Herstellen einer Verbindung benötigt, können Sie diesen auf 25565 belassen.
|
||||
# Wenn Sie forced hosts verwenden (use-handshake-hostname: true), setzen Sie dies auf
|
||||
# den Port, auf dem der Proxy horcht (den "Bind"-Port in Ihrer Proxy-Konfiguration).
|
||||
destination-port: 25565
|
||||
|
||||
# Der Spielmodus des Spielers während der Überprüfung
|
||||
@@ -184,6 +195,9 @@ verification:
|
||||
# Diese Funktion ist experimentell und kann Probleme verursachen
|
||||
# Wenn dies deaktiviert ist, werden Bedrock-Spieler übersprungen
|
||||
check-geyser-players: false
|
||||
# Sollte Sonar auch EaglercraftX-Spieler überprüfen?
|
||||
# Diese Funktion ist experimentell und kann zu Problemen führen.
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Need help or have questions? https://jonesdev.xyz/discord
|
||||
# Need help or have questions? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Documentation: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# All predicted motions are precalculated to save performance
|
||||
gravity:
|
||||
# Should Sonar check for valid client gravity? (Recommended)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Should Sonar make the player solve a CAPTCHA if they fail the gravity check?
|
||||
captcha-on-fail: false
|
||||
# The number of ticks the player has to fall to be allowed to hit the platform
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# Checks if the player is colliding with blocks spawned below them
|
||||
collision:
|
||||
# Should Sonar check if the player collides with blocks? (Recommended)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Checks if the client sends proper packets when entering a boat
|
||||
vehicle:
|
||||
# Should Sonar check if the player properly enters a boat?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Minimum number of packets sent by the client
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -125,6 +125,9 @@ verification:
|
||||
# It is not recommended to add numbers or letters that might look like one another.
|
||||
# You should only edit this if you know what you're doing
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Checks if the players are sending a valid client brand to the server
|
||||
client-brand:
|
||||
@@ -152,12 +155,19 @@ verification:
|
||||
# TransferTool for Geyser, so Bedrock players are redirected to the correct server.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# When behind a proxy with forced hosts, Sonar can use the hostname the player
|
||||
# originally connected with (from the handshake packet) as the transfer destination.
|
||||
# Disable this if your forced hosts are for internal routing only and you want
|
||||
# all players to be transferred to the configured destination-host instead.
|
||||
use-handshake-hostname: false
|
||||
# Which server should Sonar transfer the player to when the verification is passed?
|
||||
# Please enter the server IP used by players to normally connect to your server.
|
||||
# For example, you can put "mc.hypixel.net" or a direct IP like "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# Which port should Sonar use when transferring the player to the origin server?
|
||||
# If your server does not need a port to connect to, you can leave this as 25565.
|
||||
# If you are using forced hosts (use-handshake-hostname: true), set this to
|
||||
# the port the proxy is listening on (the "bind" port in your proxy config).
|
||||
destination-port: 25565
|
||||
|
||||
# The gamemode of the player during verification
|
||||
@@ -187,6 +197,9 @@ verification:
|
||||
# This feature is experimental and might cause issues
|
||||
# If this is disabled, Bedrock players will be skipped
|
||||
check-geyser-players: false
|
||||
# Should Sonar also check EaglercraftX players?
|
||||
# This feature is experimental and might cause issues
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Besoin d'aide ou d'autres questions ? https://jonesdev.xyz/discord
|
||||
# Besoin d'aide ou d'autres questions ? https://sonar.top/discord
|
||||
# Code source : https://github.com/jonesdevelopment/sonar
|
||||
# Documentation: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licence sous GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# Tous les mouvements prévus sont précalculés afin d'économiser les performances
|
||||
gravity:
|
||||
# Sonar devrait-il vérifier la gravité du client ? (Recommandé)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Sonar devrait-il faire résoudre un CAPTCHA au joueur s'il échoue à la vérification de la gravité ?
|
||||
captcha-on-fail: false
|
||||
# Nombre maximum de ticks que le joueur a pour tomber avant de pouvoir toucher la plateforme
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# Vérifie si le joueur entre en collision avec les blocs apparus en dessous de lui
|
||||
collision:
|
||||
# Sonar devrait-il vérifier si le joueur entre en collision avec des blocs ? (Recommandé)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Vérifie si le client envoie les paquets appropriés lorsqu'il monte dans un véhicule
|
||||
vehicle:
|
||||
# Sonar devrait-il vérifier si le joueur entre correctement dans un bateau ?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Nombre minimum de paquets envoyés par le client
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -124,6 +124,9 @@ verification:
|
||||
# Caractères (lettres et chiffres) autorisés à apparaître dans la réponse au CAPTCHA
|
||||
# Il n'est pas recommandé d'ajouter des chiffres ou des lettres qui pourraient se ressembler
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Vérifie si le joueur envoie une marque client valide au serveur
|
||||
client-brand:
|
||||
@@ -151,12 +154,20 @@ verification:
|
||||
# TransferTool pour Geyser, afin que les joueurs Bedrock soient redirigés vers le bon serveur.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Lorsque vous utilisez un proxy avec forced hosts, Sonar peut utiliser le nom d'hôte
|
||||
# que le joueur a utilisé initialement pour se connecter (du paquet handshake) comme
|
||||
# destination du transfert.
|
||||
# Désactivez cette option si vos forced hosts sont uniquement pour le routage interne
|
||||
# et que vous souhaitez que tous les joueurs soient transférés vers le destination-host configuré.
|
||||
use-handshake-hostname: false
|
||||
# Quel serveur Sonar devrait-il utiliser pour transférer le joueur une fois la vérification réussie ?
|
||||
# Veuillez entrer l'adresse IP du serveur que les joueurs utilisent normalement pour se connecter à votre serveur.
|
||||
# Par exemple, vous pouvez mettre "mc.hypixel.net" ou une IP directe comme "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# Quel port Sonar devrait-il utiliser pour transférer le joueur au serveur d'origine ?
|
||||
# Si votre serveur n'a pas besoin d'un port pour se connecter, vous pouvez laisser celui-ci comme 25565.
|
||||
# Si vous utilisez forced hosts (use-handshake-hostname: true), définissez ce port sur
|
||||
# le port d'écoute du proxy (le port "bind" dans la configuration de votre proxy).
|
||||
destination-port: 25565
|
||||
|
||||
# Le mode de jeu du joueur pendant la vérification
|
||||
@@ -186,6 +197,9 @@ verification:
|
||||
# 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: false
|
||||
# Sonar devrait-il également vérifier les joueurs EaglercraftX ?
|
||||
# Cette fonctionnalité est expérimentale et peut causer des problèmes.
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# დახმარება გჭირდება ან კითხვა გაქვს? https://jonesdev.xyz/discord
|
||||
# დახმარება გჭირდება ან კითხვა გაქვს? https://sonar.top/discord
|
||||
# საწყისი კოდი: https://github.com/jonesdevelopment/sonar
|
||||
# Documentation: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# ყველა პროგნოზირებული მოძრაობა წინასწარ არის გათვლილი შესრულების სისწრაფის შესანარჩუნებლად
|
||||
gravity:
|
||||
# უნდა შეამოწმოს თუ არა Sonar-მა მოთამაშის (ან ბოტის) გრავიტაცია? (რეკომენდებულია)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# უნდა აიძულოს თუ არა Sonar-მა მოთამაშეს შეასრულოს CAPTCHA, თუ ისინი ვერ შეასრულებენ სიმძიმის შემოწმებას?
|
||||
captcha-on-fail: false
|
||||
# ტიკების მაქსიმალური რაოდენობა რომელითაც მოთამაშე უნდა დაეცეს, რათა პლატფორმაზე დაცემა შეეძლოს. (20 ტიკი = 1 წამი)
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# ამოწმებს, ეჯახება თუ არა მოთამაშე მათ ქვემოთ წარმოქმნილ ბლოკებს
|
||||
collision:
|
||||
# უნდა შეამოწმოს თუ არა Sonar-მა, ეტაკება თუ არა მოთამაშე ბლოკებს? (რეკომენდებულია)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# ამოწმებს, აგზავნის თუ არა კლიენტი შესაბამის პაკეტებს სატრანსპორტო საშუალებაზე დაჯდომის დროს
|
||||
vehicle:
|
||||
# უნდა შეამოწმოს თუ არა სონარმა მოთამაშე სწორად შესული თუ არა ნავში?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# კლიენტის მიერ გაგზავნილი პაკეტების მინიმალური რაოდენობა
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -124,6 +124,9 @@ verification:
|
||||
# სიმბოლოები (ასოები და რიცხვები), რომლებიც დაშვებულია გამოჩნდეს CAPTCHA-ს პასუხში
|
||||
# არ არის რეკომენდებული რიცხვების ან ასოების დამატება, რომლებიც შეიძლება ერთმანეთს ჰგავდეს
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# ამოწმებს, აგზავნიან თუ არა მოთამაშეები სერვერზე რეალურ მოთამაშის მეტსახელს
|
||||
client-brand:
|
||||
@@ -150,12 +153,20 @@ verification:
|
||||
# TransferTool Geyser-ისთვის, ასე რომ Bedrock მოთამაშეები გადამისამართდებიან სწორ სერვერზე.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# როდესაც იყენებთ პროქსის forced hosts-თან, Sonar-ს შეუძლია გამოიყენოს ჰოსტის სახელი,
|
||||
# რომლითაც მოთამაშე თავდაპირველად დაუკავშირდა (handshake პაკეტიდან), როგორც
|
||||
# ტრანსფერის დანიშნულება.
|
||||
# გამორთეთ ეს, თუ თქვენი forced hosts არის მხოლოდ შიდა მარშრუტიზაციისთვის
|
||||
# და გსურთ ყველა მოთამაშის გადაყვანა კონფიგურირებულ destination-host-ზე.
|
||||
use-handshake-hostname: false
|
||||
# რომელ სერვერზე უნდა გადაიყვანოს Sonar-მა მოთამაშე ვერიფიკაციის გავლის შემდეგ?
|
||||
# გთხოვთ, შეიყვანოთ სერვერის IP მისამართი, რომლითაც მოთამაშეები ჩვეულებრივ უერთდებიან თქვენს სერვერს
|
||||
# მაგალითად, შეგიძლიათ ჩაწეროთ "mc.hypixel.net" ან პირდაპირი IP როგორიცაა "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# რომელი პორტი უნდა გამოიყენოს Sonar-მა მოთამაშის საწყის სერვერზე გადაყვანისას?
|
||||
# თუ თქვენს სერვერს არ სჭირდება პორტი შესასვლელად, შეგიძლიათ დატოვოთ ეს 25565-ზე
|
||||
# თუ იყენებთ forced hosts-ს (use-handshake-hostname: true), დააყენეთ ეს იმ პორტზე,
|
||||
# რომელზეც პროქსი უსმენს ("bind" პორტი თქვენი პროქსის კონფიგურაციაში).
|
||||
destination-port: 25565
|
||||
|
||||
# მოთამაშის თამაშის რეჟიმი გადამოწმების დროს
|
||||
@@ -185,6 +196,9 @@ verification:
|
||||
# ეს ფუნქცია ექსპერიმენტულია და შეიძლება გამოიწვიოს პრობლემები
|
||||
# თუ ეს გამორთულია, Bedrock მოთამაშეები გამოვლენილი იქნება
|
||||
check-geyser-players: false
|
||||
# უნდა შეამოწმოს Sonar-მა EaglercraftX-ის მოთამაშეებიც?
|
||||
# ეს ფუნქცია ექსპერიმენტულია და შესაძლოა პრობლემები გამოიწვიოს
|
||||
check-eagler-players: false
|
||||
# დროის ოდენობა, რომელიც უნდა გავიდეს, სერვერთან კავშირის გარეშე, სანამ მოთამაშე დროებით გავარდება სერვერიდან.
|
||||
# (ეს არის ნაჩვენები მილიწამებში: 1 წამი = 1000 მილიწამი)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Hulp nodig of vragen? https://jonesdev.xyz/discord
|
||||
# Hulp nodig of vragen? https://sonar.top/discord
|
||||
# Broncode: https://github.com/jonesdevelopment/sonar
|
||||
# Documentatie: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, gelicentieerd onder GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# Alle voorspelde bewegingen worden vooraf berekend om prestaties te besparen
|
||||
gravity:
|
||||
# Moet Sonar controleren op geldige zwaartekracht van de cliënt? (Aanbevolen)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Moet Sonar de speler een CAPTCHA laten oplossen als hij niet slaagt voor de zwaartekracht controle?
|
||||
captcha-on-fail: false
|
||||
# Maximaal aantal ticks dat de speler moet laten vallen om het platform te mogen raken
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# Controleert of de speler botst met blokken die onder hem zijn gespawned
|
||||
collision:
|
||||
# Moet Sonar controleren of de speler tegen blokken botst? (Aanbevolen)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Controleert of de klant de juiste pakketten verzendt bij het monteren van een voertuig
|
||||
vehicle:
|
||||
# Moet Sonar controleren of de speler goed in een boot stapt?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Minimaal aantal pakketten verzonden door de cliënt
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -124,6 +124,9 @@ verification:
|
||||
# Tekens (letters en cijfers) die mogen voorkomen in het antwoord op de CAPTCHA
|
||||
# Het wordt niet aanbevolen om cijfers of letters toe te voegen die op elkaar lijken
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Controleert of de speler een geldig Minecraft-klantmerk naar de server verzendt
|
||||
client-brand:
|
||||
@@ -151,12 +154,20 @@ verification:
|
||||
# TransferTool voor Geyser, zodat Bedrock spelers worden doorgestuurd naar de juiste server.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Wanneer u een proxy met forced hosts gebruikt, kan Sonar de hostnaam gebruiken
|
||||
# waarmee de speler oorspronkelijk verbinding maakte (uit het handshake-pakket)
|
||||
# als overdrachtsbestemming.
|
||||
# Schakel dit uit als uw forced hosts alleen voor interne routering zijn en u
|
||||
# wilt dat alle spelers worden overgebracht naar de geconfigureerde destination-host.
|
||||
use-handshake-hostname: false
|
||||
# Naar welke server moet Sonar de speler overbrengen wanneer de verificatie is geslaagd?
|
||||
# Voer het server-IP in dat door spelers wordt gebruikt om normaal verbinding te maken met uw server.
|
||||
# U kunt bijvoorbeeld "mc.hypixel.net" of een direct IP-adres zoals "1.1.1.1" invoeren
|
||||
destination-host: "play.my-server.com"
|
||||
# Welke poort moet Sonar gebruiken bij het overbrengen van de speler naar de oorspronkelijke server?
|
||||
# Als uw server geen poort nodig heeft om verbinding mee te maken, kunt u dit op 25565 laten staan.
|
||||
# Als u forced hosts gebruikt (use-handshake-hostname: true), stelt u dit in op
|
||||
# de poort waarop de proxy luistert (de "bind"-poort in uw proxyconfiguratie).
|
||||
destination-port: 25565
|
||||
|
||||
# De spelmodus van de speler tijdens verificatie
|
||||
@@ -182,6 +193,9 @@ verification:
|
||||
# Moet Sonar elke beweging/positieverandering tijdens de verificatie registreren?
|
||||
# Dit wordt niet aanbevolen voor productieservers, maar kan nuttig zijn bij het opsporen van fouten.
|
||||
debug-xyz-positions: false
|
||||
# Moet Sonar ook EaglercraftX-spelers controleren?
|
||||
# Deze functie is experimenteel en kan problemen veroorzaken.
|
||||
check-eagler-players: false
|
||||
# Moet Sonar ook Geyser (Bedrock) spelers controleren?
|
||||
# Deze functie is experimenteel en kan problemen veroorzaken
|
||||
# Als dit is uitgeschakeld, worden Bedrock-spelers overgeslagen
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potrzebujesz pomocy lub masz pytania? https://jonesdev.xyz/discord
|
||||
# Potrzebujesz pomocy lub masz pytania? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Dokumentacja: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, na licencji GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# Wszystkie przewidywane ruchy są wstępnie obliczane w celu zachowania wydajności
|
||||
gravity:
|
||||
# Czy Sonar powinien sprawdzać poprawność grawitacji gracza? (Zalecane)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Czy Sonar powinien zmusić gracza do rozwiązania CAPTCHA, jeśli nie uda mu się przejść testu grawitacji?
|
||||
captcha-on-fail: false
|
||||
# Maksymalna liczba tików, po których gracz musi spaść, aby móc uderzyć w platformę.
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# Sprawdza, czy gracz zderza się z blokami, które pojawiły się pod nim
|
||||
collision:
|
||||
# Czy Sonar powinien sprawdzać, czy gracz zderza się z blokami? (Zalecane)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Sprawdza, czy gracz wysyła odpowiednie pakiety podczas umieszczania na pojeździe.
|
||||
vehicle:
|
||||
# Czy Sonar powinien sprawdzać, czy gracz prawidłowo wsiada do łodzi?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Minimalna liczba pakietów wysłanych przez klienta
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -124,6 +124,9 @@ verification:
|
||||
# Znaki (litery i cyfry), które mogą pojawić się w CAPTCHA
|
||||
# Nie zaleca się dodawania cyfr lub liter, które mogą być do siebie podobne
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Sprawdza, czy gracz wysyła prawidłowy client brand do serwera.
|
||||
client-brand:
|
||||
@@ -151,12 +154,19 @@ verification:
|
||||
# TransferTool dla Geyser, aby gracze Bedrock byli przekierowywani na właściwy serwer.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Gdy używasz proxy z forced hosts, Sonar może użyć nazwy hosta, z którą
|
||||
# gracz pierwotnie się łączył (z pakietu handshake) jako celu transferu.
|
||||
# Wyłącz tę opcję, jeśli twoje forced hosts są tylko do wewnętrznego routingu
|
||||
# i chcesz, aby wszyscy gracze byli przenoszeni na skonfigurowany destination-host.
|
||||
use-handshake-hostname: false
|
||||
# Na który serwer Sonar powinien przenieść gracza po pomyślnym przejściu weryfikacji?
|
||||
# Wprowadź adres IP serwera, który jest używany przez graczy do normalnego łączenia się z serwerem.
|
||||
# Na przykład, możesz wpisać "mc.hypixel.net" lub bezpośredni adres IP, taki jak "1.1.1.1".
|
||||
destination-host: "play.my-server.com"
|
||||
# Jaki port powinien używać Sonar podczas przenoszenia gracza do serwera początkowego?
|
||||
# Jeśli serwer nie potrzebuje portu do połączenia, można pozostawić 25565.
|
||||
# Jeśli używasz forced hosts (use-handshake-hostname: true), ustaw to na port,
|
||||
# na którym nasłuchuje proxy (port "bind" w konfiguracji twojego proxy).
|
||||
destination-port: 25565
|
||||
|
||||
# Tryb gry gracza (gamemode) podczas weryfikacji
|
||||
@@ -186,6 +196,9 @@ verification:
|
||||
# Ta funkcja jest eksperymentalna i może powodować problemy
|
||||
# Jeśli ta opcja jest wyłączona, gracze Bedrock będą pomijani
|
||||
check-geyser-players: false
|
||||
# Czy Sonar powinien również sprawdzać graczy EaglercraftX?
|
||||
# Ta funkcja jest eksperymentalna i może powodować problemy.
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Precisa de ajuda ou tem dúvidas? https://jonesdev.xyz/discord
|
||||
# Precisa de ajuda ou tem dúvidas? https://sonar.top/discord
|
||||
# Código-fonte: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development e Sonar Contributors, licenciado sob GPL-3.0
|
||||
#
|
||||
@@ -78,7 +78,7 @@ verification:
|
||||
# Todos os movimentos previstos são pré-calculados para economizar desempenho
|
||||
gravity:
|
||||
# O Sonar deve verificar a gravidade do cliente? (Recomendado)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# O Sonar deve fazer o jogador resolver um CAPTCHA se falhar na verificação de gravidade?
|
||||
captcha-on-fail: false
|
||||
# O número de ticks que o jogador deve cair para ser permitido atingir a plataforma
|
||||
@@ -87,12 +87,12 @@ verification:
|
||||
# Verifica se o jogador está colidindo com blocos gerados abaixo dele
|
||||
collision:
|
||||
# O Sonar deve verificar se o jogador colide com blocos? (Recomendado)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Verifica se o cliente envia pacotes adequados ao entrar em um barco
|
||||
vehicle:
|
||||
# O Sonar deve verificar se o jogador entra corretamente em um barco?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Número mínimo de pacotes enviados pelo cliente
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -124,6 +124,9 @@ verification:
|
||||
# Não é recomendável adicionar números ou letras que possam parecer semelhantes.
|
||||
# Você deve editar isso apenas se souber o que está fazendo
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Verifica se os jogadores estão enviando uma marca de cliente válida para o servidor
|
||||
client-brand:
|
||||
@@ -151,12 +154,19 @@ verification:
|
||||
# o TransferTool para Geyser, para que jogadores Bedrock sejam redirecionados para o servidor correto.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# Ao usar um proxy com forced hosts, o Sonar pode usar o hostname que o jogador
|
||||
# usou originalmente para se conectar (do pacote handshake) como destino da transferência.
|
||||
# Desative esta opção se seus forced hosts forem apenas para roteamento interno
|
||||
# e você quiser que todos os jogadores sejam transferidos para o destination-host configurado.
|
||||
use-handshake-hostname: false
|
||||
# Para qual servidor o Sonar deve transferir o jogador quando a verificação for passada?
|
||||
# Por favor, insira o IP do servidor usado pelos jogadores para se conectar normalmente ao seu servidor.
|
||||
# Por exemplo, você pode colocar "mc.hypixel.net" ou um IP direto como "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# Qual porta o Sonar deve usar ao transferir o jogador para o servidor de origem?
|
||||
# Se seu servidor não precisar de uma porta para se conectar, você pode deixar isso como 25565.
|
||||
# Se você estiver usando forced hosts (use-handshake-hostname: true), defina isto para
|
||||
# a porta em que o proxy está ouvindo (a porta "bind" na configuração do seu proxy).
|
||||
destination-port: 25565
|
||||
|
||||
# O modo de jogo do jogador durante a verificação
|
||||
@@ -186,6 +196,9 @@ verification:
|
||||
# Este recurso é experimental e pode causar problemas
|
||||
# Se isso estiver desativado, jogadores Bedrock serão ignorados
|
||||
check-geyser-players: false
|
||||
# O Sonar também deve verificar os jogadores do EaglercraftX?
|
||||
# Este recurso é experimental e pode causar problemas.
|
||||
check-eagler-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
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Нужна помощь или есть вопросы? https://jonesdev.xyz/discord
|
||||
# Нужна помощь или есть вопросы? https://sonar.top/discord
|
||||
# Исходный код: https://github.com/jonesdevelopment/sonar
|
||||
# Документация: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, под лицензией GPL-3.0
|
||||
@@ -79,7 +79,7 @@ verification:
|
||||
# Все предсказанные движения предварительно просчитываются для экономии производительности
|
||||
gravity:
|
||||
# Должен ли Sonar проверять наличие действительной гравитации клиента? (Рекомендуется)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Должен ли Sonar заставлять игрока решать CAPTCHA, если он не проходит проверку на гравитацию?
|
||||
captcha-on-fail: false
|
||||
# Максимальное количество тиков, на которое должен упасть игрок, чтобы ему было разрешено упасть на платформу
|
||||
@@ -88,12 +88,12 @@ verification:
|
||||
# Проверяет, сталкивается ли игрок с блоками, порожденными под ним
|
||||
collision:
|
||||
# Должен ли Sonar проверять, сталкивается ли игрок с блоками? (Рекомендуется)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# Проверяет, отправляет ли клиент правильные пакеты при садке на транспортное средство
|
||||
vehicle:
|
||||
# Должен ли сонар проверять, правильно ли игрок входит в лодку?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# Минимальное количество пакетов, отправляемых клиентом
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -123,6 +123,9 @@ verification:
|
||||
# Символы (буквы и цифры), которые разрешено использовать в ответе на капчу
|
||||
# Не рекомендуется добавлять цифры или буквы, которые могут быть похожи друг на друга
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# Проверяет, отправляет ли игрок на сервер действительный клиентский бренд.
|
||||
client-brand:
|
||||
@@ -150,12 +153,21 @@ verification:
|
||||
# TransferTool для Geyser, чтобы игроки Bedrock перенаправлялись на правильный сервер.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# При использовании прокси с forced hosts Sonar может использовать имя хоста,
|
||||
# с которого игрок изначально подключился (из handshake-пакета), в качестве
|
||||
# адреса назначения при передаче.
|
||||
# Отключите эту опцию, если ваши forced hosts используются только для внутренней
|
||||
# маршрутизации и вы хотите, чтобы все игроки перенаправлялись на настроенный
|
||||
# destination-host.
|
||||
use-handshake-hostname: false
|
||||
# На какой сервер должен Sonar переместить игрока после прохождения проверки?
|
||||
# Введите IP-адрес сервера, который обычно используется игроками для подключения к вашему серверу.
|
||||
# Например, вы можете указать "mc.hypixel.net" или прямой IP-адрес, например "1.1.1.1"
|
||||
destination-host: "play.my-server.com"
|
||||
# Какой порт должен использовать Sonar при перемещении игрока на исходный сервер?
|
||||
# Если ваш сервер не требует порта для подключения, вы можете оставить это как 25565.
|
||||
# Если вы используете forced hosts (use-handshake-hostname: true), укажите порт,
|
||||
# на котором слушает прокси (порт "bind" в конфигурации вашего прокси).
|
||||
destination-port: 25565
|
||||
|
||||
# Режим игрока во время проверки
|
||||
@@ -185,6 +197,9 @@ verification:
|
||||
# Эта функция экспериментальна и может вызывать проблемы
|
||||
# Если это отключено, игроки Bedrock будут пропущены
|
||||
check-geyser-players: false
|
||||
# Должен ли Sonar также проверять игроков EaglercraftX?
|
||||
# Эта функция является экспериментальной и может вызывать проблемы.
|
||||
check-eagler-players: false
|
||||
# Время, прошедшее с момента прекращения отправки пакетов игроком до отключения.
|
||||
# (Это значение представляет время в миллисекундах: 1 секунда = 1000 миллисекунд)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# 需要帮助吗? https://jonesdev.xyz/discord
|
||||
# 需要帮助吗? https://sonar.top/discord
|
||||
# 源代码: https://github.com/jonesdevelopment/sonar
|
||||
# 文件: https://docs.jonesdev.xyz/administration/configuring-sonar
|
||||
# Copyright Jones Development and Sonar Contributors, 以 GPL-3.0 许可证分发
|
||||
@@ -78,7 +78,7 @@ verification:
|
||||
# 检查玩家的下落移动是否遵循原版客户端.
|
||||
gravity:
|
||||
# Sonar 是否应该检查玩家的下落移动? (推荐启用)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# 当玩家验证失败时 是否向他们发送地图验证码?
|
||||
captcha-on-fail: false
|
||||
# 玩家跌落在平台上多少tick后才能被算作站在平台上?
|
||||
@@ -87,12 +87,12 @@ verification:
|
||||
# 检查玩家是否可以正确地站在方块上
|
||||
collision:
|
||||
# Sonar 是否应该生成方块平台以检查玩家下落与方块之间的碰撞? (推荐启用)
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
|
||||
# 检查客户端坐在实体上时是否发送了正确的数据包
|
||||
vehicle:
|
||||
# Sonar 是否应该让玩家坐在实体上, 以便检查他们的数据包是否合法?
|
||||
enabled: true
|
||||
timing: ALWAYS
|
||||
# 客户端需要发送的所需的最小数据包数量
|
||||
minimum-packets: 2
|
||||
|
||||
@@ -108,9 +108,9 @@ verification:
|
||||
# 如果未找到指定的图片, 则自动通过噪音生成一个随机的背景图片.
|
||||
# 如果图片在该插件的配置文件夹下, 则可以简单地输入图片的文件名.
|
||||
background: ''
|
||||
# 地图验证码的风格(默认:'modern').
|
||||
# 地图验证码的风格(默认: 'modern').
|
||||
# 要使用旧设计, 请将其设置为 'legacy'.
|
||||
# To use an experimental design, set this to 'complex'.
|
||||
# 要使用实验设计, 请将此项设置为 'complex'.
|
||||
style: 'modern'
|
||||
# Sonar 应该一次准备多少个验证码?
|
||||
precompute: 500
|
||||
@@ -122,6 +122,9 @@ verification:
|
||||
# 允许出现在验证码答案中的字符
|
||||
# 不建议添加可能看起来彼此相似的数字或字母
|
||||
alphabet: 'abcdefhjkmnoprstuxyz'
|
||||
# Should Sonar place the map in the player's offhand?
|
||||
# This only works on Minecraft 1.9 and above.
|
||||
place-in-offhand: false
|
||||
|
||||
# 检查玩家是否正在向服务器发送有效的客户端标识符
|
||||
client-brand:
|
||||
@@ -147,12 +150,19 @@ verification:
|
||||
# TransferTool 扩展, 以便将 Bedrock 玩家重定向到正确的服务器.
|
||||
# https://github.com/onebeastchris/TransferTool
|
||||
enabled: false
|
||||
# 当代理处于 forced hosts 模式时, Sonar 可以使用玩家最初连接时使用的
|
||||
# 主机名(来自握手包)作为传输目标地址。
|
||||
# 如果您的 forced hosts 仅用于内部路由, 并且您希望所有玩家都传输到
|
||||
# 配置的 destination-host, 请禁用此选项。
|
||||
use-handshake-hostname: false
|
||||
# 当玩家通过验证后, Sonar 应该将玩家转移到哪个服务器
|
||||
# 请输入玩家正常连接服务器时使用的服务器IP或域名
|
||||
# 例如使用域名("mc.hypixel.net") 或使用 IP 地址("1.1.1.1").
|
||||
destination-host: "play.my-server.com"
|
||||
# Sonar 应该告诉玩家通过以上域名的什么端口来连接到服务器?
|
||||
# 如果服务器地址不包含端口 请保留25565.
|
||||
# 如果您使用 forced hosts (use-handshake-hostname: true), 请将此设置为
|
||||
# 代理服务器监听的端口 (代理配置中的 "bind" 端口)。
|
||||
destination-port: 25565
|
||||
|
||||
# 玩家正在验证时所使用的游戏模式
|
||||
@@ -182,6 +192,9 @@ verification:
|
||||
# 此功能是实验性的. 请报告任何因为误判而导致无法通过检查的问题
|
||||
# 如果关闭该选项 Sonar 将不检查这些玩家以便直接连接到服务器.
|
||||
check-geyser-players: false
|
||||
# 声纳是否也应检测 EaglercraftX 玩家?
|
||||
# 此功能尚在试验阶段, 可能引发问题
|
||||
check-eagler-players: false
|
||||
# 播放器断开连接前停止发送数据包的时间
|
||||
# (该值为毫秒. 1秒等于1000毫秒.)
|
||||
read-timeout: 8000
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Need help or have questions? https://jonesdev.xyz/discord
|
||||
# Need help or have questions? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potřebujete pomoc nebo máte otázky? https://jonesdev.xyz/discord
|
||||
# Potřebujete pomoc nebo máte otázky? https://sonar.top/discord
|
||||
# Zdrojový kód: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licencováno pod GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Zástupný text pro každý '<prefix>' v tomto konfiguračním souboru
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Zástupný text pro každou '<support-url>' v tomto konfiguračním souboru
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Zástupný text pro každý '<header>' v tomto konfiguračním souboru
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development a přispěvatelé Sonaru</click>
|
||||
- ''
|
||||
- <gray>Potřebujete pomoc nebo máte nějaké otázky?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Kliknutím otevřete Discord)'>Otevřete ticket na Discordu </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Kliknutím otevřete GitHub)'>nebo otevřete nový problém na GitHubu.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Kliknutím otevřete Discord)'>Otevřete ticket na Discordu </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Kliknutím otevřete GitHub)'>nebo otevřete nový problém na GitHubu.
|
||||
- ''
|
||||
# Formátování seznamu podpříkazů zobrazených při spuštění hlavního příkazu
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Pouze hráči: </gray><only-players><br><gray>Vyžaduje konzoli: </gray><only-console><br><gray>Oprávnění: </gray><white><permission><br><gray>Aliasy: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Aktuální příchozí využitá šířka pásma: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Aktuální odchozí využitá šířka pásma: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Celková příchozí využitá šířka pásma: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Celková odchozí využitá šířka pásma: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Celková odchozí využitá šířka pásma: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Překlady pro '/sonar dump'
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Brauchst du Hilfe? https://jonesdev.xyz/discord
|
||||
# Brauchst du Hilfe? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, lizenziert unter GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Platzhalter für jedes '<prefix>' in dieser Konfigurationsdatei
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Platzhalter für jede '<support-url>' in dieser Konfigurationsdatei
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Platzhalter für jedes '<header>' in dieser Konfigurationsdatei
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -54,7 +54,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development und Sonar Mitwirkende</click>
|
||||
- ''
|
||||
- <gray>Brauchst du Hilfe oder hast du Fragen?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Klicken um Discord zu öffnen)'>Öffne ein Ticket auf Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klicken um GitHub zu öffnen)'>oder erstelle ein neues Issue auf GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Klicken um Discord zu öffnen)'>Öffne ein Ticket auf Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klicken um GitHub zu öffnen)'>oder erstelle ein neues Issue auf GitHub.
|
||||
- ''
|
||||
# Formatierung der Liste der Unterbefehle, die angezeigt wird, wenn der Hauptbefehl ausgeführt wird
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Nur Spieler: </gray><only-players><br><gray>Erfordert Konsole: </gray><only-console><br><gray>Berechtigung: </gray><white><permission><br><gray>Aliase: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Need help or have questions? https://jonesdev.xyz/discord
|
||||
# Need help or have questions? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder for every '<prefix>' in this configuration file
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder for every '<support-url>' in this configuration file
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder for every '<header>' in this configuration file
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>Need help or have any questions?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Click to open Discord)'>Open a ticket on the Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Click to open GitHub)'>or open a new issue on GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Click to open Discord)'>Open a ticket on the Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Click to open GitHub)'>or open a new issue on GitHub.
|
||||
- ''
|
||||
# Formatting of the list of subcommands shown when running the main command
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Only players: </gray><only-players><br><gray>Require console: </gray><only-console><br><gray>Permission: </gray><white><permission><br><gray>Aliases: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Current incoming used bandwidth: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Current outgoing used bandwidth: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Total incoming used bandwidth: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Total outgoing used bandwidth: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Total outgoing used bandwidth: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Translations for '/sonar dump'
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# ¿Necesita ayuda o tiene alguna pregunta? https://jonesdev.xyz/discord
|
||||
# ¿Necesita ayuda o tiene alguna pregunta? https://sonar.top/discord
|
||||
# Código fuente: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, bajo licencia GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder for every '<prefix>' in this configuration file
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder for every '<support-url>' in this configuration file
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder for every '<header>' in this configuration file
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year>Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>¿Necesita ayuda o tiene alguna pregunta?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Haga clic para abrir Discord)'>Abrir un ticket en Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Haga click para abrir GitHub)'>o abra una nueva Issue en GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Haga clic para abrir Discord)'>Abrir un ticket en Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Haga click para abrir GitHub)'>o abra una nueva Issue en GitHub.
|
||||
- ''
|
||||
# Formatting of the list of subcommands shown when running the main command
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Solo jugadores: </gray><only-players><br><gray>Requiere consola: </gray><only-console><br><gray>Permiso: </gray><white><permission><br><gray>Alias: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Ancho de banda entrante utilizado actualmente: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Ancho de banda utilizado saliente actual: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Ancho de banda entrante total utilizado: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Ancho de banda total utilizado saliente: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Ancho de banda total utilizado saliente: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Translations for '/sonar dump'
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Besoin d'aide ou d'autres questions ? https://jonesdev.xyz/discord
|
||||
# Besoin d'aide ou d'autres questions ? https://sonar.top/discord
|
||||
# Code source : https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licence sous GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Espace réservé pour tout '<prefix>' dans ce fichier de configuration
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Espace réservé pour tout '<support-url>' dans ce fichier de configuration
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Espace réservé pour tout '<header>' dans ce fichier de configuration
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development et les contributeurs de Sonar</click>
|
||||
- ''
|
||||
- <gray>Besoin d'aide ou avez-vous des questions ?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Cliquez pour ouvrir Discord)'>Ouvrez un ticket sur Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Cliquez pour ouvrir GitHub)'>ou ouvrez un nouveau problème sur GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Cliquez pour ouvrir Discord)'>Ouvrez un ticket sur Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Cliquez pour ouvrir GitHub)'>ou ouvrez un nouveau problème sur GitHub.
|
||||
- ''
|
||||
# Format de la liste des sous-commandes affichée lors de l'exécution de la commande principale
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Seulement pour les joueurs : </gray><only-players><br><gray>Nécessite la console : </gray><only-console><br><gray>Permission : </gray><white><permission><br><gray>Alias : </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -88,9 +88,9 @@ commands:
|
||||
# Description de cette sous-commande
|
||||
description: "Activer ou désactiver les notifications d'attaque"
|
||||
# Message affiché lorsqu'un joueur s'abonne aux notifications d'attaque de Sonar
|
||||
subscribed: "<prefix>Vous visualisez maintenant les notifications d'attaque de Sonar."
|
||||
subscribe: "<prefix>Vous visualisez maintenant les notifications d'attaque de Sonar."
|
||||
# Message affiché lorsqu'un joueur se désabonne des notifications d'attaque de Sonar
|
||||
unsubscribed: "<prefix>Vous ne visualisez plus les notifications d'attaque de Sonar."
|
||||
unsubscribe: "<prefix>Vous ne visualisez plus les notifications d'attaque de Sonar."
|
||||
|
||||
# Traductions pour '/sonar blacklist'
|
||||
blacklist:
|
||||
@@ -107,7 +107,7 @@ commands:
|
||||
# Message affiché lorsque quelqu'un supprime une adresse IP de la liste noire
|
||||
remove: '<prefix>Adresse IP <ip> supprimée avec succès de la liste noire.'
|
||||
# Message affiché lorsque quelqu'un ajoute une adresse IP à la liste noire, mais qu'elle est déjà en liste noire
|
||||
duplicate-ip: "<prefix>L'adresse IP que vous avez fournie est déjà sur la liste noire."
|
||||
ip-duplicate: "<prefix>L'adresse IP que vous avez fournie est déjà sur la liste noire."
|
||||
# Message affiché lorsque quelqu'un supprime une adresse IP de la liste noire, mais qu'elle n'est pas en liste noire
|
||||
ip-not-found: "<prefix>L'adresse IP que vous avez fournie ne figure pas sur la liste noire."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Butuh bantuan atau memiliki pertanyaan? https://jonesdev.xyz/discord
|
||||
# Butuh bantuan atau memiliki pertanyaan? https://sonar.top/discord
|
||||
# Kode sumber: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, dilisensikan di bawah GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder untuk setiap '<prefix>' dalam file konfigurasi ini
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder untuk setiap '<support-url>' dalam file konfigurasi ini
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder untuk setiap '<header>' dalam file konfigurasi ini
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development dan Kontributor Sonar</click>
|
||||
- ''
|
||||
- <gray>Butuh bantuan atau memiliki pertanyaan?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Klik untuk membuka Discord)'>Buka tiket di Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klik untuk membuka GitHub)'>atau buka masalah baru di GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Klik untuk membuka Discord)'>Buka tiket di Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klik untuk membuka GitHub)'>atau buka masalah baru di GitHub.
|
||||
- ''
|
||||
# Format daftar sub-perintah yang ditampilkan saat menjalankan perintah utama
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Hanya pemain: </gray><only-players><br><gray>Membutuhkan konsol: </gray><only-console><br><gray>Izin: </gray><white><permission><br><gray>Alias: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Need help or have questions? https://jonesdev.xyz/discord
|
||||
# Need help or have questions? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder for every '<prefix>' in this configuration file
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder for every '<support-url>' in this configuration file
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder for every '<header>' in this configuration file
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development e i collaboratori di Sonar</click>
|
||||
- ''
|
||||
- <gray>Hai bisogno di aiuto o hai domande?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Clicca per aprire Discord)'>Apri un ticket su Discord</hover></click> oppure <click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Clicca per aprire GitHub)'>apri una nuova issue su GitHub</hover></click>.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Clicca per aprire Discord)'>Apri un ticket su Discord</hover></click> oppure <click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Clicca per aprire GitHub)'>apri una nuova issue su GitHub</hover></click>.
|
||||
- ''
|
||||
# Formatting of the list of subcommands shown when running the main command
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Solo giocatori: </gray><only-players><br><gray>Richiede console: </gray><only-console><br><gray>Permesso: </gray><white><permission><br><gray>Alias: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Banda in ingresso attualmente utilizzata: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Banda in uscita attualmente utilizzata: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Banda totale in ingresso utilizzata: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Banda totale in uscita utilizzata: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Banda totale in uscita utilizzata: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Traduzioni per '/sonar dump'
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# გჭირდება დახმარება ან გაქვს კითხვები? დაგვიკავშირდი https://jonesdev.xyz/discord
|
||||
# გჭირდება დახმარება ან გაქვს კითხვები? დაგვიკავშირდი https://sonar.top/discord
|
||||
# კოდის წყარო: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# ცვლადი ყველა '<prefix>' სთვის ამ ფაილში.
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# ცვლადი ყველა '<support-url>' სთვის ამ ფაილში.
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# ცვლადი ყველა '<header>' სთვის ამ ფაილში.
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -35,7 +35,7 @@ commands:
|
||||
# მესიჯი, რომელიც იქნება ნაჩვენები, როდესაც მოთამაშე ცდის /sonar ს ამის უფლების გარეშე
|
||||
no-permission: '<prefix><red>თქვენ არ გაქვთ უფლება ამ ბრძანების გასაცემად.'
|
||||
# მესიჯი, რომელიც იქნება ნაჩვენები, როდესაც ბრძანება არასწორად იქნება გაცემული.
|
||||
incorrect-გამოყენება: '<prefix><red>გამოყენება: /sonar <subcommand-გამოყენება>'
|
||||
incorrect-usage: '<prefix><red>გამოყენება: /sonar <subcommand-usage>'
|
||||
# მესიჯი, რომელიც იქნება ნაჩვენები, როდესაც ვინმე გვაწვდის არასწორ IP მისამართს (არასწორი ფორმატით)
|
||||
invalid-ip-address: '<prefix>თქვენი IP მისამართი, როგორც ჩანს არასწორია.'
|
||||
# მესიჯი, რომელიც იქნება ნაჩვენები, როდესაც კონსოლი ცდის იმ ბრძანების გაცემას რომლის გაცემაც მხოლოდ მოთამაშეს შეუძლია.
|
||||
@@ -53,10 +53,10 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>გჭირდებათ დახმარება ან გაქვთ რამე კითხვა?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(დააჭირეთ რომ გახსნათ Discord)'>გახსენით ბილეთი Discord_ზე </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(დააჭირეთ რომ გახსნათ GitHub)'>ან შექმენით ახალი პრობლემის პოსტი GitHub_ზე.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(დააჭირეთ რომ გახსნათ Discord)'>გახსენით ბილეთი Discord_ზე </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(დააჭირეთ რომ გახსნათ GitHub)'>ან შექმენით ახალი პრობლემის პოსტი GitHub_ზე.
|
||||
- ''
|
||||
# ქვე-ბრძანებების ფორმატი რომელიც არის ნაჩვენები მთავარი ბრძანების გაცემის დროს.
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>მხოლოდ მოთამაშეები: </gray><only-players><br><gray>აუცილებელია კონსოლი: </gray><only-console><br><gray>უფლება: </gray><white><permission><br><gray>სხვა-სახელი: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <ქვე-ბრძანება> <white><description></hover></suggest-subcommand>'
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>მხოლოდ მოთამაშეები: </gray><only-players><br><gray>აუცილებელია კონსოლი: </gray><only-console><br><gray>უფლება: </gray><white><permission><br><gray>სხვა-სახელი: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
# ფორმატი კი_სთვის (სტიჩკა) და არა_სთვის (ჯვარი) (გამოიყენება ქვე-ბრძანებებში)
|
||||
tick: '<green>✔</green>'
|
||||
cross: '<red>✗</red>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>ამჟამინდელი მომდინარე გამოყენებული ქსელის გამოყენება: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>ამჟამინდელი გამდინარე გამოყენებული ქსელის გამოყენება: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>ჯამში მომდინარე გამოყენებული ქსელის გამოყენება: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>ჯამში გამდინარე გამოყენებული ქსელის გამოყენება: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>ჯამში გამდინარე გამოყენებული ქსელის გამოყენება: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# თარგმანი '/sonar dump' სთვის
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Hulp nodig of vragen? https://jonesdev.xyz/discord
|
||||
# Hulp nodig of vragen? https://sonar.top/discord
|
||||
# Broncode: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, gelicentieerd onder GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Tijdelijke aanduiding voor elke '<prefix>' in dit configuratiebestand
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Tijdelijke aanduiding voor elke '<support-url>' in dit configuratiebestand
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Tijdelijke aanduiding voor elke '<header>' in dit configuratiebestand
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>Hulp nodig of vragen?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Klik om Discord te openen)'>Open een ticket op de Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klik om GitHub te openen)'>of open een nieuw probleem op GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Klik om Discord te openen)'>Open een ticket op de Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Klik om GitHub te openen)'>of open een nieuw probleem op GitHub.
|
||||
- ''
|
||||
# Opmaak van de lijst met subcommand die wordt weergegeven bij het uitvoeren van de hoofdopdracht
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Alleen spelers: </gray><only-players><br><gray>Vereist console: </gray><only-console><br><gray>Toestemming: </gray><white><permission><br><gray>Aliassen: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potrzebujesz pomocy lub masz pytania? https://jonesdev.xyz/discord
|
||||
# Potrzebujesz pomocy lub masz pytania? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, na licencji GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder for every '<prefix>' in this configuration file
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder for every '<support-url>' in this configuration file
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder for every '<header>' in this configuration file
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -54,7 +54,7 @@ commands:
|
||||
Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>Potrzebujesz pomocy lub masz pytania?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Kliknij aby otworzyć Discord)'>Otwórz zgłoszenie na Discordzie </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Kliknij aby otworzyć GitHub)'>lub otwórz nowe zgłoszenie w serwisie GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Kliknij aby otworzyć Discord)'>Otwórz zgłoszenie na Discordzie </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Kliknij aby otworzyć GitHub)'>lub otwórz nowe zgłoszenie w serwisie GitHub.
|
||||
- ''
|
||||
# Formatting of the list of subcommands shown when running the main command
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Only players: </gray><only-players><br><gray>Require
|
||||
@@ -172,7 +172,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Aktualnie używana przychodząca przepustowość: <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Aktualnie używana przepustowość wychodząca: <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Całkowita wykorzystana przepustowość przychodząca: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Całkowita wykorzystana przepustowość wychodząca: <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Całkowita wykorzystana przepustowość wychodząca: <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Translations for '/sonar dump'
|
||||
dump:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Precisa de ajuda ou tem dúvidas? https://jonesdev.xyz/discord
|
||||
# Precisa de ajuda ou tem dúvidas? https://sonar.top/discord
|
||||
# Código-fonte: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development e Sonar Contributors, licenciado sob GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Placeholder para cada '<prefix>' neste arquivo de configuração
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Placeholder para cada '<support-url>' neste arquivo de configuração
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Placeholder para cada '<header>' neste arquivo de configuração
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development e Contribuidores do Sonar</click>
|
||||
- ''
|
||||
- <gray>Precisa de ajuda ou tem alguma dúvida?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Clique para abrir o Discord)'>Abra um ticket no Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Clique para abrir o GitHub)'>ou abra um novo problema no GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Clique para abrir o Discord)'>Abra um ticket no Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Clique para abrir o GitHub)'>ou abra um novo problema no GitHub.
|
||||
- ''
|
||||
# Formatação da lista de subcomandos mostrada ao executar o comando principal
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Somente jogadores: </gray><only-players><br><gray>Requer console: </gray><only-console><br><gray>Permissão: </gray><white><permission><br><gray>Aliases: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
@@ -169,7 +169,7 @@ commands:
|
||||
- ' <dark_aqua>▪ <gray>Largura de banda usada atualmente (entrada): <white><incoming-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Largura de banda usada atualmente (saída): <white><outgoing-traffic>'
|
||||
- ' <dark_aqua>▪ <gray>Largura de banda total usada (entrada): <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Largura de banda total usada (saída): <white><incoming-traffic-ttl>'
|
||||
- ' <dark_aqua>▪ <gray>Largura de banda total usada (saída): <white><outgoing-traffic-ttl>'
|
||||
|
||||
# Traduções para '/sonar dump'
|
||||
dump:
|
||||
@@ -296,4 +296,4 @@ notifications:
|
||||
- ' <dark_aqua>▪ <gray>Jogadores na fila: <white><queued>'
|
||||
- ''
|
||||
- <gray>Veja mais informações usando <white><click:run_command:'/sonar verbose'><hover:show_text:'(Clique para executar)'>/sonar verbose</hover></click><gray> ou <white><click:run_command:'/sonar stats'><hover:show_text:'(Clique para executar)'>/sonar stats</hover></click><gray>.
|
||||
- ''
|
||||
- ''
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Нужна помощь или есть вопросы? https://jonesdev.xyz/discord
|
||||
# Нужна помощь или есть вопросы? https://sonar.top/discord
|
||||
# Исходный код: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, под лицензией GPL-3.0
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Плейсхолдер для '<prefix>' в конфиге
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Плейсхолдер для '<support-url>' в конфиге
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Плейсхолдер для '<header>' в конфиге
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>Нужна помощь или есть вопросы?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Нажмите чтобы открыть Discord)'>Откройте тикет в Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Нажмите чтобы открыть GitHub)'>или откройте новый вопрос на GitHub.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Нажмите чтобы открыть Discord)'>Откройте тикет в Discord </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Нажмите чтобы открыть GitHub)'>или откройте новый вопрос на GitHub.
|
||||
- ''
|
||||
# Форматирование списка подкоманд
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Только игроки: </gray><only-players><br><gray>Требуется консоль: </gray><only-console><br><gray>Permission: </gray><white><permission><br><gray>Псевдонимы: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Yardıma mı ihtiyacınız var veya sorularınız mı var? https://jonesdev.xyz/discord
|
||||
# Yardıma mı ihtiyacınız var veya sorularınız mı var? https://sonar.top/discord
|
||||
# Kaynak kodu: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, GPL-3.0 altında lisanslanmıştır
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# Bu yapılandırma dosyasındaki her '<prefix>' için yer tutucu
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# Bu yapılandırma dosyasındaki her '<support-url>' için yer tutucu
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# Bu yapılandırma dosyasındaki her '<header>' için yer tutucu
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,10 +53,10 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development ve Sonar Katkıda Bulunanlar</click>
|
||||
- ''
|
||||
- <gray>Yardıma mı ihtiyacınız var veya sorularınız mı var?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Discord\'u açmak için tıklayın)'>Discord üzerinden bir bilet açın </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(GitHub\'ı açmak için tıklayın)'>veya GitHub üzerinde yeni bir sorun açın.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Discord\'u açmak için tıklayın)'>Discord üzerinden bir bilet açın </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(GitHub\'ı açmak için tıklayın)'>veya GitHub üzerinde yeni bir sorun açın.
|
||||
- ''
|
||||
# Ana komutu çalıştırırken gösterilen alt komutların listesi için biçimlendirme
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Sadece oyuncular: </gray><only-players><br><gray>Konsol gerekli: </gray><only-console><br><gray>İzin: </gray><white><permission><br><gray>Diğer isimler: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <suggest-subcommand><subcommand></suggest-subcommand> <white><description></hover></suggest-subcommand>'
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>Sadece oyuncular: </gray><only-players><br><gray>Konsol gerekli: </gray><only-console><br><gray>İzin: </gray><white><permission><br><gray>Diğer isimler: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
# Alt komutların üzerine gelinen metindeki evet (tick) ve hayır (cross) değerleri için biçimlendirme
|
||||
tick: '<green>✔</green>'
|
||||
cross: '<red>✗</red>'
|
||||
@@ -138,7 +138,7 @@ commands:
|
||||
# Bu alt komut için açıklama
|
||||
description: "Bu sunucunun oturum istatistiklerini göster"
|
||||
# İstatistikleri görüntülerken her şeyin üzerinde gösterilen bilgilendirme mesajı
|
||||
header: 'Bu oturum için <statistics-type> istatistikleri gösteriliyor:'
|
||||
header: '<prefix>Bu oturum için <statistics-type> istatistikleri gösteriliyor:'
|
||||
# Message that is shown when a player tries viewing an unknown statistic
|
||||
unknown-type: '<prefix><red>Bilinmeyen istatistik türü! Mevcut istatistikler: <gray><statistics>'
|
||||
# Genel istatistik mesajının biçimi
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# 需要帮助吗? https://jonesdev.xyz/discord
|
||||
# 需要帮助吗? https://sonar.top/discord
|
||||
# 源代码: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, 以 GPL-3.0 许可
|
||||
#
|
||||
@@ -16,7 +16,7 @@
|
||||
# <prefix> 占位符
|
||||
prefix: <b><yellow>Sonar</b> <gray>» <white>
|
||||
# <support-url> 占位符
|
||||
support-url: https://jonesdev.xyz/discord/
|
||||
support-url: https://sonar.top/discord/
|
||||
# <header> 占位符. (支持多行)
|
||||
header:
|
||||
- <b><yellow>Sonar</b><reset>
|
||||
@@ -53,7 +53,7 @@ commands:
|
||||
- <gray><click:open_url:'https://github.com/jonesdevelopment/sonar'>(C) <copyright-year> Jones Development and Sonar Contributors</click>
|
||||
- ''
|
||||
- <gray>有问题或需要帮助?
|
||||
- <white><click:open_url:'https://jonesdev.xyz/discord/'><hover:show_text:'(Click to open Discord)'>在我们的Discord上打开一张ticket </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Click to open GitHub)'>或在Github打开新的问题.
|
||||
- <white><click:open_url:'https://sonar.top/discord/'><hover:show_text:'(Click to open Discord)'>在我们的Discord上打开一张ticket </hover></click><click:open_url:'https://github.com/jonesdevelopment/sonar/issues'><hover:show_text:'(Click to open GitHub)'>或在Github打开新的问题.
|
||||
- ''
|
||||
# 执行根命令时 对于子命令的描述.
|
||||
subcommands: '<suggest-subcommand><hover:show_text:''<gray>只有玩家可以执行该命令: </gray><only-players><br><gray>只有控制台可以执行该命令: </gray><only-console><br><gray>需要的权限: </gray><white><permission><br><gray>别名: </gray><aliases>''><dark_aqua> ▪ <gray>/sonar <subcommand> <white><description></hover></suggest-subcommand>'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potřebujete pomoc nebo máte otázky? https://jonesdev.xyz/discord
|
||||
# Potřebujete pomoc nebo máte otázky? https://sonar.top/discord
|
||||
# Zdrojový kód: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licencováno pod GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Brauchst du Hilfe? https://jonesdev.xyz/discord
|
||||
# Brauchst du Hilfe? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, lizenziert unter GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Need help or have questions? https://jonesdev.xyz/discord
|
||||
# Need help or have questions? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# ¿Necesita ayuda o tiene alguna pregunta? https://jonesdev.xyz/discord
|
||||
# ¿Necesita ayuda o tiene alguna pregunta? https://sonar.top/discord
|
||||
# Código fuente: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, bajo licencia GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Besoin d'aide ou d'autres questions ? https://jonesdev.xyz/discord
|
||||
# Besoin d'aide ou d'autres questions ? https://sonar.top/discord
|
||||
# Code source : https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licence sous GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Butuh bantuan atau punya pertanyaan? https://jonesdev.xyz/discord
|
||||
# Butuh bantuan atau punya pertanyaan? https://sonar.top/discord
|
||||
# Kode sumber: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, dilisensikan di bawah GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# დახმარება გჭირდება ან კითხვა გაქვს? https://jonesdev.xyz/discord
|
||||
# დახმარება გჭირდება ან კითხვა გაქვს? https://sonar.top/discord
|
||||
# საწყისი კოდი: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, licensed under GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Hulp nodig of vragen? https://jonesdev.xyz/discord
|
||||
# Hulp nodig of vragen? https://sonar.top/discord
|
||||
# Broncode: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, gelicentieerd onder GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Potrzebujesz pomocy lub masz pytania? https://jonesdev.xyz/discord
|
||||
# Potrzebujesz pomocy lub masz pytania? https://sonar.top/discord
|
||||
# Source code: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, na licencji GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Precisa de ajuda ou tem dúvidas? https://jonesdev.xyz/discord
|
||||
# Precisa de ajuda ou tem dúvidas? https://sonar.top/discord
|
||||
# Código-fonte: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development e Sonar Contributors, licenciado sob GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# Нужна помощь или есть вопросы? https://jonesdev.xyz/discord
|
||||
# Нужна помощь или есть вопросы? https://sonar.top/discord
|
||||
# Исходный код: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, под лицензией GPL-3.0
|
||||
#
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$| $$$$$$$| $$
|
||||
# \______/ \______/ |__/ |__/ \_______/|__/
|
||||
#
|
||||
# 需要帮助吗? https://jonesdev.xyz/discord
|
||||
# 需要帮助吗? https://sonar.top/discord
|
||||
# 源代码: https://github.com/jonesdevelopment/sonar
|
||||
# Copyright Jones Development and Sonar Contributors, 以 GPL-3.0 许可
|
||||
#
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
group=xyz.jonesdev
|
||||
version=2.1.44
|
||||
version=2.1.47
|
||||
description=A lightweight, effective, and easy-to-use anti-bot plugin for Velocity, BungeeCord, and Bukkit.
|
||||
@@ -1,15 +1,15 @@
|
||||
[versions]
|
||||
netty = "4.2.7.Final"
|
||||
netty = "4.2.15.Final"
|
||||
adventure = "4.24.0"
|
||||
adventure-platform = "4.4.1"
|
||||
bstats = "3.1.0"
|
||||
bstats = "3.2.1"
|
||||
libby = "2.0.0-SNAPSHOT"
|
||||
pluginyml = "0.6.0"
|
||||
|
||||
[plugins]
|
||||
indra-git = "net.kyori.indra.git:3.2.0"
|
||||
shadow = "com.gradleup.shadow:8.3.8"
|
||||
spotless = "com.diffplug.spotless:7.2.1"
|
||||
shadow = "com.gradleup.shadow:9.4.1"
|
||||
spotless = "com.diffplug.spotless:8.6.0"
|
||||
pluginyml-bungee = { id = "net.minecrell.plugin-yml.bungee", version.ref = "pluginyml" }
|
||||
pluginyml-bukkit = { id = "net.minecrell.plugin-yml.bukkit", version.ref = "pluginyml" }
|
||||
pluginyml-paper = { id = "net.minecrell.plugin-yml.paper", version.ref = "pluginyml" }
|
||||
@@ -30,13 +30,13 @@ bstats-bungee = { module = "org.bstats:bstats-bungeecord", version.ref = "bstats
|
||||
bstats-bukkit = { module = "org.bstats:bstats-bukkit", version.ref = "bstats" }
|
||||
bstats-velocity = { module = "org.bstats:bstats-velocity", version.ref = "bstats" }
|
||||
imagefilters = "com.jhlabs:filters:2.0.235-1"
|
||||
caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.2"
|
||||
annotations = "org.jetbrains:annotations:26.0.2"
|
||||
caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.4"
|
||||
annotations = "org.jetbrains:annotations:26.1.0"
|
||||
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.42"
|
||||
bungeecord = "net.md-5:bungeecord-proxy:1.21-SNAPSHOT"
|
||||
velocity = "io.papermc.velocity:velocity-proxy:3.4.0-SNAPSHOT"
|
||||
lombok = "org.projectlombok:lombok:1.18.46"
|
||||
bungeecord = "net.md-5:bungeecord-proxy:26.1-R0.1-SNAPSHOT"
|
||||
velocity = "io.papermc.velocity:velocity-proxy:3.5.0-SNAPSHOT"
|
||||
paper = "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT"
|
||||
# We have to use 1.16.5 for backwards compatibility
|
||||
spigot = "org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT"
|
||||
Vendored
BIN
Binary file not shown.
+3
-1
@@ -1,7 +1,9 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
|
||||
networkTimeout=10000
|
||||
retries=0
|
||||
retryBackOffMs=500
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
# Copyright © 2015 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -57,7 +57,7 @@
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
@@ -114,7 +114,6 @@ case "$( uname )" in #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH="\\\"\\\""
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
@@ -172,7 +171,6 @@ fi
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||
"$@"
|
||||
|
||||
|
||||
Vendored
+82
-94
@@ -1,94 +1,82 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables, and ensure extensions are enabled
|
||||
setlocal EnableExtensions
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
"%COMSPEC%" /c exit 1
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
"%COMSPEC%" /c exit 1
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
|
||||
@rem which allows us to clear the local environment before executing the java command
|
||||
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
|
||||
|
||||
:exitWithErrorLevel
|
||||
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
|
||||
"%COMSPEC%" /c exit %ERRORLEVEL%
|
||||
@@ -8,7 +8,7 @@ paper {
|
||||
name = rootProject.name
|
||||
main = "xyz.jonesdev.sonar.paper.SonarPaperPlugin"
|
||||
authors = listOf("Jones Development", "Sonar Contributors")
|
||||
website = "https://jonesdev.xyz/discord/"
|
||||
website = "https://sonar.top/discord/"
|
||||
load = BukkitPluginDescription.PluginLoadOrder.POSTWORLD
|
||||
apiVersion = "1.21" // ignore legacy plugin warning
|
||||
foliaSupported = true
|
||||
|
||||
@@ -13,7 +13,7 @@ tasks {
|
||||
val props = mapOf(
|
||||
"version" to rootProject.version.toString(),
|
||||
"description" to rootProject.description,
|
||||
"url" to "https://jonesdev.xyz/discord/",
|
||||
"url" to "https://sonar.top/discord/",
|
||||
"main" to "xyz.jonesdev.sonar.velocity.SonarVelocityPlugin"
|
||||
)
|
||||
inputs.properties(props)
|
||||
|
||||
Reference in new issue
Block a user