diff --git a/.metadata/.log b/.metadata/.log index 6213a02..0914ac8 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -540,3 +540,16 @@ Binding(CTRL+SHIFT+T, ,,true),null), org.eclipse.ui.defaultAcceleratorConfiguration, org.eclipse.ui.contexts.window,,,system) + +!ENTRY org.eclipse.debug.core 4 125 2026-03-01 22:04:05.326 +!MESSAGE Error logged from Debug Core: +!STACK 0 +java.io.IOException: Stream closed + at java.base/java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:188) + at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:343) + at java.base/java.io.BufferedInputStream.implRead(BufferedInputStream.java:420) + at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:405) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:95) + at org.eclipse.debug.internal.core.OutputStreamMonitor.internalRead(OutputStreamMonitor.java:235) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:211) + at java.base/java.lang.Thread.run(Thread.java:1583) diff --git a/.metadata/.plugins/org.eclipse.buildship.core/project-preferences/xxxthegame b/.metadata/.plugins/org.eclipse.buildship.core/project-preferences/xxxthegame index f28d608..3bd2157 100644 --- a/.metadata/.plugins/org.eclipse.buildship.core/project-preferences/xxxthegame +++ b/.metadata/.plugins/org.eclipse.buildship.core/project-preferences/xxxthegame @@ -1,5 +1,5 @@ # -#Sun Mar 01 19:35:38 CET 2026 +#Sun Mar 01 22:07:34 CET 2026 buildDir=build buildScriptPath=build.gradle.kts classpath=\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\t\n\t\n\n\n diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.markers.snap deleted file mode 100644 index 4eb4941..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.markers.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.syncinfo.snap deleted file mode 100644 index 4eb4941..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.syncinfo.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers b/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers index 6502027..458e800 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers and b/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers.snap deleted file mode 100644 index 2592bda..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.markers.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.syncinfo.snap deleted file mode 100644 index 4eb4941..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/xxxthegame/.syncinfo.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index index f65c9cf..ba04efe 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index and b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap deleted file mode 100644 index d5d102d..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree b/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree deleted file mode 100644 index 82b0abb..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index 0da9aed..b65008c 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/2.snap b/.metadata/.plugins/org.eclipse.core.resources/2.snap deleted file mode 100644 index 25eb5a5..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/2.snap and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 30276dd..556977e 100644 --- a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,8 +1,8 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - + @@ -11,9 +11,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation persp.actionSet:org.eclipse.ui.cheatsheets.actionSet @@ -81,2676 +81,2662 @@ persp.editorOnboardingCommand:Show Key Assist$$$Shift+Ctrl+L persp.editorOnboardingCommand:New$$$Ctrl+N persp.editorOnboardingCommand:Open Type$$$Shift+Ctrl+T - - - + + + org.eclipse.e4.primaryNavigationStack - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - - + + View categoryTag:Git - - - - + + + + org.eclipse.e4.secondaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:Java - + View categoryTag:Ant - + org.eclipse.e4.secondaryDataStack Gradle Oomph - + active + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Terminal - + View categoryTag:Gradle - + View categoryTag:Gradle - - View - categoryTag:Oomph - NoRestore - - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + EditorStack org.eclipse.e4.primaryDataStack - active - + Editor removeOnHide org.eclipse.jdt.ui.CompilationUnitEditor - active - + Editor removeOnHide org.eclipse.jdt.ui.CompilationUnitEditor - + Editor removeOnHide org.eclipse.jdt.ui.CompilationUnitEditor - + Editor removeOnHide org.eclipse.jdt.ui.CompilationUnitEditor - + Editor removeOnHide org.eclipse.jdt.ui.CompilationUnitEditor + + + Editor + removeOnHide + org.eclipse.jdt.ui.CompilationUnitEditor + - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + active + activeOnClose + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:Terminal - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Java - + View categoryTag:Ant - + View categoryTag:Gradle - + ViewMenu menuContribution:menu - + - + View categoryTag:Gradle - + ViewMenu menuContribution:menu - + - - - - - View - categoryTag:Oomph - NoRestore - - ViewMenu - menuContribution:menu - - - - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - - + + - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - - Draggable - - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - - + + TrimStack Draggable - + TrimStack Draggable - - + + TrimStack Draggable - + TrimStack Draggable - + TrimStack Draggable - - - - - - - - - - - - - + + + + + + + + + + + + + platform:gtk - - - - + + + + platform:gtk - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + - - + + - - - - - - - - - + + + + + + + + + - - + + - - - + + + - - - - - + + + + + - - + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + platform:gtk - - - - - + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - + + - - - - + + + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:Help - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Language Servers - + View categoryTag:Language Servers - + View categoryTag:Language Servers - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:Oomph NoRestore - + View categoryTag:Plug-in Development - + View categoryTag:General - + View categoryTag:Version Control (Team) - + View categoryTag:Version Control (Team) - + View categoryTag:Terminal - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Docker - + View categoryTag:Docker - + View categoryTag:Docker - + View categoryTag:Docker - + View categoryTag:Other - + View categoryTag:Other - + View categoryTag:Other - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1865797976.index b/.metadata/.plugins/org.eclipse.jdt.core/1865797976.index index 8494320..4d3bf08 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/1865797976.index and b/.metadata/.plugins/org.eclipse.jdt.core/1865797976.index differ diff --git a/.metadata/.plugins/org.eclipse.jdt.core/9341915.index b/.metadata/.plugins/org.eclipse.jdt.core/9341915.index index 86141c1..73bb63e 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/9341915.index and b/.metadata/.plugins/org.eclipse.jdt.core/9341915.index differ diff --git a/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache b/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache index 81b0210..90ff561 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache and b/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache differ diff --git a/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache index c5c2d04..7712708 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache and b/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml b/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml index 213ebd1..172f389 100644 --- a/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml +++ b/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml @@ -1,4 +1,5 @@ - + + diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml index 9e390f5..665eb58 100644 --- a/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml +++ b/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml @@ -1,2 +1,4 @@ - + + + diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml index e20e400..bbb970b 100644 --- a/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml @@ -1,11 +1,12 @@
+
- - + +
@@ -25,4 +26,8 @@
+
+ + +
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml index 83d3e3f..9c9b913 100644 --- a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -8,4 +8,11 @@
+
+ + + + + +
diff --git a/xxxthegame/src/main/java/de/oaa/xxx/config/ThemeController.java b/xxxthegame/src/main/java/de/oaa/xxx/config/ThemeController.java new file mode 100644 index 0000000..03f3275 --- /dev/null +++ b/xxxthegame/src/main/java/de/oaa/xxx/config/ThemeController.java @@ -0,0 +1,49 @@ +package de.oaa.xxx.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Serves /css/variables.css dynamically from application.properties theme settings. + * All HTML pages load this first, so changing app.theme.* immediately updates the whole UI. + */ +@RestController +public class ThemeController { + + @Value("${app.theme.color-bg:#1a1a2e}") + private String colorBg; + + @Value("${app.theme.color-card:#16213e}") + private String colorCard; + + @Value("${app.theme.color-primary:#e94560}") + private String colorPrimary; + + @Value("${app.theme.color-secondary:#0f3460}") + private String colorSecondary; + + @Value("${app.theme.color-text:#eeeeee}") + private String colorText; + + @Value("${app.theme.color-muted:#888888}") + private String colorMuted; + + @Value("${app.theme.color-success:#2ecc71}") + private String colorSuccess; + + @GetMapping(value = "/css/variables.css", produces = "text/css") + public String variables() { + return """ + :root { + --color-bg: %s; + --color-card: %s; + --color-primary: %s; + --color-secondary: %s; + --color-text: %s; + --color-muted: %s; + --color-success: %s; + } + """.formatted(colorBg, colorCard, colorPrimary, colorSecondary, colorText, colorMuted, colorSuccess); + } +} diff --git a/xxxthegame/src/main/java/de/oaa/xxx/mail/MailTemplateService.java b/xxxthegame/src/main/java/de/oaa/xxx/mail/MailTemplateService.java new file mode 100644 index 0000000..891ca8a --- /dev/null +++ b/xxxthegame/src/main/java/de/oaa/xxx/mail/MailTemplateService.java @@ -0,0 +1,87 @@ +package de.oaa.xxx.mail; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * Generates HTML email bodies with inline styles derived from app.theme.* properties. + * Changing theme colors in application.properties automatically updates email appearance. + * (Email clients don't support external CSS or CSS variables, so styles must be inlined.) + */ +@Service +public class MailTemplateService { + + @Value("${app.theme.color-bg:#1a1a2e}") + private String colorBg; + + @Value("${app.theme.color-card:#16213e}") + private String colorCard; + + @Value("${app.theme.color-primary:#e94560}") + private String colorPrimary; + + @Value("${app.theme.color-secondary:#0f3460}") + private String colorSecondary; + + @Value("${app.theme.color-text:#eeeeee}") + private String colorText; + + @Value("${app.theme.color-muted:#888888}") + private String colorMuted; + + @Value("${app.theme.color-success:#2ecc71}") + private String colorSuccess; + + public String buildActivationMail(String name, String activationLink, String activatePageUrl, String uuid) { + return """ + + + +
+ +

XXX The Game

+ +

Moin %s,

+

Vielen Dank für deine Anmeldung!

+

Klick auf den Button, um deine E-Mail-Adresse zu bestätigen:

+ +
+ + E-Mail bestätigen + +
+ +
+ +

+ Falls der Button nicht funktioniert, öffne + %s + und gib folgenden Code ein: +

+

+ %s +

+ +

Viel Spaß beim Spiel!

+
+ + + """.formatted( + colorBg, colorText, + colorCard, colorSecondary, + colorPrimary, + colorText, name, + colorText, + colorText, + activationLink, colorPrimary, + colorSecondary, + colorMuted, activatePageUrl, colorPrimary, activatePageUrl, + colorSecondary, colorText, + uuid, + colorMuted + ); + } +} diff --git a/xxxthegame/src/main/java/de/oaa/xxx/registration/RegistrationController.java b/xxxthegame/src/main/java/de/oaa/xxx/registration/RegistrationController.java index 9e92de8..87fbcc1 100644 --- a/xxxthegame/src/main/java/de/oaa/xxx/registration/RegistrationController.java +++ b/xxxthegame/src/main/java/de/oaa/xxx/registration/RegistrationController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; import de.oaa.xxx.mail.Email; import de.oaa.xxx.mail.MailService; +import de.oaa.xxx.mail.MailTemplateService; import de.oaa.xxx.user.UserRepository; @RestController @@ -25,12 +26,14 @@ public class RegistrationController { private final RegistrationRepository registrationRepository; private final UserRepository userRepository; private final MailService mailService; + private final MailTemplateService mailTemplateService; public RegistrationController(RegistrationRepository registrationRepository, UserRepository userRepository, - MailService mailService) { + MailService mailService, MailTemplateService mailTemplateService) { this.registrationRepository = registrationRepository; this.userRepository = userRepository; this.mailService = mailService; + this.mailTemplateService = mailTemplateService; } @PostMapping @@ -43,12 +46,14 @@ public class RegistrationController { } RegistrationEntity entity = RegistrationEntity.create(registration); registrationRepository.save(entity); - registration.setId(entity.getRegistrationId()); Email email = new Email(); email.setTitel("Bitte bestätige deine E-Mail Adresse"); email.setEmailAdresse(registration.getEmail()); - email.setText(getMailText(registration)); + String uuid = entity.getRegistrationId().toString(); + String activationLink = baseUrl + "/activation/" + uuid; + String activatePageUrl = baseUrl + "/activate.html"; + email.setText(mailTemplateService.buildActivationMail(registration.getName(), activationLink, activatePageUrl, uuid)); if (!mailService.send(email)) { registrationRepository.delete(entity); @@ -57,20 +62,5 @@ public class RegistrationController { return ResponseEntity.status(202).build(); } - private String getMailText(Registration registration) { - String uuid = registration.getId().toString(); - return """ - -

Moin %s

-

Vielen Dank für deine Anmeldung bei XXX-BDSM Game!

-

Klicke hier um deine E-Mail-Adresse zu bestätigen.

-
-

- Falls der Link nicht funktioniert, kannst du deine E-Mail-Adresse auch manuell bestätigen.
- Öffne dazu %s/activate.html und gib folgenden Code ein: -

-

%s

-

Viel Spaß beim Spiel!

- """.formatted(registration.getName(), baseUrl, uuid, baseUrl, baseUrl, uuid); - } + } diff --git a/xxxthegame/src/main/resources/application.properties b/xxxthegame/src/main/resources/application.properties index 6cbc71c..721341d 100644 --- a/xxxthegame/src/main/resources/application.properties +++ b/xxxthegame/src/main/resources/application.properties @@ -31,6 +31,18 @@ jwt.keystore.path=classpath:xxx.jks jwt.keystore.password=${JWT_KEYSTORE_PASSWORD:XUR!Rv&f$j3UsqD&} jwt.keystore.alias=xxx +# App +app.base-url=http://localhost:8080 + +# Theme – alle Farben hier ändern, Email-Style passt sich automatisch an +app.theme.color-bg=#1a1a2e +app.theme.color-card=#16213e +app.theme.color-primary=#e94560 +app.theme.color-secondary=#0f3460 +app.theme.color-text=#eeeeee +app.theme.color-muted=#888888 +app.theme.color-success=#2ecc71 + # Server server.port=8080 server.servlet.context-path=/ diff --git a/xxxthegame/src/main/resources/static/activate.html b/xxxthegame/src/main/resources/static/activate.html index 767671d..3ba4e59 100644 --- a/xxxthegame/src/main/resources/static/activate.html +++ b/xxxthegame/src/main/resources/static/activate.html @@ -4,6 +4,7 @@ XXX The Game – Aktivierung + diff --git a/xxxthegame/src/main/resources/static/css/style.css b/xxxthegame/src/main/resources/static/css/style.css index 718da63..37cd0b6 100644 --- a/xxxthegame/src/main/resources/static/css/style.css +++ b/xxxthegame/src/main/resources/static/css/style.css @@ -12,25 +12,25 @@ body { flex-direction: column; align-items: center; justify-content: center; - background: #1a1a2e; + background: var(--color-bg); font-family: 'Segoe UI', sans-serif; - color: #eee; + color: var(--color-text); gap: 2rem; } h1 { - color: #e94560; + color: var(--color-primary); } p { - color: #888; + color: var(--color-muted); font-size: 1rem; } /* ── Card ── */ .card { - background: #16213e; - border: 1px solid #0f3460; + background: var(--color-card); + border: 1px solid var(--color-secondary); border-radius: 12px; padding: 2.5rem; width: 100%; @@ -48,7 +48,7 @@ p { .subtitle { text-align: center; font-size: 0.85rem; - color: #888; + color: var(--color-muted); margin-bottom: 2rem; } @@ -64,24 +64,24 @@ label { input { width: 100%; padding: 0.65rem 0.9rem; - border: 1px solid #0f3460; + border: 1px solid var(--color-secondary); border-radius: 6px; - background: #0f3460; - color: #eee; + background: var(--color-secondary); + color: var(--color-text); font-size: 1rem; outline: none; transition: border-color 0.2s; } input:focus { - border-color: #e94560; + border-color: var(--color-primary); } /* ── Buttons ── */ button, .btn { display: inline-block; padding: 0.75rem 2.5rem; - background: #e94560; + background: var(--color-primary); color: #fff; border: none; border-radius: 6px; @@ -108,7 +108,7 @@ button.full-width { } button.secondary { - background: #0f3460; + background: var(--color-secondary); font-weight: normal; padding: 0.3rem 0.7rem; font-size: 0.75rem; @@ -132,14 +132,14 @@ button.secondary:hover { .message.error { background: #3d0f1a; - border: 1px solid #e94560; - color: #e94560; + border: 1px solid var(--color-primary); + color: var(--color-primary); } .message.success { background: #0f3d1a; - border: 1px solid #2ecc71; - color: #2ecc71; + border: 1px solid var(--color-success); + color: var(--color-success); } /* ── Token box ── */ @@ -147,7 +147,7 @@ button.secondary:hover { margin-top: 1.25rem; padding: 0.65rem 0.9rem; background: #0f1e3d; - border: 1px solid #0f3460; + border: 1px solid var(--color-secondary); border-radius: 6px; font-size: 0.75rem; color: #aaa; diff --git a/xxxthegame/src/main/resources/static/index.html b/xxxthegame/src/main/resources/static/index.html index cf0f9e2..efc090f 100644 --- a/xxxthegame/src/main/resources/static/index.html +++ b/xxxthegame/src/main/resources/static/index.html @@ -4,6 +4,7 @@ XXX The Game + diff --git a/xxxthegame/src/main/resources/static/login.html b/xxxthegame/src/main/resources/static/login.html index 18ec088..35c68c8 100644 --- a/xxxthegame/src/main/resources/static/login.html +++ b/xxxthegame/src/main/resources/static/login.html @@ -4,6 +4,7 @@ XXX The Game – Login + diff --git a/xxxthegame/src/main/resources/static/registration.html b/xxxthegame/src/main/resources/static/registration.html index e161de7..20be204 100644 --- a/xxxthegame/src/main/resources/static/registration.html +++ b/xxxthegame/src/main/resources/static/registration.html @@ -4,6 +4,7 @@ XXX The Game – Registrierung + diff --git a/xxxthegame/src/main/resources/static/userhome.html b/xxxthegame/src/main/resources/static/userhome.html index 97ab5f9..9e9515a 100644 --- a/xxxthegame/src/main/resources/static/userhome.html +++ b/xxxthegame/src/main/resources/static/userhome.html @@ -4,6 +4,7 @@ XXX The Game +