Po pierwsze - nie przypisujesz żadnej wartości domyślnej do zmiennej. Warto to dodać w evencie np. on join, sprawdzanie czy zmienna jest ustawiona i jeśli nie to ustawianie jej na 0.
W tym evencie może nie być player'a, spróbuj z event-entity ewentualnie event-player. Jeśli nie zadziała to możesz sięgnąć po skript-reflect, skorzystać z eventu org.bukkit.event.block.BellRingEvent i pobrać event.getEntity()
Może po prostu on Bell ring zamienisz na on right click ?
A i btw na scoreboarda polecam plugin TAB , po nazwie daje też dostęp do modyfikacji taba.
Wspiera fajnie placeholders, więc na spokojnie wszystko ci będzie działać a nawet lepiej. Przy większej ilości graczy, wyświetlanie takiego scoreboarda w skrypcie co sekundę nie jest zdrowe dla serwera
Nie wiem do czego ci zmienna {gracze.online}
Same zmienne mozna by usuwac po wpisaniu poprawnego kodu, aby nie zasmiecac niepotrzebnie serwera,wtedy warunek if {kod} is true mozna by zamienic na if {kod} is set
Jak na pierwszy skrypt to dobrze ci poszlo
Jezeli masz w planie rozbudowe, to mysle ze fajną opcją było by dodanie także liter do kodu
Przykładowa skladnia skquery do czegos takiego:
set {_code} to random 6 char string from `a-Z0-9`
Żeby dało się łączyć do twojej lokalnej sieci z Internetu, musisz "otworzyć" porty serwera i przekierować ruch z Internetu na twój publiczny adres IP i dany port na twój komputer w sieci lokalnej.
Działa to w dużym uproszczeniu tak, że jeśli ktoś łączy się do <twoje publiczne IP>:25565 to router przekierowuje to na wybrany adres i port w sieci lokalnej np. 192.168.0.10:25565.
W zależności od routera robi się to troche inaczej, wygoogluj "port forwarding".