Blog / Z Craftcube
● Z CRAFTCUBE

System łapiący oszustów na moim serwerze.
40 linijek kodu z pomocą Claude.

Na CraftCube oszuści to codzienność. Co tydzień nowy sposób na naciąganie. Piszę ten wpis, żeby pokazać Wam z bliska, jak realnie używam Claude w pracy nad serwerem z 4000 graczy. To nie jest teoria z kursu - to jest mój zwykły piątek, 23:00, rozwalony problem, działające rozwiązanie.

Na początek chcę napisać coś, co rzadko czyta się w internecie o „kursach dla dzieci". Piszę ten wpis z innego powodu niż zwykle sprzedażowego. Chcę Wam pokazać, jak konkretnie wygląda moja praca - nie jako nauczyciela, tylko jako zwykłego programisty, który codziennie używa Claude.

Bo jeśli jesteś rodzicem, który zastanawia się nad kupnem mojego kursu, masz prawo wiedzieć: czy ten gość rzeczywiście robi to, czego uczy? Czy sam używa AI do prawdziwej pracy? Czy ma pojęcie, o czym mówi - czy to jest kolejna ściema, gdzie nauczyciel sam nie praktykuje?

Odpowiedź jest prosta. Tak. Codziennie. A ten wpis pokazuje jeden z moich ostatnich wieczorów, na żywo.

Tło sprawy.

CraftCube to jeden z 3 największych serwerów Minecraft w Polsce. Codziennie między 2 a 4 tysiące graczy. A gdzie są gracze, tam są oszuści - czyli ludzie, którzy używają nielegalnych dodatków do gry, żeby mieć przewagę. Widzą innych graczy przez ściany, strzelają automatycznie, latają tam, gdzie nie powinni.

W zeszłym miesiącu zauważyłem na statystykach coś dziwnego. Na trybie PvP (walka gracz kontra gracz) pojawiła się grupa 4 graczy, którzy wygrywali każdy pojedynek. Dosłownie każdy. Gracze zaczęli pisać w czacie - „oni oszukują", „nie da się ich trafić", „to jakiś autoaim".

Sprawdziłem nagrania. Mieli rację. Używali oprogramowania, które automatycznie celuje w przeciwnika - tak zwany autoaim. Gracz trzyma myszkę w ręku, ale mysz sama „przykleja się" do głowy przeciwnika. Wygląda naturalnie, ale nie da się tego wygrać uczciwą walką.

Stare metody nie działały.

Na rynku są gotowe programy anty-oszustwo. Korzystałem z jednego przez 2 lata. Ma swoje zalety - łapie popularne oszustwa, działa automatycznie. Ale ten konkretny typ autoaim-u, z którym miałem do czynienia, jest nowy. Nie był na liście rozpoznawalnych.

Miałem 3 opcje:

  • Czekać, aż twórcy programu anty-oszustwo dodadzą ochronę przed tym. Wiadomo kiedy - nie wiadomo kiedy.
  • Zapłacić za inny program. Kosztowny. Nie miałem pewności, czy pomoże.
  • Napisać własny kawałek kodu. Wybrałem to.

Wcześniej trzecia opcja oznaczała dla mnie kilka godzin czytania forów, szukania jak inni to robili, kombinowania z różnymi pomysłami. Z Claude zrobiłem to w niecałą godzinę.

Zaczynam pracę. Piątek, 22:40.

Otwieram Claude. Piszę do niego dokładnie tak, jak napisałbym do kolegi programisty, gdybym miał takiego do rozmowy o 23:00.

ROZMOWA Z CLAUDE piątek, 22:42
JA
Hej Claude. Prowadzę serwer Minecraft w Javie (Paper API). Mam problem z autoaim hackiem. Gracz automatycznie celuje w głowę przeciwnika - myszka sama "przyczepia się" do celu. Chcę to wykryć w kodzie. Masz pomysł, jakie znaki mogą to zdradzać?
CLAUDE
Autoaim zdradza się na kilka sposobów. Najmocniejszy znak: nienaturalna płynność zmian kierunku widoku. Gdy prawdziwy człowiek celuje, jego ruch ma drobne "drgania" - mięśnie nigdy nie są idealnie spokojne. Program komputerowy celuje zbyt gładko.

Drugi znak: natychmiastowe "złapanie" celu. Człowiek potrzebuje od 200 do 400 milisekund, żeby zorientować się, gdzie jest przeciwnik, i przestawić celownik. Program robi to w 20-50 ms.

Trzeci: zbyt wysoka celność w trudnych warunkach. Jeśli gracz ma powyżej 90% trafień w przeciwnika, który szybko się porusza - to jest podejrzane.

Które z tych znaków chcesz sprawdzać? Mogę napisać kod na każde.
PO LUDZKU

Co się tu wydarzyło?

Zapytałem Claude o rzeczy, których sam nie znałem. Nie jestem ekspertem od wykrywania oszustów - jestem programistą serwera. Ale Claude ma w sobie wiedzę zebraną z tysięcy podobnych problemów z całego świata. W 30 sekund dał mi 3 konkretne pomysły, na które sam bym wpadał kilka godzin.

To nie jest leniwe. To jest praca z partnerem, który zna rzeczy, których ja nie znam.

Wybieram drugi pomysł. I tu Claude się pomylił.

Najbardziej spodobał mi się pomysł z „za szybkim złapaniem celu". Jest mierzalny, łatwy do sprawdzenia, trudny do obejścia. Proszę Claude o kod.

Claude daje mi rozwiązanie. Wygląda sensownie. Ale kiedy czytam linijka po linijce, widzę problem.

ROZMOWA Z CLAUDE (CD.) piątek, 23:08
JA
Moment. Twój kod mierzy czas między zobaczeniem przeciwnika a pierwszym trafieniem - i dziś to ma sens. Ale jeśli gracz przez 2 sekundy biegnie w innym kierunku, a potem obróci się i strzeli, to zmierzysz 2 sekundy, a nie faktyczny czas reakcji. Będzie wychodziło, że każdy gracz ma wolne reakcje. Źle się liczy.
CLAUDE
Masz rację. Popełniłem błąd. Powinniśmy mierzyć czas od momentu, kiedy przeciwnik pojawia się w polu widzenia gracza, a nie od momentu zobaczenia go w ogóle. To duża różnica. Pozwól, że poprawię kod.

Claude nie zawsze ma rację. Ale w odróżnieniu od wielu ludzi, natychmiast przyznaje się do błędu, gdy mu go pokażesz. To jest najlepszy partner do pracy, jakiego sobie można wyobrazić.

Finalny kod. 23:31, piątek.

Po kilku iteracjach mam działający kawałek kodu. Pokażę Wam go tutaj, ale nie spodziewajcie się, że wszystko zrozumiecie - bo to jest prawdziwy kod produkcyjny, nie tutorial dla dzieci. Chcę, żebyście zobaczyli, że jest go mało.

AimSnapDetector.java
public class AimSnapDetector implements Listener { // pamietamy, kiedy kazdy gracz widzi danego przeciwnika private final Map<UUID, Long> firstSightTimes = new HashMap<>(); @EventHandler public void onPlayerMove(PlayerMoveEvent e) { Player p = e.getPlayer(); // sprawdzamy, czy gracz widzi teraz jakiegos przeciwnika Player target = findEnemyInView(p); if (target != null && !firstSightTimes.containsKey(p.getUniqueId())) { firstSightTimes.put(p.getUniqueId(), System.currentTimeMillis()); } } @EventHandler public void onAttack(EntityDamageByEntityEvent e) { if (!(e.getDamager() instanceof Player attacker)) return; Long sightTime = firstSightTimes.get(attacker.getUniqueId()); if (sightTime == null) return; long reactionTime = System.currentTimeMillis() - sightTime; // czlowiek nie reaguje szybciej niz 150 ms if (reactionTime < 150) { flagSuspicious(attacker, reactionTime); } firstSightTimes.remove(attacker.getUniqueId()); } }
PO LUDZKU

Co ten kod robi?

1. Gdy gracz po raz pierwszy widzi przeciwnika, zapisujemy sobie w notatniku: „Jan Kowalski zobaczył Adama o 22:47:12.338".

2. Gdy Jan Kowalski uderza Adama, sprawdzamy: ile czasu minęło od tego pierwszego momentu? Jeśli mniej niż 150 milisekund (0.15 sekundy) - to jest nienaturalne. Nikt nie reaguje tak szybko. Mózg potrzebuje więcej czasu.

3. Oznaczamy go do sprawdzenia. Potem człowiek - nie komputer - ogląda nagranie i decyduje, czy to faktycznie oszustwo.

Cała logika tego kodu mieści się w tych 3 zdaniach. Reszta - te wszystkie nawiasy, znaki, słówka - to sposób, w jaki trzeba to zapisać, żeby komputer zrozumiał.

Efekt.

Kod wrzuciłem na serwer w nocy z piątku na sobotę. Do końca weekendu system oznaczył 7 kont jako podejrzane. Po ręcznej weryfikacji nagrań:

5
konta z autoaim
(potwierdzone)
2
fałszywe alarmy
(bardzo dobrzy gracze)
~55 min
łączny czas pracy
z Claude

5 kont dostało blokadę. Fałszywe alarmy skłoniły mnie do podkręcenia granicy ze 150 ms do 130 ms - dwa najlepsze naturalne reakcje świata mieszczą się między 120 a 150 ms, więc musiałem zostawić margines. Ale 130 ms to już biologiczna granica człowieka. Poniżej tego to jest automat.

System działa dziś. Pilnuje serwera 24 godziny na dobę. W ciągu pierwszego miesiąca złapał 23 próby oszustwa.

Dlaczego pokazuję Wam ten wpis.

Bo jeśli jesteś rodzicem zastanawiającym się nad moim kursem, masz prawo zobaczyć, że sam używam Claude tak, jak chcę nauczyć Twoje dziecko.

Nie wmawiam Wam, że „AI jest przyszłością" - bo ja nie mówię o przyszłości. Mówię o moim zeszłym piątku wieczorem. O konkretnym problemie, konkretnym kodzie, konkretnym serwerze, na którym gra w tej chwili ktoś, kto mógł być oszukiwany, a teraz już nie jest.

To jest praca, którą robię. A nauka z mojego kursu to nic innego jak dokładnie ta sama rozmowa z Claude, tylko na łatwiejszych problemach, w skali, w której dziecko rozumie, co się dzieje.

ZASADY, KTÓRE ZASTOSOWAŁEM

Jeśli czytałeś/-aś mój wpis o 3 zasadach używania Claude z dzieckiem, zauważyłeś/-aś pewnie, że w tej historii stosowałem wszystkie 3: najpierw sam pomyślałem (przeanalizowałem problem i wybrałem podejście), nie poszedłem dalej, aż rozumiałem kod (czytałem linijka po linijce), złapałem Claude na błędzie (gdy jego kod miał złą logikę z czasem reakcji).

To nie jest przypadek. To jest dokładnie ten sam sposób pracy, którego uczę dzieciaki.

Dzięki za przeczytanie. Do następnego.

···

PS. Tak, wiem że ten wpis był bardziej techniczny niż moje inne. Piszę go raz na jakiś czas dla rodziców, którzy chcą mi zajrzeć przez ramię. Jeśli wolisz wpisy dla rodzica bez kodu - mam ich kilka i polecam je niżej.

DOKŁADNIE TA SAMA METODA

Chcesz, żeby Twoje dziecko pracowało tak jak ja?

Pobierz darmowy Level 0 - 46-stronicowy PDF, w którym prowadzę dziecko przez pierwszy działający plugin. Dokładnie taka sama rozmowa z Claude, jak w tym wpisie - tylko na prostszym problemie, który 10-latek może zrobić samodzielnie.

Pobierz darmowy Level 0 →
✓ PDF od razu na maila · ✓ Zero zobowiązań · ✓ Dożywotni dostęp
// czytaj dalej

Więcej notatek z serwera.

👨‍👦
Z CRAFTCUBE

Mój brat próbował nauczyć się programowania z polskich kursów

Patrzyłem, jak tydzień po tygodniu przeciąga klocki w Scratchu. Dlatego zrobiłem własny kurs.

10 min czytania
🎯
AI + DZIECI

Moje 3 zasady używania Claude z 10-latkiem

Po 6 miesiącach uczenia dzieciaków mam 3 proste reguły, których nigdy nie łamię.

7 min czytania
🍎
ZRÓB Z DZIECKIEM

5 minut z dzieckiem: jabłko, które leczy

Tutorial krok po kroku. Usiądź z dzieckiem, załóżcie konto na Claude i zróbcie razem pierwszy plugin.

7 min czytania