diff --git a/.gitignore b/.gitignore
index 6e117ff..8d0f0a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,120 @@
+# Created by https://www.toptal.com/developers/gitignore/api/gradle,intellij,java
+# Edit at https://www.toptal.com/developers/gitignore?templates=gradle,intellij,java
+
+### Intellij ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Intellij Patch ###
+# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
+
+# *.iml
+# modules.xml
+# .idea/misc.xml
+# *.ipr
+
+# Sonarlint plugin
+# https://plugins.jetbrains.com/plugin/7973-sonarlint
+.idea/**/sonarlint/
+
+# SonarQube Plugin
+# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
+.idea/**/sonarIssues.xml
+
+# Markdown Navigator plugin
+# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
+.idea/**/markdown-navigator.xml
+.idea/**/markdown-navigator-enh.xml
+.idea/**/markdown-navigator/
+
+# Cache file creation bug
+# See https://youtrack.jetbrains.com/issue/JBR-2257
+.idea/$CACHE_FILE$
+
+# CodeStream plugin
+# https://plugins.jetbrains.com/plugin/12206-codestream
+.idea/codestream.xml
+
+# Azure Toolkit for IntelliJ plugin
+# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
+.idea/**/azureSettings.xml
+
+### Java ###
# Compiled class file
*.class
@@ -23,8 +140,35 @@
hs_err_pid*
replay_pid*
-.idea
+### Gradle ###
.gradle
-build/*
+**/build/
+!src/**/build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Avoid ignore Gradle wrappper properties
+!gradle-wrapper.properties
+
+# Cache of project
+.gradletasknamecache
+
+# Eclipse Gradle plugin generated files
+# Eclipse Core
+.project
+# JDT-specific (Eclipse Java Development Tools)
+.classpath
+
+### Gradle Patch ###
+# Java heap dump
+*.hprof
+
+# End of https://www.toptal.com/developers/gitignore/api/gradle,intellij,java
/resources/
+/build/
+/bin/
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..3ff5d35
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..7b18ee8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..95c6c66
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..70c5a94
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0a6f7f2
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..9522e33
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/Minigames.main.iml b/.idea/modules/Minigames.main.iml
new file mode 100644
index 0000000..33db1bc
--- /dev/null
+++ b/.idea/modules/Minigames.main.iml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ ADVENTURE
+
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/Minigames.test.iml b/.idea/modules/Minigames.test.iml
new file mode 100644
index 0000000..a376b96
--- /dev/null
+++ b/.idea/modules/Minigames.test.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ ADVENTURE
+
+ 1
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/eu.mhsl.minenet.Minigames.main.iml b/.idea/modules/eu.mhsl.minenet.Minigames.main.iml
new file mode 100644
index 0000000..a376b96
--- /dev/null
+++ b/.idea/modules/eu.mhsl.minenet.Minigames.main.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ ADVENTURE
+
+ 1
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/eu.mhsl.minenet.Minigames.test.iml b/.idea/modules/eu.mhsl.minenet.Minigames.test.iml
new file mode 100644
index 0000000..a376b96
--- /dev/null
+++ b/.idea/modules/eu.mhsl.minenet.Minigames.test.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ ADVENTURE
+
+ 1
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 3e1ac02..9a890d3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@
plugins {
id 'java'
- id "com.github.johnrengelman.shadow" version "7.1.0"
+ id "com.gradleup.shadow" version "9.6.0"
}
group 'eu.mhsl.minenet'
@@ -11,58 +11,37 @@ version '1.0-SNAPSHOT'
repositories {
mavenCentral()
- google()
-
- maven {
- url 'https://jitpack.io'
- }
-
- maven {
- url 'https://oss.sonatype.org/content/repositories/snapshots'
- }
-
- maven {
- url 'https://repo.papermc.io/repository/maven-public/'
- }
+ maven { url = 'https://mvn.everbuild.org/public' }
}
-allprojects {
- repositories {
- maven { url "https://jitpack.io" }
- }
-}
-
-
java {
toolchain {
- languageVersion = JavaLanguageVersion.of(21)
+ languageVersion = JavaLanguageVersion.of(25)
}
}
dependencies {
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
+ testImplementation 'org.junit.jupiter:junit-jupiter:6.1.2'
+ testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
- //https://jitpack.io/#Minestom/Minestom
- implementation 'net.minestom:minestom-snapshots:fd51c8d17a'
+ //https://mvnrepository.com/artifact/net.minestom/minestom
+ implementation 'net.minestom:minestom:2026.07.12-26.2'
//Tools
- implementation 'de.articdive:jnoise:3.0.2'
- implementation 'net.md-5:bungeecord-config:1.20-R0.1'
- implementation 'org.apache.commons:commons-text:1.10.0'
- implementation 'org.spongepowered:configurate-yaml:4.1.2'
+ implementation 'de.articdive:jnoise-pipeline:4.1.0'
+ compileOnly 'it.unimi.dsi:fastutil:8.5.18' // von Minestom nur zur Laufzeit bereitgestellt, fuer BatchUtil-Reflection benoetigt
+ implementation 'net.md-5:bungeecord-config:1.21-R0.3'
+ implementation 'org.apache.commons:commons-text:1.15.0'
+ implementation 'org.spongepowered:configurate-yaml:4.2.0'
implementation 'com.sparkjava:spark-core:2.9.4'
- implementation 'com.google.code.gson:gson:2.10.1'
- implementation 'com.google.guava:guava:32.0.1-android'
-
+ implementation 'com.google.code.gson:gson:2.14.0'
+ implementation 'com.google.guava:guava:33.4.8-jre'
//PvP
- implementation 'io.github.TogAr2:MinestomPvP:PR62-SNAPSHOT'
+ implementation 'io.github.togar2:MinestomPvP:2026.05.30-26.1.1'
- // Hephaestus engine (repo.unnamed.team currently unreachable, unused in sources)
-// implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT")
-// implementation("team.unnamed:hephaestus-reader-blockbench:0.2.1-SNAPSHOT")
-// implementation("team.unnamed:hephaestus-runtime-minestom:0.2.1-SNAPSHOT")
+ //Block placement
+ implementation 'org.everbuild.blocksandstuff:blocksandstuff-blocks:1.10.2-SNAPSHOT'
}
tasks {
@@ -71,8 +50,6 @@ tasks {
attributes 'Main-Class': 'eu.mhsl.minenet.minigames.Main'
attributes 'Multi-Release': true
}
- duplicatesStrategy = 'exclude'
- from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
build {
dependsOn(shadowJar)
@@ -89,3 +66,7 @@ tasks.register('copyJarToServer', Exec) {
commandLine 'scp', 'build/libs/Minigames-1.0-SNAPSHOT.jar', 'root@10.20.6.5:/root/minigames'
}
+
+tasks.withType(JavaCompile) {
+ options.compilerArgs << "-Xlint:deprecation"
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..b1b8ef5
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 9355b41..a9db115 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
networkTimeout=10000
+retries=0
+retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index f5feea6..249efbb 100755
--- a/gradlew
+++ b/gradlew
@@ -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.
@@ -20,7 +20,7 @@
##############################################################################
#
-# Gradle start up script for POSIX generated by Gradle.
+# gradlew start up script for POSIX generated by Gradle.
#
# Important for running:
#
@@ -29,7 +29,7 @@
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
-# ksh Gradle
+# ksh gradlew
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
@@ -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/.
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -115,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -173,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" )
@@ -206,15 +203,14 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 9d21a21..a51ec4f 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -19,12 +19,12 @@
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
-@rem Gradle startup script for Windows
+@rem gradlew startup script for Windows
@rem
@rem ##########################################################################
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
+@rem Set local scope for the variables, and ensure extensions are enabled
+setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@@ -51,7 +51,7 @@ 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
+"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
@@ -65,30 +65,18 @@ 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
+"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+@rem Execute gradlew
+@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
-: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
+:exitWithErrorLevel
+@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
+"%COMSPEC%" /c exit %ERRORLEVEL%
diff --git a/src/main/java/eu/mhsl/minenet/minigames/Main.java b/src/main/java/eu/mhsl/minenet/minigames/Main.java
index a04111a..5d147fc 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/Main.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/Main.java
@@ -3,12 +3,12 @@ package eu.mhsl.minenet.minigames;
import eu.mhsl.minenet.minigames.api.HttpServer;
import eu.mhsl.minenet.minigames.command.Commands;
import eu.mhsl.minenet.minigames.handler.Listeners;
+import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.lang.Languages;
import eu.mhsl.minenet.minigames.server.tasks.TablistUpdateTask;
+import net.minestom.server.Auth;
import net.minestom.server.MinecraftServer;
-import net.minestom.server.extras.bungee.BungeeCordProxy;
import net.minestom.server.extras.lan.OpenToLAN;
-import net.minestom.server.extras.velocity.VelocityProxy;
import net.minestom.server.timer.TaskSchedule;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.ConfigurationNode;
@@ -24,27 +24,45 @@ public class Main {
private final static Logger logger = Logger.getGlobal();
public static ConfigurationNode globalConfig;
- public static void main(String[] args) throws ConfigurateException {
+ @SuppressWarnings("ResultOfMethodCallIgnored")
+ static void main(String[] args) throws ConfigurateException {
//noinspection ResultOfMethodCallIgnored
Resource.values(); // This initializes and preloads the enum and extracts the resources
Languages.getInstance(); //Preload languages into the jvm
globalConfig = YamlConfigurationLoader
- .builder()
- .path(Resource.CONFIG.getPath())
- .build()
- .load();
+ .builder()
+ .path(Resource.CONFIG.getPath())
+ .build()
+ .load();
ConfigurationNode serverConfig = globalConfig.node("server");
+ // muss vor MinecraftServer.init() gesetzt werden: ServerFlag liest die Properties statisch beim Klassenladen;
+ // bei fehlendem/ungueltigem Config-Wert den Minestom-Default behalten (0 wuerde keine Chunks senden)
+ int viewDistance = serverConfig.node("view-distance").getInt(0);
+ if(viewDistance > 0) {
+ System.setProperty("minestom.chunk-view-distance", String.valueOf(viewDistance));
+ }
+
logger.info("Initialize Minecraft server...");
- MinecraftServer server = MinecraftServer.init();
+ Auth auth = new Auth.Offline();
+ if(globalConfig.node("bungeecord", "enabled").getBoolean()) {
+ auth = new Auth.Bungee();
+ } else if(globalConfig.node("velocity", "enabled").getBoolean()) {
+ auth = new Auth.Velocity(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString()));
+ }
+
+ MinecraftServer server = MinecraftServer.init(auth);
// MinestomPvP.init();
+ // Dimensionen muessen vor server.start() registriert werden:
+ // seit Minestom 26.x sind die dynamischen Registries nach dem Start eingefroren
+ Dimension.values();
+
MinecraftServer.setBrandName("mhsl.eu - minenet - credits to minestom");
MinecraftServer.setCompressionThreshold(serverConfig.node("compression-threshold").getInt(0));
- System.setProperty("minestom.chunk-view-distance", String.valueOf(serverConfig.node("view-distance").getInt()));
Commands.values();
Listeners.values();
@@ -56,12 +74,6 @@ public class Main {
if(serverConfig.node("open-to-lan").getBoolean()) OpenToLAN.open();
- if(globalConfig.node("bungeecord", "enabled").getBoolean()) BungeeCordProxy.enable();
-
- if(globalConfig.node("velocity", "enabled").getBoolean()) {
- VelocityProxy.enable(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString()));
- }
-
server.start("0.0.0.0", serverConfig.node("port").getInt(25565));
System.gc();
diff --git a/src/main/java/eu/mhsl/minenet/minigames/Resource.java b/src/main/java/eu/mhsl/minenet/minigames/Resource.java
index 775748d..40bebd2 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/Resource.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/Resource.java
@@ -21,6 +21,7 @@ public enum Resource {
private final Path path;
private final String name;
+
Resource(String name, boolean keepOutdated) {
this.name = name;
this.path = Path.of("resources/" + name);
@@ -28,7 +29,7 @@ public enum Resource {
try {
Logger.getLogger("ressource").info("extracting resource " + name + " ... ");
ResourceUtils.extractResource(name, keepOutdated);
- } catch (URISyntaxException | IOException e) {
+ } catch(URISyntaxException | IOException e) {
throw new RuntimeException(e);
}
}
@@ -38,10 +39,10 @@ public enum Resource {
}
public Path getPath() {
- return path;
+ return this.path;
}
public String getName() {
- return name;
+ return this.name;
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/Controller.java b/src/main/java/eu/mhsl/minenet/minigames/api/Controller.java
index 40afb34..cadc112 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/api/Controller.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/api/Controller.java
@@ -12,11 +12,11 @@ public abstract class Controller implements Route {
@SuppressWarnings("unchecked")
public Controller() {
- this.requestType = ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
+ this.requestType = ((Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
@Override
- public Object handle(Request request, Response response) throws Exception {
+ public Object handle(Request request, Response response) {
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Methods", "*");
@@ -28,7 +28,7 @@ public abstract class Controller implements Route {
req = new Gson().fromJson(request.body(), this.requestType);
}
- return new Gson().toJson(handle(req, response));
+ return new Gson().toJson(this.handle(req, response));
}
public abstract R handle(Q request, Response response);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java b/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java
index 26af5a7..a033a62 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java
@@ -10,6 +10,7 @@ import static spark.Spark.*;
public class HttpServer {
private static final ConfigurationNode apiConfig = Main.globalConfig.node("api");
+
public HttpServer() {
if(!apiConfig.node("enabled").getBoolean()) return;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/routes/closeRoom/CloseRoom.java b/src/main/java/eu/mhsl/minenet/minigames/api/routes/closeRoom/CloseRoom.java
index 511723b..42481a4 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/api/routes/closeRoom/CloseRoom.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/api/routes/closeRoom/CloseRoom.java
@@ -6,8 +6,12 @@ import spark.Response;
import java.util.UUID;
-record Req(UUID room) {}
-record Resp() {}
+record Req(UUID room) {
+}
+
+record Resp() {
+}
+
public class CloseRoom extends Controller {
@Override
public Resp handle(Req request, Response response) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/routes/createRoom/CreateRoom.java b/src/main/java/eu/mhsl/minenet/minigames/api/routes/createRoom/CreateRoom.java
index aefe365..0af1cc7 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/api/routes/createRoom/CreateRoom.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/api/routes/createRoom/CreateRoom.java
@@ -6,8 +6,12 @@ import spark.Response;
import java.util.UUID;
-record Req() {}
-record Resp(UUID uuid) {}
+record Req() {
+}
+
+record Resp(UUID uuid) {
+}
+
public class CreateRoom extends Controller {
@Override
public Resp handle(Req request, Response response) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/routes/queueRoom/QueueRoom.java b/src/main/java/eu/mhsl/minenet/minigames/api/routes/queueRoom/QueueRoom.java
index a5cf128..fc584ba 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/api/routes/queueRoom/QueueRoom.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/api/routes/queueRoom/QueueRoom.java
@@ -8,8 +8,12 @@ import spark.Response;
import java.util.UUID;
-record Req(UUID player, UUID room) {}
-record Resp(String error) {}
+record Req(UUID player, UUID room) {
+}
+
+record Resp(String error) {
+}
+
public class QueueRoom extends Controller {
@Override
public Resp handle(Req request, Response response) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/Commands.java b/src/main/java/eu/mhsl/minenet/minigames/command/Commands.java
index a9a6a90..7880e78 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/Commands.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/Commands.java
@@ -1,9 +1,8 @@
package eu.mhsl.minenet.minigames.command;
-import eu.mhsl.minenet.minigames.command.privileged.SkinCommand;
-import eu.mhsl.minenet.minigames.command.privileged.*;
import eu.mhsl.minenet.minigames.command.anonymous.HubCommand;
import eu.mhsl.minenet.minigames.command.anonymous.LeaveCommand;
+import eu.mhsl.minenet.minigames.command.privileged.*;
import eu.mhsl.minenet.minigames.message.Icon;
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import net.minestom.server.MinecraftServer;
@@ -21,7 +20,6 @@ public enum Commands {
ROOM(new RoomCommand()),
UPDATE(new RefreshCommandsCommand()),
OP(new OpCommand()),
- FAKEPLAYER(new FakeplayerCommand()),
KICK(new KickCommand()),
SKIN(new SkinCommand()),
SETOWNER(new SetRoomOwnerCommand()),
@@ -34,14 +32,18 @@ public enum Commands {
PLAYERLIMIT(new PlayerLimitCommand()),
SETMEMORIAL(new SetMemorialCommand());
- Commands(Command handler) {
- MinecraftServer.getCommandManager().register(handler);
- }
-
static {
MinecraftServer.getCommandManager().setUnknownCommandCallback((sender, command) -> {
if(command.isBlank()) return;
- new ChatMessage(Icon.ERROR).appendStatic("Unknown command: ").quote(command).send(sender);
+ new ChatMessage(Icon.ERROR)
+ .appendTranslated("common#unknownCommand")
+ .appendSpace()
+ .quote(command)
+ .send(sender);
});
}
+
+ Commands(Command handler) {
+ MinecraftServer.getCommandManager().register(handler);
+ }
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java
index c4aa335..1316da1 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java
@@ -11,20 +11,21 @@ import java.util.List;
public class PrivilegedCommand extends Command {
private final List conditions = new ArrayList<>();
+
public PrivilegedCommand(@NotNull String name, @Nullable String... aliases) {
super(name, aliases);
- construct();
+ this.construct();
}
public PrivilegedCommand(@NotNull String name) {
super(name);
- construct();
+ this.construct();
}
private void construct() {
- addCondition(isPrivileged());
+ this.addCondition(this.isPrivileged());
- setCondition((sender, commandString) -> conditions.parallelStream().allMatch(condition -> condition.canUse(sender, commandString)));
+ this.setCondition((sender, commandString) -> this.conditions.parallelStream().allMatch(condition -> condition.canUse(sender, commandString)));
}
protected CommandCondition isPrivileged() {
@@ -32,6 +33,6 @@ public class PrivilegedCommand extends Command {
}
protected void addCondition(CommandCondition condition) {
- conditions.add(condition);
+ this.conditions.add(condition);
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/HubCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/HubCommand.java
index 9936895..7daa110 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/HubCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/HubCommand.java
@@ -1,8 +1,8 @@
package eu.mhsl.minenet.minigames.command.anonymous;
-import eu.mhsl.minenet.minigames.util.MoveInstance;
import eu.mhsl.minenet.minigames.instance.hub.Hub;
import eu.mhsl.minenet.minigames.instance.room.Room;
+import eu.mhsl.minenet.minigames.util.MoveInstance;
import net.minestom.server.command.builder.Command;
import net.minestom.server.entity.Player;
@@ -10,12 +10,12 @@ public class HubCommand extends Command {
public HubCommand() {
super("hub");
- setCondition(
+ this.setCondition(
(sender, commandString) ->
((Player) sender).getInstance() instanceof Room room && !room.apiDriven
);
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
if(Room.getRoom((Player) sender).orElseThrow().apiDriven) return;
Room.unsetRoom((Player) sender);
MoveInstance.move((Player) sender, Hub.INSTANCE);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/LeaveCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/LeaveCommand.java
index ff36186..a30c2c6 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/LeaveCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/anonymous/LeaveCommand.java
@@ -9,8 +9,8 @@ public class LeaveCommand extends Command {
public LeaveCommand() {
super("leave");
- setCondition((sender, commandString) -> ((Player) sender).getInstance() instanceof Game);
+ this.setCondition((sender, commandString) -> ((Player) sender).getInstance() instanceof Game);
- setDefaultExecutor((sender, context) -> Room.setOwnRoom((Player) sender));
+ this.setDefaultExecutor((sender, context) -> Room.setOwnRoom((Player) sender));
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/DebugCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/DebugCommand.java
index 4298529..a6980a2 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/DebugCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/DebugCommand.java
@@ -14,26 +14,26 @@ public class DebugCommand extends PrivilegedCommand {
public DebugCommand() {
super("debug");
- setDefaultExecutor((sender, args) -> {
+ this.setDefaultExecutor((sender, args) -> {
new ChatMessage(Icon.CHAT).appendTranslated("sample").send(sender);
new ActionBarMessage().appendTranslated("sample").send(sender);
new TitleMessage().subtitle(subtitleMessage -> subtitleMessage.appendTranslated("sample")).appendTranslated("sample").send(sender);
List testplayers = new ArrayList<>() {
{
- add("MineTec");
- add("Goldi187");
- add("Test");
+ this.add("MineTec");
+ this.add("Goldi187");
+ this.add("Test");
}
};
new ChatMessage(Icon.STAR, true)
- .appendTranslated("score#result")
- .newLine()
- .indent()
- .numberedList(testplayers)
- .undent()
- .newLine()
- .appendTranslated("score#thanks")
- .send(sender);
+ .appendTranslated("score#result")
+ .newLine()
+ .indent()
+ .numberedList(testplayers)
+ .undent()
+ .newLine()
+ .appendTranslated("score#thanks")
+ .send(sender);
new ChatMessage(Icon.SCIENCE).appendStatic(((Player) sender).getUuid().toString()).send(sender);
});
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FakeplayerCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FakeplayerCommand.java
deleted file mode 100644
index 69c31c5..0000000
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FakeplayerCommand.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package eu.mhsl.minenet.minigames.command.privileged;
-
-import eu.mhsl.minenet.minigames.command.PrivilegedCommand;
-import eu.mhsl.minenet.minigames.instance.room.Room;
-import eu.mhsl.minenet.minigames.message.Icon;
-import eu.mhsl.minenet.minigames.message.type.ChatMessage;
-import net.minestom.server.command.builder.arguments.ArgumentType;
-import net.minestom.server.entity.Player;
-
-import java.util.UUID;
-
-public class FakeplayerCommand extends PrivilegedCommand {
- public FakeplayerCommand() {
- super("fakeplayer");
-
- addSyntax((sender, context) -> {
- if(sender instanceof Player p) {
- if(p.getInstance() instanceof Room room) {
-// FakePlayer.initPlayer( // TODO FakePlayer does no longer exists
-// UUID.randomUUID(),
-// context.getRaw("name"),
-// new FakePlayerOption().setInTabList(true).setRegistered(true),
-// fakePlayer -> Room.setRoom(fakePlayer, room)
-// );
- } else {
- new ChatMessage(Icon.ERROR).appendStatic("Du musst dich in einer Raumlobby befinden!").send(sender);
- }
- }
- }, ArgumentType.String("name"));
- }
-}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FlyCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FlyCommand.java
index f5e3dac..2e3385b 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FlyCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/FlyCommand.java
@@ -8,7 +8,7 @@ public class FlyCommand extends PrivilegedCommand {
public FlyCommand() {
super("fly");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
Player p = (Player) sender;
p.setVelocity(new Vec(0, 5, 0));
p.setFlying(!p.isFlying());
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStartCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStartCommand.java
index 1e591a8..0f1e813 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStartCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStartCommand.java
@@ -7,11 +7,11 @@ import net.minestom.server.entity.Player;
public class GameStartCommand extends PrivilegedCommand {
public GameStartCommand() {
super("gameStart");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
Player player = (Player) sender;
if(player.getInstance() instanceof StatelessGame game) {
game.startAccessor();
}
- });
+ });
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStopCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStopCommand.java
index addbcd3..8bfd2ee 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStopCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameStopCommand.java
@@ -7,7 +7,7 @@ import net.minestom.server.entity.Player;
public class GameStopCommand extends PrivilegedCommand {
public GameStopCommand() {
super("gameStop");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
Player player = (Player) sender;
if(player.getInstance() instanceof StatelessGame game) {
game.stop();
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameTimeoutCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameTimeoutCommand.java
index 8e3c1b8..ee4e7ba 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameTimeoutCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GameTimeoutCommand.java
@@ -12,7 +12,7 @@ public class GameTimeoutCommand extends PrivilegedCommand {
ArgumentInteger timeout = ArgumentType.Integer("timeout");
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
Player player = (Player) sender;
if(player.getInstance() instanceof StatelessGame game) {
game.setTimeLimit(context.get(timeout));
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GamemodeCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GamemodeCommand.java
index 68fe523..b0d5ce8 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GamemodeCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GamemodeCommand.java
@@ -11,9 +11,9 @@ public class GamemodeCommand extends PrivilegedCommand {
super("gamemode", "gm");
- addSyntax((sender, context) -> ((Player) sender).setGameMode(
+ this.addSyntax((sender, context) -> ((Player) sender).setGameMode(
context.get("target")),
- ArgumentType.Enum("target", GameMode.class).setFormat(ArgumentEnum.Format.LOWER_CASED)
+ ArgumentType.Enum("target", GameMode.class).setFormat(ArgumentEnum.Format.LOWER_CASED)
);
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GcCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GcCommand.java
index e332b8e..cbc5e4e 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GcCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/GcCommand.java
@@ -1,17 +1,18 @@
package eu.mhsl.minenet.minigames.command.privileged;
import eu.mhsl.minenet.minigames.command.PrivilegedCommand;
-import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import eu.mhsl.minenet.minigames.message.Icon;
+import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import eu.mhsl.minenet.minigames.util.Monitoring;
public class GcCommand extends PrivilegedCommand {
private static long lastRun = System.currentTimeMillis();
+
public GcCommand() {
super("gc");
- setDefaultExecutor((sender, context) -> {
- long nextRun = (lastRun - (System.currentTimeMillis() - 30*1000)) / 1000;
+ this.setDefaultExecutor((sender, context) -> {
+ long nextRun = (lastRun - (System.currentTimeMillis() - 30 * 1000)) / 1000;
if(nextRun > 0) {
new ChatMessage(Icon.ERROR).appendStatic("Please wait ").appendStatic(String.valueOf(nextRun)).appendStatic(" seconds before running GC again!").send(sender);
return;
@@ -24,10 +25,10 @@ public class GcCommand extends PrivilegedCommand {
long after = Monitoring.getRamUsage();
new ChatMessage(Icon.SUCCESS).appendStatic("Garbage collector ran successfully!").newLine()
- .appendStatic("before: ").appendStatic(String.valueOf(before)).appendStatic("MB").newLine()
- .appendStatic("now: ").appendStatic(String.valueOf(after)).appendStatic("MB").newLine()
- .appendStatic("difference: ").appendStatic(String.valueOf(before-after)).appendStatic("MB")
- .send(sender);
+ .appendStatic("before: ").appendStatic(String.valueOf(before)).appendStatic("MB").newLine()
+ .appendStatic("now: ").appendStatic(String.valueOf(after)).appendStatic("MB").newLine()
+ .appendStatic("difference: ").appendStatic(String.valueOf(before - after)).appendStatic("MB")
+ .send(sender);
});
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/InstanceProxyMoveCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/InstanceProxyMoveCommand.java
index 084760f..e403bf1 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/InstanceProxyMoveCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/InstanceProxyMoveCommand.java
@@ -13,7 +13,7 @@ public class InstanceProxyMoveCommand extends PrivilegedCommand {
ArgumentWord serverArgument = new ArgumentWord("server");
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
Instance room = ((Player) sender).getInstance();
room.getPlayers().forEach(player -> {
Room.unsetRoom(player);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/KickCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/KickCommand.java
index 02f292c..3e9b7fb 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/KickCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/KickCommand.java
@@ -11,17 +11,17 @@ public class KickCommand extends PrivilegedCommand {
public KickCommand() {
super("kick");
- addSyntax(
+ this.addSyntax(
(sender, context) ->
- kick(context.getRaw("player"), ""),
- ArgumentType.Entity("player").onlyPlayers(true)
+ this.kick(context.getRaw("player"), ""),
+ ArgumentType.Entity("player").onlyPlayers(true)
);
- addSyntax(
+ this.addSyntax(
(sender, context) ->
- kick(context.getRaw("player"), context.getRaw("reason")),
- ArgumentType.Entity("player").onlyPlayers(true),
- ArgumentType.String("reason")
+ this.kick(context.getRaw("player"), context.getRaw("reason")),
+ ArgumentType.Entity("player").onlyPlayers(true),
+ ArgumentType.String("reason")
);
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/LangTestCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/LangTestCommand.java
index e9f98ae..cf68687 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/LangTestCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/LangTestCommand.java
@@ -1,8 +1,8 @@
package eu.mhsl.minenet.minigames.command.privileged;
import eu.mhsl.minenet.minigames.command.PrivilegedCommand;
-import eu.mhsl.minenet.minigames.lang.Languages;
import eu.mhsl.minenet.minigames.lang.Lang;
+import eu.mhsl.minenet.minigames.lang.Languages;
import eu.mhsl.minenet.minigames.message.Icon;
import eu.mhsl.minenet.minigames.message.TranslatableMessage;
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
@@ -13,11 +13,11 @@ public class LangTestCommand extends PrivilegedCommand {
public LangTestCommand() {
super("langtest");
- setDefaultExecutor((sender, context) -> sendMessage(Languages.getInstance().getLanguage((Player) sender), "sample").send(sender));
+ this.setDefaultExecutor((sender, context) -> this.sendMessage(Languages.getInstance().getLanguage((Player) sender), "sample").send(sender));
var targetString = ArgumentType.String("mapId");
- addSyntax((sender, context) -> sendMessage(Languages.getInstance().getLanguage((Player) sender), context.get("mapId")).send(sender), targetString);
+ this.addSyntax((sender, context) -> this.sendMessage(Languages.getInstance().getLanguage((Player) sender), context.get("mapId")).send(sender), targetString);
}
private TranslatableMessage sendMessage(Lang lang, String mapId) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/OpCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/OpCommand.java
index aebc0d7..1f1b1e9 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/OpCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/OpCommand.java
@@ -11,7 +11,7 @@ public class OpCommand extends PrivilegedCommand {
public OpCommand() {
super("op");
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
Player target = MinecraftServer.getConnectionManager().getOnlinePlayerByUsername(context.getRaw("target"));
if(target != null) {
target.setPermissionLevel(4);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PlayerLimitCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PlayerLimitCommand.java
index 7b50a72..ef93043 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PlayerLimitCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PlayerLimitCommand.java
@@ -10,8 +10,9 @@ public class PlayerLimitCommand extends PrivilegedCommand {
ArgumentInteger count = ArgumentType.Integer("count");
- addSyntax((sender, context) -> {
- System.setProperty("minenet.playerlimit", String.valueOf(context.get(count)));
- }, count);
+ this.addSyntax((sender, context) -> System.setProperty(
+ "minenet.playerlimit",
+ String.valueOf(context.get(count))
+ ), count);
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PublishRewardCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PublishRewardCommand.java
index 3313581..75b7604 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PublishRewardCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/PublishRewardCommand.java
@@ -13,10 +13,11 @@ import java.net.http.HttpResponse;
public class PublishRewardCommand extends PrivilegedCommand {
private final HttpClient rewardPublishClient = HttpClient.newHttpClient();
+
public PublishRewardCommand() {
super("publishReward");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
try {
Room room = Room.getRoom((Player) sender).orElseThrow();
TournamentDisplay world = new TournamentDisplay(room.getTournament());
@@ -24,14 +25,14 @@ public class PublishRewardCommand extends PrivilegedCommand {
String rewardRequestJson = new Gson().toJson(room.getTournament().getRewards());
HttpRequest giveRewardsRequest = HttpRequest.newBuilder()
- .uri(new URI("http://10.20.7.1:8080/api/event/reward"))
- .POST(HttpRequest.BodyPublishers.ofString(rewardRequestJson))
- .build();
+ .uri(new URI("http://10.20.9.3:8080/api/event/reward"))
+ .POST(HttpRequest.BodyPublishers.ofString(rewardRequestJson))
+ .build();
room.getTournament().getRewards();
- HttpResponse rawResponse = rewardPublishClient.send(giveRewardsRequest, HttpResponse.BodyHandlers.discarding());
+ HttpResponse rawResponse = this.rewardPublishClient.send(giveRewardsRequest, HttpResponse.BodyHandlers.discarding());
sender.sendMessage(String.format("Rewards published: HTTP %s", rawResponse.statusCode()));
- } catch (Exception e) {
+ } catch(Exception e) {
sender.sendMessage(e.getMessage());
}
});
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RefreshCommandsCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RefreshCommandsCommand.java
index d0e5b36..4d9a8b8 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RefreshCommandsCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RefreshCommandsCommand.java
@@ -1,8 +1,8 @@
package eu.mhsl.minenet.minigames.command.privileged;
import eu.mhsl.minenet.minigames.command.PrivilegedCommand;
-import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import eu.mhsl.minenet.minigames.message.Icon;
+import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
@@ -10,7 +10,7 @@ public class RefreshCommandsCommand extends PrivilegedCommand {
public RefreshCommandsCommand() {
super("refreshCommands");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
MinecraftServer.getConnectionManager().getOnlinePlayers().forEach(Player::refreshCommands);
new ChatMessage(Icon.SUCCESS).appendStatic("Updated command syntax!").send(sender);
});
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java
index e9a5cfe..242fcc1 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java
@@ -1,10 +1,10 @@
package eu.mhsl.minenet.minigames.command.privileged;
import eu.mhsl.minenet.minigames.command.PrivilegedCommand;
+import eu.mhsl.minenet.minigames.instance.room.Room;
import eu.mhsl.minenet.minigames.message.Icon;
import eu.mhsl.minenet.minigames.message.TranslatableMessage;
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
-import eu.mhsl.minenet.minigames.instance.room.Room;
import net.minestom.server.entity.Player;
import java.util.stream.Collectors;
@@ -13,14 +13,14 @@ public class RoomCommand extends PrivilegedCommand {
public RoomCommand() {
super("room");
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
TranslatableMessage out = new ChatMessage(Icon.SCIENCE).appendStatic("Rooms:").newLine();
Room.getAllRooms().forEach((roomInstance) -> out
- .newLine()
- .appendStatic("Owner: ").appendStatic(roomInstance.getOwner() != null ? roomInstance.getOwner().getUsername() : "none").newLine()
- .appendStatic("Players: ").appendStatic(String.valueOf(roomInstance.getAllMembers().size())).newLine()
- .list(roomInstance.getAllMembers().stream().map(Player::getUsername).collect(Collectors.toList())).newLine());
+ .newLine()
+ .appendStatic("Owner: ").appendStatic(roomInstance.getOwner() != null ? roomInstance.getOwner().getUsername() : "none").newLine()
+ .appendStatic("Players: ").appendStatic(String.valueOf(roomInstance.getAllMembers().size())).newLine()
+ .list(roomInstance.getAllMembers().stream().map(Player::getUsername).collect(Collectors.toList())).newLine());
out.send(sender);
});
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java
index c18dd63..2592123 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java
@@ -20,37 +20,37 @@ public class SetMemorialCommand extends PrivilegedCommand {
ArgumentString titleArgument = ArgumentType.String("title");
ArgumentString loreArgument = ArgumentType.String("lore");
- materialArgument.setSuggestionCallback((sender, context, suggestion) -> {
- Material
- .values()
- .stream()
- .map(material -> new SuggestionEntry(material.name(), Component.text(material.name())))
- .forEach(suggestion::addEntry);
- });
+ materialArgument.setSuggestionCallback(
+ (sender, context, suggestion) -> Material
+ .values()
+ .stream()
+ .map(material -> new SuggestionEntry(material.name(), Component.text(material.name())))
+ .forEach(suggestion::addEntry)
+ );
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
Room
- .getRoom((Player) sender)
- .orElseThrow()
- .getTournament()
- .setMemorialConfiguration(
- new MemorialConfiguration(
- Material.fromNamespaceId(context.get(materialArgument)),
- context.get(titleArgument),
- context.get(loreArgument)
- )
- );
+ .getRoom((Player) sender)
+ .orElseThrow()
+ .getTournament()
+ .setMemorialConfiguration(
+ new MemorialConfiguration(
+ Material.fromKey(context.get(materialArgument)),
+ context.get(titleArgument),
+ context.get(loreArgument)
+ )
+ );
sender.sendMessage(
- Component.text()
- .append(Component.text("Memorial gesetzt:", NamedTextColor.GOLD))
- .appendNewline()
- .append(Component.text(context.get(materialArgument), NamedTextColor.AQUA))
- .appendNewline()
- .append(Component.text(context.get(titleArgument), NamedTextColor.RED))
- .appendNewline()
- .append(Component.text(context.get(loreArgument), NamedTextColor.DARK_RED))
- .build()
+ Component.text()
+ .append(Component.text("Memorial gesetzt:", NamedTextColor.GOLD))
+ .appendNewline()
+ .append(Component.text(context.get(materialArgument), NamedTextColor.AQUA))
+ .appendNewline()
+ .append(Component.text(context.get(titleArgument), NamedTextColor.RED))
+ .appendNewline()
+ .append(Component.text(context.get(loreArgument), NamedTextColor.DARK_RED))
+ .build()
);
}, materialArgument, titleArgument, loreArgument);
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java
index 659a610..52e2396 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java
@@ -22,34 +22,34 @@ public class SetRewardCommand extends PrivilegedCommand {
ArgumentWord materialArgument = ArgumentType.Word("material");
ArgumentStringArray amountsArgument = ArgumentType.StringArray("amount");
- materialArgument.setSuggestionCallback((sender, context, suggestion) -> {
- Material
- .values()
- .stream()
- .map(material -> new SuggestionEntry(material.name(), Component.text(material.name())))
- .forEach(suggestion::addEntry);
- });
+ materialArgument.setSuggestionCallback(
+ (sender, context, suggestion) -> Material
+ .values()
+ .stream()
+ .map(material -> new SuggestionEntry(material.name(), Component.text(material.name())))
+ .forEach(suggestion::addEntry)
+ );
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
Room
- .getRoom((Player) sender)
- .orElseThrow()
- .getTournament()
- .setRewardConfiguration(
- new RewardConfiguration(
- Material.fromNamespaceId(context.get(materialArgument)),
- Arrays.stream(context.get(amountsArgument)).map(Integer::valueOf).collect(Collectors.toList())
- )
- );
+ .getRoom((Player) sender)
+ .orElseThrow()
+ .getTournament()
+ .setRewardConfiguration(
+ new RewardConfiguration(
+ Material.fromKey(context.get(materialArgument)),
+ Arrays.stream(context.get(amountsArgument)).map(Integer::valueOf).collect(Collectors.toList())
+ )
+ );
sender.sendMessage(
- Component.text()
- .append(Component.text("Belohnung gesetzt:", NamedTextColor.GOLD))
- .appendNewline()
- .append(Component.text(context.get(materialArgument), NamedTextColor.AQUA))
- .appendNewline()
- .append(Component.text(String.join(", ", context.get(amountsArgument)), NamedTextColor.RED))
- .build()
+ Component.text()
+ .append(Component.text("Belohnung gesetzt:", NamedTextColor.GOLD))
+ .appendNewline()
+ .append(Component.text(context.get(materialArgument), NamedTextColor.AQUA))
+ .appendNewline()
+ .append(Component.text(String.join(", ", context.get(amountsArgument)), NamedTextColor.RED))
+ .build()
);
}, materialArgument, amountsArgument);
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRoomOwnerCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRoomOwnerCommand.java
index 6a83853..b95d0ff 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRoomOwnerCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRoomOwnerCommand.java
@@ -15,21 +15,21 @@ public class SetRoomOwnerCommand extends PrivilegedCommand {
public SetRoomOwnerCommand() {
super("setRoomOwner");
- addCondition((sender, commandString) -> ((Player) sender).getInstance() instanceof Room);
+ this.addCondition((sender, commandString) -> ((Player) sender).getInstance() instanceof Room);
- setDefaultExecutor((sender, context) -> {
+ this.setDefaultExecutor((sender, context) -> {
if(sender instanceof Player p) {
Room.getRoom(p).orElseThrow().setOwner(p);
- new ChatMessage(Icon.SUCCESS).appendStatic("You are now the owner of this room!").send(sender);
+ new ChatMessage(Icon.SUCCESS).appendTranslated("room#ownerSelf").send(sender);
}
});
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
System.out.println("Test");
if(sender instanceof Player p) {
Player newOwner = MinecraftServer.getConnectionManager().getOnlinePlayerByUsername(context.getRaw("player"));
Room.getRoom(p).orElseThrow().setOwner(Objects.requireNonNull(newOwner));
- new ChatMessage(Icon.SUCCESS).appendStatic("The new owner has been set!").send(sender);
+ new ChatMessage(Icon.SUCCESS).appendTranslated("room#ownerSet").send(sender);
}
}, ArgumentType.Entity("player").onlyPlayers(true));
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SkinCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SkinCommand.java
index 4de09dc..feca11f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SkinCommand.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SkinCommand.java
@@ -9,7 +9,7 @@ public class SkinCommand extends PrivilegedCommand {
public SkinCommand() {
super("skin");
- addSyntax((sender, context) -> {
+ this.addSyntax((sender, context) -> {
if(sender instanceof Player p) {
p.setSkin(PlayerSkin.fromUsername(context.getRaw("target")));
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/handler/Listeners.java b/src/main/java/eu/mhsl/minenet/minigames/handler/Listeners.java
index 72b17c0..5590cc2 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/handler/Listeners.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/handler/Listeners.java
@@ -1,13 +1,19 @@
package eu.mhsl.minenet.minigames.handler;
-import eu.mhsl.minenet.minigames.handler.global.*;
+import eu.mhsl.minenet.minigames.handler.global.AddEntityToInstanceEventListener;
+import eu.mhsl.minenet.minigames.handler.global.ChatFormatHandler;
+import eu.mhsl.minenet.minigames.handler.global.PlayerFreezeHandler;
+import eu.mhsl.minenet.minigames.handler.global.PlayerLeaveHandler;
+import eu.mhsl.minenet.minigames.handler.global.PlayerLoginHandler;
import net.minestom.server.MinecraftServer;
import net.minestom.server.event.EventListener;
public enum Listeners {
SPAWN(new AddEntityToInstanceEventListener()),
LOGIN(new PlayerLoginHandler()),
- LEAVE(new PlayerLeaveHandler());
+ LEAVE(new PlayerLeaveHandler()),
+ FREEZE(new PlayerFreezeHandler()),
+ CHAT(new ChatFormatHandler());
Listeners(EventListener> event) {
MinecraftServer.getGlobalEventHandler().addListener(event);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/handler/global/ChatFormatHandler.java b/src/main/java/eu/mhsl/minenet/minigames/handler/global/ChatFormatHandler.java
new file mode 100644
index 0000000..72c251a
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/handler/global/ChatFormatHandler.java
@@ -0,0 +1,37 @@
+package eu.mhsl.minenet.minigames.handler.global;
+
+import eu.mhsl.minenet.minigames.Main;
+import eu.mhsl.minenet.minigames.message.Icon;
+import eu.mhsl.minenet.minigames.message.type.ChatMessage;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.minestom.server.event.EventListener;
+import net.minestom.server.event.player.PlayerChatEvent;
+import org.jetbrains.annotations.NotNull;
+
+public class ChatFormatHandler implements EventListener {
+ // Verteilt der Proxy den Chat (chat-bridge bei CraftAttack), darf er hier nicht noch einmal erscheinen
+ private final boolean chatViaProxy = Main.globalConfig.node("velocity", "chat-via-proxy").getBoolean(false);
+
+ @Override
+ public @NotNull Class eventType() {
+ return PlayerChatEvent.class;
+ }
+
+ @Override
+ public @NotNull Result run(@NotNull PlayerChatEvent event) {
+ if(this.chatViaProxy) {
+ event.setCancelled(true);
+ return Result.SUCCESS;
+ }
+ NamedTextColor color = event.getPlayer().getPermissionLevel() > 0 ? NamedTextColor.AQUA : NamedTextColor.GRAY;
+ event.setFormattedMessage(
+ new ChatMessage(Icon.CHAT)
+ .appendStatic(Component.text(event.getPlayer().getUsername(), color))
+ .appendStatic(Component.text(" > ", NamedTextColor.DARK_GRAY))
+ .appendStatic(event.getRawMessage())
+ .build(event.getPlayer())
+ );
+ return Result.SUCCESS;
+ }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerFreezeHandler.java b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerFreezeHandler.java
new file mode 100644
index 0000000..8845d89
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerFreezeHandler.java
@@ -0,0 +1,43 @@
+package eu.mhsl.minenet.minigames.handler.global;
+
+import net.minestom.server.coordinate.Pos;
+import net.minestom.server.entity.Player;
+import net.minestom.server.event.EventListener;
+import net.minestom.server.event.player.PlayerTickEvent;
+import net.minestom.server.instance.Instance;
+import net.minestom.server.instance.block.Block;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Weder Minestom noch MinestomPvP verwalten die TICKS_FROZEN-Metadata. Der 26.x-Client baut das
+ * Freeze-Overlay bei Powder-Snow-Kontakt zwar selbst auf, der Abbau ist aber server-authoritative —
+ * ohne diese Vanilla-Logik bleibt das Overlay dauerhaft haengen (auch ueber Instanzwechsel hinweg).
+ */
+public class PlayerFreezeHandler implements EventListener {
+ private static final int TICKS_REQUIRED_TO_FREEZE = 140;
+
+ @Override
+ public @NotNull Class eventType() {
+ return PlayerTickEvent.class;
+ }
+
+ @Override
+ public @NotNull Result run(@NotNull PlayerTickEvent event) {
+ Player p = event.getPlayer();
+ Instance instance = p.getInstance();
+ if(instance == null) return Result.SUCCESS;
+
+ Pos pos = p.getPosition();
+ boolean inPowderSnow = instance.getBlock(pos).compare(Block.POWDER_SNOW)
+ || instance.getBlock(pos.add(0, 1, 0)).compare(Block.POWDER_SNOW);
+
+ int ticksFrozen = p.getEntityMeta().getTickFrozen();
+ if(inPowderSnow) {
+ p.getEntityMeta().setTickFrozen(Math.min(TICKS_REQUIRED_TO_FREEZE, ticksFrozen + 1));
+ } else if(ticksFrozen > 0) {
+ p.getEntityMeta().setTickFrozen(Math.max(0, ticksFrozen - 2));
+ }
+
+ return Result.SUCCESS;
+ }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLeaveHandler.java b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLeaveHandler.java
index fcfc4bb..afa771e 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLeaveHandler.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLeaveHandler.java
@@ -1,5 +1,9 @@
package eu.mhsl.minenet.minigames.handler.global;
+import eu.mhsl.minenet.minigames.message.Icon;
+import eu.mhsl.minenet.minigames.message.type.ChatMessage;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.event.EventListener;
import net.minestom.server.event.player.PlayerDisconnectEvent;
@@ -14,7 +18,11 @@ public class PlayerLeaveHandler implements EventListener
@Override
public @NotNull Result run(@NotNull PlayerDisconnectEvent event) {
Player p = event.getPlayer();
-// new ChatMessage(Icon.SCIENCE).appendStatic("unübersetzter Leavetext: ").appendStatic(p.getDisplayName()).send(MinecraftServer.getConnectionManager().getOnlinePlayers());
+ new ChatMessage(Icon.LEAVE)
+ .appendStatic(p.getName().color(NamedTextColor.GRAY))
+ .appendSpace()
+ .appendTranslated("common#leave", NamedTextColor.DARK_GRAY)
+ .send(MinecraftServer.getConnectionManager().getOnlinePlayers());
return Result.SUCCESS;
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLoginHandler.java b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLoginHandler.java
index b694668..02d7725 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLoginHandler.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/handler/global/PlayerLoginHandler.java
@@ -2,13 +2,13 @@ package eu.mhsl.minenet.minigames.handler.global;
import eu.mhsl.minenet.minigames.Main;
import eu.mhsl.minenet.minigames.api.QueuedPlayerRooms;
+import eu.mhsl.minenet.minigames.instance.hub.Hub;
import eu.mhsl.minenet.minigames.instance.room.Room;
import eu.mhsl.minenet.minigames.instance.transfer.Transfer;
import eu.mhsl.minenet.minigames.skin.SkinCache;
import eu.mhsl.minenet.minigames.util.MoveInstance;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
-import eu.mhsl.minenet.minigames.instance.hub.Hub;
import net.minestom.server.event.EventListener;
import net.minestom.server.event.player.AsyncPlayerConfigurationEvent;
import net.minestom.server.network.packet.server.play.TeamsPacket;
@@ -61,12 +61,11 @@ public class PlayerLoginHandler implements EventListener s.equalsIgnoreCase(p.getUsername()))) {
p.setPermissionLevel(4);
}
- } catch (SerializationException | NullPointerException ignored) {}
+ } catch(SerializationException | NullPointerException ignored) {
+ }
Logger.getLogger("user").info(p.getUsername() + " joined");
-// new ChatMessage(Icon.SCIENCE).appendStatic("unübersetzter Jointext: ").appendStatic(p.getUsername()).send(MinecraftServer.getConnectionManager().getOnlinePlayers());
-
return Result.SUCCESS;
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java b/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java
index f1d7825..b755bdc 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java
@@ -1,48 +1,85 @@
package eu.mhsl.minenet.minigames.instance;
+import net.kyori.adventure.key.Key;
import net.minestom.server.MinecraftServer;
-import net.minestom.server.registry.DynamicRegistry;
-import net.minestom.server.utils.NamespaceID;
+import net.minestom.server.registry.RegistryKey;
+import net.minestom.server.registry.RegistryTag;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextColor;
import net.minestom.server.world.DimensionType;
+import net.minestom.server.world.attribute.EnvironmentAttribute;
+import net.minestom.server.world.clock.WorldClock;
+import net.minestom.server.world.timeline.Timeline;
/**
* Prebuilt dimensions
*/
public enum Dimension {
OVERWORLD(
- NamespaceID.from("minenet:fullbright_overworld"),
- DimensionType
- .builder()
- .ambientLight(2.0f)
- .build()
+ Key.key("minenet:fullbright_overworld"),
+ DimensionType
+ .builder()
+ // Fullbright: seit MC 26.1 laeuft die Grundhelligkeit ueber das Environment-Attribut
+ // AMBIENT_LIGHT_COLOR (Vanilla-Overworld: #0A0A0A); der alte ambientLight-2.0-Hack
+ // liegt ausserhalb der validen Range und bricht das Client-Rendering
+ .setAttribute(EnvironmentAttribute.AMBIENT_LIGHT_COLOR, NamedTextColor.WHITE)
+ // defaultClock noetig, damit Instance#setTime/#defaultClock funktionieren (sonst null); Timelines wie Vanilla-Overworld
+ .defaultClock(WorldClock.OVERWORLD)
+ .timelines(RegistryTag.direct(Timeline.DAY, Timeline.MOON, Timeline.EARLY_GAME, Timeline.VILLAGER_SCHEDULE))
+ .build()
),
NETHER(
- NamespaceID.from("minenet:fullbright_nether"),
- DimensionType
- .builder()
- .ambientLight(2.0f)
- .effects("minecraft:the_nether")
- .build()
+ Key.key("minenet:fullbright_nether"),
+ DimensionType
+ .builder()
+ // Fullbright: seit MC 26.1 laeuft die Grundhelligkeit ueber das Environment-Attribut
+ // AMBIENT_LIGHT_COLOR (Vanilla-Overworld: #0A0A0A); der alte ambientLight-2.0-Hack
+ // liegt ausserhalb der validen Range und bricht das Client-Rendering
+ .setAttribute(EnvironmentAttribute.AMBIENT_LIGHT_COLOR, NamedTextColor.WHITE)
+ .skybox(DimensionType.Skybox.NONE)
+ .defaultClock(WorldClock.OVERWORLD)
+ .timelines(RegistryTag.direct(Timeline.VILLAGER_SCHEDULE))
+ .build()
),
THE_END(
- NamespaceID.from("minenet:fullbright_end"),
- DimensionType
- .builder()
- .ambientLight(2.0f)
- .effects("minecraft:the_end")
- .build()
+ Key.key("minenet:fullbright_end"),
+ DimensionType
+ .builder()
+ // Fullbright: seit MC 26.1 laeuft die Grundhelligkeit ueber das Environment-Attribut
+ // AMBIENT_LIGHT_COLOR (Vanilla-Overworld: #0A0A0A); der alte ambientLight-2.0-Hack
+ // liegt ausserhalb der validen Range und bricht das Client-Rendering
+ .setAttribute(EnvironmentAttribute.AMBIENT_LIGHT_COLOR, NamedTextColor.WHITE)
+ .skybox(DimensionType.Skybox.END)
+ .defaultClock(WorldClock.THE_END)
+ .timelines(RegistryTag.direct(Timeline.VILLAGER_SCHEDULE))
+ .build()
+ ),
+
+ BACKROOMS(
+ Key.key("minenet:backrooms"),
+ DimensionType
+ .builder()
+ // Sehr dunkles Grundlicht (knapp ueber Vanilla-Overworld #0A0A0A): die eigentliche
+ // Helligkeit kommt aus echten Lichtquellen via LightingChunk — Blackout-Biome
+ // sind dadurch tatsaechlich dunkel, mit weichen Uebergaengen am Zonenrand
+ .setAttribute(EnvironmentAttribute.AMBIENT_LIGHT_COLOR, TextColor.color(0x16160F))
+ .skybox(DimensionType.Skybox.NONE)
+ .defaultClock(WorldClock.OVERWORLD)
+ .timelines(RegistryTag.direct(Timeline.VILLAGER_SCHEDULE))
+ .build()
);
public final DimensionType DIMENSION;
- public final NamespaceID namespaceID;
- public final DynamicRegistry.Key key;
- Dimension(NamespaceID namespaceID, DimensionType dimType) {
+ public final Key namespaceID;
+ public final RegistryKey key;
+
+ Dimension(Key namespaceID, DimensionType dimType) {
this.DIMENSION = dimType;
this.namespaceID = namespaceID;
- this.key = MinecraftServer.getDimensionTypeRegistry().register(namespaceID, DIMENSION);
+ this.key = MinecraftServer.getDimensionTypeRegistry().register(namespaceID, this.DIMENSION);
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java b/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java
index 051cfcd..7900dad 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java
@@ -1,27 +1,34 @@
package eu.mhsl.minenet.minigames.instance;
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
+import net.kyori.adventure.key.Key;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.InstanceContainer;
-import net.minestom.server.instance.InstanceManager;
-import net.minestom.server.registry.DynamicRegistry;
+import net.minestom.server.registry.RegistryKey;
import net.minestom.server.timer.TaskSchedule;
import net.minestom.server.world.DimensionType;
import java.util.UUID;
public class MineNetInstance extends InstanceContainer {
- public MineNetInstance(DynamicRegistry.Key type) {
- super(UUID.randomUUID(), type);
+ public MineNetInstance(RegistryKey type) {
+ this(UUID.randomUUID(), type);
+ }
+
+ // Eindeutiger Dimension-Name pro Instanz: Minestom entscheidet anhand dieses Namens (nicht des
+ // DimensionTypes), ob beim setInstance das volle Respawn-Protokoll gefahren wird. Ohne den Reset
+ // rendert der 26.x-Client nach einem Wechsel zwischen Instanzen gleicher Dimension keine Chunks.
+ private MineNetInstance(UUID uuid, RegistryKey type) {
+ super(uuid, type, Key.key("minenet", "instance-" + uuid));
MinecraftServer.getInstanceManager().registerInstance(this);
- eventNode()
- .addListener(AddEntityToInstanceEvent.class, this::onEntityAdd)
- .addListener(RemoveEntityFromInstanceEvent.class, this::onEntityRemove);
+ this.eventNode()
+ .addListener(AddEntityToInstanceEvent.class, this::onEntityAdd)
+ .addListener(RemoveEntityFromInstanceEvent.class, this::onEntityRemove);
}
private void onEntityRemove(RemoveEntityFromInstanceEvent removeEntityFromInstanceEvent) {
@@ -38,6 +45,7 @@ public class MineNetInstance extends InstanceContainer {
/**
* Called when Player joins this instance
+ *
* @param p player who is joining
* @return setCanceled
*/
@@ -47,18 +55,15 @@ public class MineNetInstance extends InstanceContainer {
/**
* Called when Player leaves this instance
+ *
* @param p player who is leaving
*/
protected void onPlayerLeave(Player p) {
}
- /**
- *
- * @param target
- */
public void destroy(Instance target) {
- getPlayers().forEach(player -> {
+ this.getPlayers().forEach(player -> {
if(target != null)
player.setInstance(target);
else
@@ -66,9 +71,9 @@ public class MineNetInstance extends InstanceContainer {
});
MinecraftServer.getSchedulerManager().scheduleTask(
- () -> MinecraftServer.getInstanceManager().unregisterInstance(this),
- TaskSchedule.seconds(10),
- TaskSchedule.stop()
+ () -> MinecraftServer.getInstanceManager().unregisterInstance(this),
+ TaskSchedule.seconds(10),
+ TaskSchedule.stop()
);
}
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
index 9133eb8..eb62945 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
@@ -1,14 +1,14 @@
package eu.mhsl.minenet.minigames.instance.game;
import eu.mhsl.minenet.minigames.instance.MineNetInstance;
+import eu.mhsl.minenet.minigames.instance.Spawnable;
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
+import eu.mhsl.minenet.minigames.instance.room.Room;
import eu.mhsl.minenet.minigames.message.Icon;
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
import eu.mhsl.minenet.minigames.score.Score;
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
-import eu.mhsl.minenet.minigames.instance.Spawnable;
-import eu.mhsl.minenet.minigames.instance.room.Room;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player;
@@ -16,7 +16,7 @@ import net.minestom.server.event.item.ItemDropEvent;
import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.minestom.server.event.player.PlayerBlockPlaceEvent;
import net.minestom.server.event.player.PlayerMoveEvent;
-import net.minestom.server.registry.DynamicRegistry;
+import net.minestom.server.registry.RegistryKey;
import net.minestom.server.timer.ExecutionType;
import net.minestom.server.timer.TaskSchedule;
import net.minestom.server.world.DimensionType;
@@ -28,64 +28,56 @@ import java.util.concurrent.CompletableFuture;
import java.util.logging.Logger;
public abstract class Game extends MineNetInstance implements Spawnable {
-
+ protected final Random rnd = new Random();
+ protected final Logger logger;
protected Room parentRoom;
protected boolean isRunning = false;
protected boolean isBeforeBeginning = true;
- protected final Random rnd = new Random(); //TODO better way than ths?
-
- protected final Logger logger;
-
- public Game(DynamicRegistry.Key dimensionType) {
+ public Game(RegistryKey dimensionType) {
super(dimensionType);
MinecraftServer.getInstanceManager().registerInstance(this);
- logger = Logger.getLogger("Game:" + getUuid());
+ this.logger = Logger.getLogger("Game:" + this.getUuid());
- eventNode()
+ this.eventNode()
.addListener(PlayerMoveEvent.class, this::onPlayerMove)
.addListener(PlayerBlockBreakEvent.class, this::onBlockBreak)
.addListener(PlayerBlockPlaceEvent.class, this::onBlockPlace)
.addListener(ItemDropEvent.class, this::onItemDrop);
}
+ public static void initialize(GameFactory factory, List