···11+#
22+# https://help.github.com/articles/dealing-with-line-endings/
33+#
44+# Linux start script should use lf
55+/gradlew text eol=lf
66+77+# These are Windows script files and should use crlf
88+*.bat text eol=crlf
99+1010+# Binary files should be left untouched
1111+*.jar binary
1212+
···11+MIT License
22+33+Copyright (c) 2026 kokiriglade
44+55+Permission is hereby granted, free of charge, to any person obtaining a copy
66+of this software and associated documentation files (the "Software"), to deal
77+in the Software without restriction, including without limitation the rights
88+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
99+copies of the Software, and to permit persons to whom the Software is
1010+furnished to do so, subject to the following conditions:
1111+1212+The above copyright notice and this permission notice shall be included in all
1313+copies or substantial portions of the Software.
1414+1515+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1616+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1717+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1818+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1919+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121+SOFTWARE.
+7
README.md
···11+# mining
22+33+A mining stat tracker, for fabric 26.1.2.
44+55+## Disclaimer
66+77+This is my first fabric mod, so some stuff might be a bit crap.
···11+@rem
22+@rem Copyright 2015 the original author or authors.
33+@rem
44+@rem Licensed under the Apache License, Version 2.0 (the "License");
55+@rem you may not use this file except in compliance with the License.
66+@rem You may obtain a copy of the License at
77+@rem
88+@rem https://www.apache.org/licenses/LICENSE-2.0
99+@rem
1010+@rem Unless required by applicable law or agreed to in writing, software
1111+@rem distributed under the License is distributed on an "AS IS" BASIS,
1212+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313+@rem See the License for the specific language governing permissions and
1414+@rem limitations under the License.
1515+@rem
1616+@rem SPDX-License-Identifier: Apache-2.0
1717+@rem
1818+1919+@if "%DEBUG%"=="" @echo off
2020+@rem ##########################################################################
2121+@rem
2222+@rem Gradle startup script for Windows
2323+@rem
2424+@rem ##########################################################################
2525+2626+@rem Set local scope for the variables with windows NT shell
2727+if "%OS%"=="Windows_NT" setlocal
2828+2929+set DIRNAME=%~dp0
3030+if "%DIRNAME%"=="" set DIRNAME=.
3131+@rem This is normally unused
3232+set APP_BASE_NAME=%~n0
3333+set APP_HOME=%DIRNAME%
3434+3535+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
3636+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
3737+3838+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
3939+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
4040+4141+@rem Find java.exe
4242+if defined JAVA_HOME goto findJavaFromJavaHome
4343+4444+set JAVA_EXE=java.exe
4545+%JAVA_EXE% -version >NUL 2>&1
4646+if %ERRORLEVEL% equ 0 goto execute
4747+4848+echo. 1>&2
4949+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
5050+echo. 1>&2
5151+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
5252+echo location of your Java installation. 1>&2
5353+5454+goto fail
5555+5656+:findJavaFromJavaHome
5757+set JAVA_HOME=%JAVA_HOME:"=%
5858+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5959+6060+if exist "%JAVA_EXE%" goto execute
6161+6262+echo. 1>&2
6363+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
6464+echo. 1>&2
6565+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
6666+echo location of your Java installation. 1>&2
6767+6868+goto fail
6969+7070+:execute
7171+@rem Setup the command line
7272+7373+7474+7575+@rem Execute Gradle
7676+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
7777+7878+:end
7979+@rem End local scope for the variables with windows NT shell
8080+if %ERRORLEVEL% equ 0 goto mainEnd
8181+8282+:fail
8383+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
8484+rem the _cmd.exe /c_ return code!
8585+set EXIT_CODE=%ERRORLEVEL%
8686+if %EXIT_CODE% equ 0 set EXIT_CODE=1
8787+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
8888+exit /b %EXIT_CODE%
8989+9090+:mainEnd
9191+if "%OS%"=="Windows_NT" endlocal
9292+9393+:omega
···11+package de.kokirigla.mining.session;
22+33+import java.util.Map;
44+55+public record OreStats(
66+ String oreType,
77+ String displayName,
88+ int count,
99+ int minY,
1010+ int maxY,
1111+ double avgY,
1212+ int modeY,
1313+ Map<Integer, Integer> yDistribution
1414+) {
1515+ /**
1616+ * Y level with the highest frequency across all records for this ore type.
1717+ *
1818+ * @param dist the Y level frequency distribution
1919+ * @return the most frequent Y level
2020+ * @since 1.0.0
2121+ */
2222+ public static int computeMode(final Map<Integer, Integer> dist) {
2323+ return dist.entrySet().stream()
2424+ .max(Map.Entry.comparingByValue())
2525+ .map(Map.Entry::getKey)
2626+ .orElse(0);
2727+ }
2828+}