Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
0eeffd9
feat: start working on replays
ArikSquad Jan 31, 2026
afad414
feat: clean ups
ArikSquad Feb 1, 2026
f473872
feat: lean more on events
ArikSquad Feb 1, 2026
b094592
refactor: proper times on Phases
ArikSquad Feb 1, 2026
45e1ce2
feat: disable respawn screen
ArikSquad Feb 1, 2026
d5ff9c1
feat: GameStartEvent
ArikSquad Feb 1, 2026
4a5cd80
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 1, 2026
b54ec25
feat: cleaning up
ArikSquad Feb 2, 2026
e6234d4
feat: make replays basically viewable
ArikSquad Feb 2, 2026
502599b
feat: add some extra things
ArikSquad Feb 3, 2026
255d75a
refactor: clean up
ArikSquad Feb 3, 2026
9b22afb
feat: recordables and views
ArikSquad Feb 4, 2026
12dc33d
fix: remove useless RecordablePlayerBlockChange
ArikSquad Feb 4, 2026
7672cba
feat: cleaning and roadmap comments
ArikSquad Feb 4, 2026
fe0ccab
fix: removed method usage
ArikSquad Feb 4, 2026
7a1678d
refactor: type.game module
ArikSquad Feb 5, 2026
f6e7e36
fix(orchestrator): correct import for GameObject
ArikSquad Feb 5, 2026
9bb2435
fix(replay): use game module
ArikSquad Feb 5, 2026
60e21f0
refactor: use StringUtility#getAsRomanNumeral
ArikSquad Feb 5, 2026
0c2e54d
feat: correct scoreboard
ArikSquad Feb 7, 2026
0b2a5f8
feat: replay inventory & generator block
ArikSquad Feb 7, 2026
cfe7c24
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 8, 2026
993f925
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 8, 2026
b5d984b
feat: replay sound & particles
ArikSquad Feb 8, 2026
4791e1d
fix: proper replay items
ArikSquad Feb 8, 2026
e51e286
refactor: move leave to event listener
ArikSquad Feb 8, 2026
0d6b420
feat: move to events
ArikSquad Feb 8, 2026
2b10648
refactor: clean-ups
ArikSquad Feb 8, 2026
f95c331
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 9, 2026
15458de
feat: replays gui accuracy
ArikSquad Feb 9, 2026
ff8bdcf
refactor: move to listener
ArikSquad Feb 9, 2026
642417f
refactor: move to listener
ArikSquad Feb 9, 2026
cef3f0b
fix(bw): game behavior
ArikSquad Feb 9, 2026
72dacc1
fix(bw): waiting scoreboard
ArikSquad Feb 9, 2026
15833a1
feat: version const
ArikSquad Feb 9, 2026
43fd745
refactor: accurate messages
ArikSquad Feb 9, 2026
ddce877
feat: translator
ArikSquad Feb 9, 2026
d2c633b
feat(bw): proper death messages
ArikSquad Feb 9, 2026
cbdafa1
feat(bw): actually proper death messages
ArikSquad Feb 9, 2026
2cb9d45
feat(bw): actually proper death messages
ArikSquad Feb 9, 2026
a37e1db
revert: translations
ArikSquad Feb 10, 2026
85b6e24
feat: more functionality
ArikSquad Feb 10, 2026
242dca8
feat: even more functionality
ArikSquad Feb 10, 2026
b8ce5b3
feat: end game messages
ArikSquad Feb 10, 2026
aed6fe8
feat: user obfuscation, tab list and belowNameTag
ArikSquad Feb 10, 2026
3305da4
feat: start using invisibility and adventure instead of spectator
ArikSquad Feb 10, 2026
5364143
feat: correct death and respawn
ArikSquad Feb 11, 2026
5f833c6
feat: use RespawnHandler
ArikSquad Feb 11, 2026
ffd900b
fix: game ending
ArikSquad Feb 11, 2026
e307104
feat: countdown stop message
ArikSquad Feb 11, 2026
a9702ca
feat: add feature missing notifications
ArikSquad Feb 11, 2026
79731b4
feat: finalise some systems
ArikSquad Feb 12, 2026
bcd9091
feat: hotbar manager
ArikSquad Feb 13, 2026
b49765f
feat: better looking deposit messages
ArikSquad Feb 13, 2026
9c4cd2c
fix: death velocity, deposit message, allow other modes than SOLO
ArikSquad Feb 13, 2026
ed31022
feat: move NPCS to correct positions
ArikSquad Feb 14, 2026
0cb6442
feat: remove passthrough as-is
ArikSquad Feb 14, 2026
f457b7c
feat: TeamEliminatedEvent proper usage
ArikSquad Feb 14, 2026
9bb086f
feat: hide scoreboard NumberFormat
ArikSquad Feb 17, 2026
28d98a5
fix: comment limboServer
ArikSquad Feb 17, 2026
253529c
feat: support 2+ teams properly
ArikSquad Feb 17, 2026
543035b
fix(view): check if ViewSession is null
ArikSquad Feb 17, 2026
5a9f8ba
refactor: clean up generator config
ArikSquad Feb 17, 2026
7caf133
feat: HypixelPosition and Rays
ArikSquad Feb 17, 2026
26d4515
Merge branch 'master' into feat/replay
ArikSquad Feb 18, 2026
f669419
fix: remove merge artifacts
ArikSquad Feb 18, 2026
3ea476a
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 24, 2026
10354d6
feat: message after game
ArikSquad Feb 24, 2026
491a8ca
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 26, 2026
63c6a6c
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Feb 27, 2026
0f89ce1
fix: somehow "'t" had been replaced with "'distance"
ArikSquad Feb 27, 2026
bb04fe2
feat: add translations
ArikSquad Feb 27, 2026
785b5c2
feat: continue this
ArikSquad Mar 2, 2026
7f346e7
feat: add more i18n messages
ArikSquad Mar 2, 2026
90f8fc1
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Mar 23, 2026
cb73fea
fix: failed merge with missing imports
ArikSquad Apr 6, 2026
075c8f6
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Apr 16, 2026
be05f7d
fix: let us build once again
ArikSquad Apr 17, 2026
4d7864b
feat: continue replay system
ArikSquad Apr 17, 2026
0b891e3
fix: remove this horrible implementation of anti-air-jump
ArikSquad Apr 17, 2026
4ae3408
feat: replay following, views
ArikSquad Apr 17, 2026
8d65c9b
fix: don't log for no reason
ArikSquad Apr 17, 2026
50bf386
feat: initial teleport and glow
ArikSquad Apr 17, 2026
9303251
feat: seeking state
ArikSquad Apr 17, 2026
6514357
feat: port GUIMapSelection to views
ArikSquad Apr 17, 2026
f1feb67
feat: compass
ArikSquad Apr 17, 2026
53f24c8
fix: accidental old search and replace
ArikSquad Apr 17, 2026
11f2911
feat: better matchmaking
ArikSquad Apr 18, 2026
402835e
feat: lobby and view v2 migrations
ArikSquad Apr 18, 2026
7165401
feat: GUIGameMenu more items
ArikSquad Apr 18, 2026
ade49a4
feat: continue
ArikSquad Apr 18, 2026
3ac4646
feat: lock in party behavior
ArikSquad Apr 18, 2026
06b7219
feat: sloppy collectibles
ArikSquad Apr 19, 2026
762ad04
Merge remote-tracking branch 'origin/master' into feat/replay
ArikSquad Apr 19, 2026
b090695
feat: update to match main
ArikSquad Apr 19, 2026
908371f
feat: improve scoreboards, continue cosmetics
ArikSquad Apr 19, 2026
6831ce1
feat: improve NPC holograms a lot
ArikSquad Apr 19, 2026
6f3f181
fix: bedwars scoreboard format
ArikSquad Apr 19, 2026
d357cce
feat: make things properly purchasable
ArikSquad Apr 19, 2026
9edc0a4
fix: don't set CUSTOM_NAME
ArikSquad Apr 19, 2026
bb2a943
feat: add alias for lobby command
ArikSquad Apr 19, 2026
027273f
feat: originServer as self on initial connection
ArikSquad Apr 19, 2026
a7c2ebd
fix: lobby items timing
ArikSquad Apr 19, 2026
ff98dde
feat: generic FloatingBlockEntity for future uses
ArikSquad Apr 20, 2026
e900931
refactor: useless stuff
ArikSquad Apr 21, 2026
6fd3679
feat: afk
ArikSquad May 2, 2026
6f010f1
merge
ArikSquad May 15, 2026
97e247c
Merge pull request #3 from ArikSquad/feat/replay-merged
ArikSquad May 15, 2026
60730d1
feat: trackers
ArikSquad May 15, 2026
9aa6c88
refactor: clean up bed material calculations
ArikSquad Jun 2, 2026
6336002
build: bump gradle to 9.5.1
ArikSquad Jun 2, 2026
910e8c2
feat: 26.1.2
ArikSquad Jun 2, 2026
53db730
feat: upgrade to non-ViaLoader ViaVersion experience
ArikSquad Jun 2, 2026
3f27d6c
refactor: remove ViaLoader folder from .gitignore
ArikSquad Jun 2, 2026
85064c9
refactor: use JacksonSerializer where currently possible
ArikSquad Jun 2, 2026
31f90d8
feat: compress replays
ArikSquad Jun 2, 2026
932b880
feat: replay uploader execute thread
ArikSquad Jun 2, 2026
88fef8a
feat: partial lucky block bed wars
ArikSquad Jun 2, 2026
3cb78a2
feat: working bedwars games
ArikSquad Jun 2, 2026
b214d3c
feat: closer to proper implementations of generators
ArikSquad Jun 3, 2026
617277d
feat: Vec3i#asBlockVec
ArikSquad Jun 3, 2026
92bda65
feat: typed traps and team upgrades
ArikSquad Jun 3, 2026
b4f65ca
fix(configurator): map config schema changes
ArikSquad Jun 3, 2026
6a920ad
refactor: remove getBedMaterial
ArikSquad Jun 3, 2026
388831a
feat: vanilla slots crafting
ArikSquad Jun 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ build/
/configuration/hypixel_bedwars_lobby/
/configuration/hypixel_murder_mystery_lobby/
/configuration/hypixel_skywars_lobby/
/configuration/skyblock/garden/
*.polar

### Logs ###
Expand All @@ -52,7 +53,6 @@ build/
.gradle/
/server/proxy/logs/
/server/proxy/lang/
/server/proxy/ViaLoader/
/server/proxy/plugins/
/server/proxy/forwarding.secret
/server/proxy/velocity.toml
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[<img src="https://discordapp.com/assets/e4923594e694a21542a489471ecffa50.svg" alt="Discord" height="55" />](https://discord.swofty.net)

A 1.21.11 Minestom-based recreation of Hypixel SkyBlock with a properly abstracted, scalable microservices architecture.
A 26.1.2 Minestom-based recreation of Hypixel SkyBlock with a properly abstracted, scalable microservices architecture.

> **Note**: This implementation is under active development and is not yet production-ready.
Expand Down
26 changes: 4 additions & 22 deletions anticheat/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

[<img src="https://discordapp.com/assets/e4923594e694a21542a489471ecffa50.svg" alt="" height="55" />](https://discord.gg/atlasmc)

An advanced prediction-based anticheat for both Minestom and Spigot/Bukkit servers. Features comprehensive packet tracking, movement prediction with physics simulation, and lag compensation.
An advanced prediction-based anticheat for Minestom servers. Features comprehensive packet tracking, movement prediction
with physics simulation, and lag compensation.

## Table of contents

* [Features](#features)
* [Getting Started](#getting-started)
* [Minestom Loader](#minestom-loader)
* [Spigot Loader](#spigot-loader)
* [API Usage](#api-usage)
* [Custom Modifiers](#custom-modifiers)
* [Player Data Storage](#player-data-storage)
Expand Down Expand Up @@ -47,12 +47,12 @@ An advanced prediction-based anticheat for both Minestom and Spigot/Bukkit serve

### Cross-Platform Support
- Full Minestom support with native packet API
- Full Spigot/Bukkit support via ProtocolLib
- Unified packet abstraction layer
- Platform-specific scheduler managers

## Getting Started
SwoftyAnticheat requires Java 17+ and either Minestom or Spigot/Bukkit with ProtocolLib.

SwoftyAnticheat requires Java 25+ and Minestom.

## Minestom Loader
To use SwoftyAnticheat with Minestom, create a new instance of the MinestomLoader and initialize the anticheat:
Expand All @@ -67,24 +67,6 @@ SwoftyAnticheat.start(); // Do this after MinecraftServer#init()

The MinestomLoader automatically registers all packet listeners using Minestom's native packet API.

## Spigot Loader
To use SwoftyAnticheat with Spigot/Bukkit, you need ProtocolLib installed. Then create a SpigotLoader instance:

```java
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
SpigotLoader spigotLoader = new SpigotLoader(this);

SwoftyAnticheat.loader(spigotLoader);
SwoftyAnticheat.values(new SwoftyValues());
SwoftyAnticheat.start();
}
}
```

The SpigotLoader uses ProtocolLib to intercept and process all relevant packets.

## API Usage

SwoftyAnticheat provides a comprehensive API for extending the anticheat with custom functionality.
Expand Down
2 changes: 0 additions & 2 deletions anticheat/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ dependencies {
implementation(libs.tinylog.api)
implementation(libs.tinylog.impl)

compileOnly(libs.spigot.api)

compileOnly(libs.protocollib)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,21 @@
package net.swofty.anticheat.event.packet;

import lombok.Getter;
import net.minestom.server.entity.PlayerHand;
import net.swofty.anticheat.math.Pos;

import java.util.UUID;

@Getter
public class UseEntityPacket extends SwoftyPacket {
private final int entityId;
private final Type type;
private final Pos targetPosition;
private final Hand hand;
private final boolean sneaking;
private final PlayerHand hand;

public UseEntityPacket(UUID uuid, int entityId, Type type, Pos targetPosition, Hand hand, boolean sneaking) {
public UseEntityPacket(UUID uuid, int entityId, Pos targetPosition, PlayerHand hand) {
super(uuid);
this.entityId = entityId;
this.type = type;
this.targetPosition = targetPosition;
this.hand = hand;
this.sneaking = sneaking;
}

public enum Type {
INTERACT,
ATTACK,
INTERACT_AT
}

public enum Hand {
MAIN_HAND, OFF_HAND
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.minestom.server.network.packet.client.common.ClientPongPacket;
import net.swofty.anticheat.engine.SwoftyPlayer;
import net.swofty.anticheat.event.packet.PingResponsePacket;
import net.swofty.anticheat.event.packet.RequestPingPacket;
import net.swofty.anticheat.event.packet.SwoftyPacket;
import net.swofty.anticheat.loader.LoaderPacketHandler;
Expand All @@ -13,7 +14,7 @@ public class MinestomHandlerPingResponsePacket

@Override
public SwoftyPacket buildSwoftyPacket(UUID uuid, ClientPongPacket packet) {
return new net.swofty.anticheat.event.packet.PingResponsePacket(
return new PingResponsePacket(
SwoftyPlayer.players.get(uuid),
packet.id()
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.swofty.anticheat.loader.minestom.packets;

import net.minestom.server.entity.PlayerHand;
import net.minestom.server.network.packet.client.play.ClientInteractEntityPacket;
import net.swofty.anticheat.event.packet.SwoftyPacket;
import net.swofty.anticheat.event.packet.UseEntityPacket;
Expand All @@ -14,43 +13,11 @@ public class MinestomHandlerUseEntityPacket

@Override
public SwoftyPacket buildSwoftyPacket(UUID uuid, ClientInteractEntityPacket packet) {
ClientInteractEntityPacket.Type type = packet.type();

UseEntityPacket.Type swoftyType;
UseEntityPacket.Hand hand = null;
Pos targetPos = null;

switch (type) {
case ClientInteractEntityPacket.Interact(PlayerHand playerHand) -> {
swoftyType = UseEntityPacket.Type.INTERACT;
hand = playerHand == PlayerHand.MAIN
? UseEntityPacket.Hand.MAIN_HAND
: UseEntityPacket.Hand.OFF_HAND;
}
case ClientInteractEntityPacket.Attack attack -> swoftyType = UseEntityPacket.Type.ATTACK;
case ClientInteractEntityPacket.InteractAt interactAt -> {
swoftyType = UseEntityPacket.Type.INTERACT_AT;

targetPos = new Pos(
interactAt.targetX(),
interactAt.targetY(),
interactAt.targetZ()
);

hand = interactAt.hand() == PlayerHand.MAIN
? UseEntityPacket.Hand.MAIN_HAND
: UseEntityPacket.Hand.OFF_HAND;
}
default -> throw new IllegalStateException("Unknown interact type: " + type.getClass());
}

return new UseEntityPacket(
uuid,
packet.targetId(),
swoftyType,
targetPos,
hand,
packet.sneaking()
Pos.fromVec(packet.location()),
packet.hand()
);
}

Expand Down

This file was deleted.

Loading
Loading