From b1fbca78bb5d7a8b00598a55f74d619aeee91bdd Mon Sep 17 00:00:00 2001 From: unurled Date: Sat, 25 Mar 2023 15:20:07 +0100 Subject: [PATCH] some starting point and ci --- .gitignore | 3 +- .woodpecker.yml | 51 ++++ LICENSE | 2 + build.gradle | 40 ++- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 7 +- gradlew | 244 +++++++++++++++++ gradlew.bat | 92 +++++++ src/main/generated/LymelConfig.java | 48 ++++ src/main/java/me/unurled/lymel/Lymel.java | 62 ++++- .../me/unurled/lymel/client/LymelClient.java | 10 +- .../components/entity/PlayerComponents.java | 33 +++ .../components/entity/StatComponent.java | 14 + .../components/entity/StatisicsComponent.java | 62 +++++ .../player/EquipementChangeCallback.java | 28 ++ .../events/player/EquipmentChangeHandler.java | 27 ++ .../events/player/JoinServerCallback.java | 28 ++ .../events/player/JoinServerHandler.java | 17 ++ .../events/player/LeaveServerCallback.java | 19 ++ .../events/player/LeaveServerHandler.java | 23 ++ .../components/items/weapon/CombatKnife.java | 9 + .../java/me/unurled/lymel/config/Config.java | 32 +++ .../me/unurled/lymel/config/QuestConfig.java | 4 + .../me/unurled/lymel/managers/ModEvent.java | 18 ++ .../me/unurled/lymel/managers/ModItems.java | 31 +++ .../Player/PlayerChangeEquipmentMixin.java | 18 ++ .../server/Player/PlayerManagerMixin.java | 24 ++ .../me/unurled/lymel/server/LymelServer.java | 16 ++ .../java/me/unurled/lymel/server/MongoDB.java | 83 ++++++ .../lymel/server/PlayerConfiguration.java | 77 ++++++ .../me/unurled/lymel/util/ConfigDataUtil.java | 52 ++++ .../me/unurled/lymel/util/EquipmentUtil.java | 86 ++++++ .../java/me/unurled/lymel/util/StatUtil.java | 12 + .../unurled/lymel/util/SubscriberHelpers.java | 249 ++++++++++++++++++ .../resources/assets/lymel/lang/en_us.json | 4 + src/main/resources/assets/lymel/logo.png | Bin 0 -> 85418 bytes .../lymel/models/item/combat_knife.json | 6 + .../assets/lymel/models/item/logo.json | 6 + .../lymel/textures/item/combatknife.png | Bin 0 -> 2507 bytes .../assets/lymel/textures/item/logo.png | Bin 0 -> 996 bytes src/main/resources/fabric.mod.json | 41 +++ src/main/resources/lymel.mixins.json | 15 ++ 43 files changed, 1580 insertions(+), 19 deletions(-) create mode 100644 .woodpecker.yml create mode 100644 LICENSE create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 src/main/generated/LymelConfig.java create mode 100644 src/main/java/me/unurled/lymel/components/entity/PlayerComponents.java create mode 100644 src/main/java/me/unurled/lymel/components/entity/StatComponent.java create mode 100644 src/main/java/me/unurled/lymel/components/entity/StatisicsComponent.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/EquipementChangeCallback.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/EquipmentChangeHandler.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/JoinServerCallback.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/JoinServerHandler.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/LeaveServerCallback.java create mode 100644 src/main/java/me/unurled/lymel/components/events/player/LeaveServerHandler.java create mode 100644 src/main/java/me/unurled/lymel/components/items/weapon/CombatKnife.java create mode 100644 src/main/java/me/unurled/lymel/config/Config.java create mode 100644 src/main/java/me/unurled/lymel/config/QuestConfig.java create mode 100644 src/main/java/me/unurled/lymel/managers/ModEvent.java create mode 100644 src/main/java/me/unurled/lymel/managers/ModItems.java create mode 100644 src/main/java/me/unurled/lymel/mixin/server/Player/PlayerChangeEquipmentMixin.java create mode 100644 src/main/java/me/unurled/lymel/mixin/server/Player/PlayerManagerMixin.java create mode 100644 src/main/java/me/unurled/lymel/server/LymelServer.java create mode 100644 src/main/java/me/unurled/lymel/server/MongoDB.java create mode 100644 src/main/java/me/unurled/lymel/server/PlayerConfiguration.java create mode 100644 src/main/java/me/unurled/lymel/util/ConfigDataUtil.java create mode 100644 src/main/java/me/unurled/lymel/util/EquipmentUtil.java create mode 100644 src/main/java/me/unurled/lymel/util/StatUtil.java create mode 100644 src/main/java/me/unurled/lymel/util/SubscriberHelpers.java create mode 100644 src/main/resources/assets/lymel/lang/en_us.json create mode 100644 src/main/resources/assets/lymel/logo.png create mode 100644 src/main/resources/assets/lymel/models/item/combat_knife.json create mode 100644 src/main/resources/assets/lymel/models/item/logo.json create mode 100644 src/main/resources/assets/lymel/textures/item/combatknife.png create mode 100644 src/main/resources/assets/lymel/textures/item/logo.png create mode 100644 src/main/resources/fabric.mod.json create mode 100644 src/main/resources/lymel.mixins.json diff --git a/.gitignore b/.gitignore index 3c37caf..d87b4ea 100644 --- a/.gitignore +++ b/.gitignore @@ -112,7 +112,8 @@ gradle-app.setting **/build/ # Common working directory -run/ +run-client/ +run-server/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..123ea6e --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,51 @@ +pipeline: + restore-cache: + image: bash + commands: + - mkdir -p /tmp/woodpecker/Elixium/Lymel + - ls -a /tmp/woodpecker/Elixium/Lymel + - ls -a + - cp -r /tmp/woodpecker/Elixium/Lymel/* $(pwd)/ + - ls -a + volumes: + - /tmp/woodpecker/Elixium/Lymel:/tmp/woodpecker/Elixium/Lymel + when: + event: push + build: + image: gradle:jdk17 + commands: + - ls -a + - chmox +x gradlew + - ./gradlew build --stacktrace + - ls -a + when: + event: push + gitea_release: + image: python:3.9 + secrets: + - api_key + commands: + - export PRERELEASE=true + - chmod +x git_release.py + - pip install giteapy + - python git_release.py --token "$API_KEY" --message "${DRONE_COMMIT_MESSAGE}" --prerelease $PRERELEASE --tag "${DRONE_TAG}" + when: + event: tag + + rebuild-cache-with-filesystem: + image: bash + commands: + - ls -a + - mkdir -p /tmp/woodpecker/Elixium/Lymel/build + - ls -a /tmp/woodpecker/Elixium/Lymel + - cp -f -R $(pwd)/build/classes /tmp/woodpecker/Elixium/Lymel/build/classes + - cp -f -R $(pwd)/build/generated /tmp/woodpecker/Elixium/Lymel/build/generated + - cp -f -R $(pwd)/build/resources /tmp/woodpecker/Elixium/Lymel/build/resources + - cp -f -R $(pwd)/build/tmp /tmp/woodpecker/Elixium/Lymel/build/tmp + - cp -f -R $(pwd)/.gradle /tmp/woodpecker/Elixium/Lymel + - ls -a + - ls -a /tmp/woodpecker/Elixium/Lymel + volumes: + - /tmp/woodpecker/Elixium/Lymel:/tmp/woodpecker/Elixium/Lymel + when: + event: push \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..86f153b --- /dev/null +++ b/LICENSE @@ -0,0 +1,2 @@ +Copyright (c) 2023 unurled +All rights reserved. diff --git a/build.gradle b/build.gradle index 44616a6..2d76296 100644 --- a/build.gradle +++ b/build.gradle @@ -3,26 +3,39 @@ plugins { id 'maven-publish' } +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 + +archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. + maven { url 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' } + maven { url "https://maven.terraformersmc.com/releases"} + maven { + name = 'Ladysnake Mods' + url = 'https://ladysnake.jfrog.io/artifactory/mods' + } } dependencies { - // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - } + modImplementation 'software.bernie.geckolib:geckolib-fabric-1.19.3:4.0.3' + implementation 'org.mongodb:mongodb-driver-reactivestreams:4.9.0' + modApi "com.terraformersmc:modmenu:${project.modmenu_version}" + + modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cardinal_component_version}" + // Adds a dependency on a specific module + modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-entity:${project.cardinal_component_version}" + // Includes Cardinal Components API as a Jar-in-Jar dependency (optional) + include "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cardinal_component_version}" + include "dev.onyxstudios.cardinal-components-api:cardinal-components-entity:${project.cardinal_component_version}" +} processResources { inputs.property "version", project.version @@ -33,24 +46,23 @@ processResources { } } -def targetJavaVersion = 17 tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html // If Javadoc is generated, this must be specified in that task too. it.options.encoding = "UTF-8" - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - it.options.release = targetJavaVersion + if (Integer.parseInt(targetCompatibility as String) >= 10 || JavaVersion.current().isJava10Compatible()) { + it.options.release = Integer.parseInt(targetCompatibility as String) } } java { - def javaVersion = JavaVersion.toVersion(targetJavaVersion) + def javaVersion = JavaVersion.toVersion(targetCompatibility) if (JavaVersion.current() < javaVersion) { - toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + toolchain.languageVersion = JavaLanguageVersion.of(targetCompatibility as String) } - archivesBaseName = project.archives_base_name + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // if it is present. // If you remove this line, sources will not be generated. diff --git a/gradle.properties b/gradle.properties index a450e11..1c5fc2e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://modmuss50.me/fabric.html @@ -15,3 +15,7 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # check this on https://modmuss50.me/fabric.html fabric_version=0.76.0+1.19.4 + +# owo lib version https://maven.wispforest.io/io/wispforest/owo-lib/ +modmenu_version = 6.1.0-rc.4 +cardinal_component_version = 5.1.0 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..ccebba7710deaf9f98673a68957ea02138b60d0a GIT binary patch literal 61608 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9b0dc1a..bdc9a83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1,6 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..79a61d4 --- /dev/null +++ b/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 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. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# 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" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +: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 %* + +: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 diff --git a/src/main/generated/LymelConfig.java b/src/main/generated/LymelConfig.java new file mode 100644 index 0000000..532832a --- /dev/null +++ b/src/main/generated/LymelConfig.java @@ -0,0 +1,48 @@ +package me.unurled.lymel.config; + +import blue.endless.jankson.Jankson; +import io.wispforest.owo.config.ConfigWrapper; +import io.wispforest.owo.config.Option; +import io.wispforest.owo.util.Observable; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +public class LymelConfig extends ConfigWrapper { + + private final Option useDB = this.optionForKey(new Option.Key("useDB")); + + private LymelConfig() { + super(me.unurled.lymel.config.ConfigModel.class); + } + + private LymelConfig(Consumer janksonBuilder) { + super(me.unurled.lymel.config.ConfigModel.class, janksonBuilder); + } + + public static LymelConfig createAndLoad() { + var wrapper = new LymelConfig(); + wrapper.load(); + return wrapper; + } + + public static LymelConfig createAndLoad(Consumer janksonBuilder) { + var wrapper = new LymelConfig(janksonBuilder); + wrapper.load(); + return wrapper; + } + + public boolean useDB() { + return useDB.value(); + } + + public void useDB(boolean value) { + useDB.set(value); + } + + + + +} + diff --git a/src/main/java/me/unurled/lymel/Lymel.java b/src/main/java/me/unurled/lymel/Lymel.java index 5f0ab12..6a052a4 100644 --- a/src/main/java/me/unurled/lymel/Lymel.java +++ b/src/main/java/me/unurled/lymel/Lymel.java @@ -1,2 +1,62 @@ -package PACKAGE_NAME;public class Lymel { +package me.unurled.lymel; + +import me.unurled.lymel.config.Config; +import me.unurled.lymel.managers.ModEvent; +import me.unurled.lymel.managers.ModItems; +import me.unurled.lymel.server.LymelServer; +import me.unurled.lymel.util.ConfigDataUtil; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.loader.api.FabricLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import software.bernie.geckolib.GeckoLib; + +import java.nio.file.Path; + +public class Lymel implements ModInitializer { + + public static final String MODID = "lymel"; + public static Lymel INSTANCE; + + public static final Logger LOGGER = LoggerFactory.getLogger(MODID); + + private Config config = new Config(); + + private LymelServer server; + + ModEvent modEvent; + ModItems modItems; + + @Override + public void onInitialize() { + INSTANCE = this; + GeckoLib.initialize(); + loadConfig(); + register(); + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { + server = new LymelServer(); + server.register(config); + } + LOGGER.info("Hallo from Lymel !"); + } + + private void loadConfig() { + Path configPath = FabricLoader.getInstance().getConfigDir().resolve("Lymel/lymel.json"); + config = ConfigDataUtil.loadConfigData(Config.class, configPath); + } + + private void saveConfig() { + Path configPath = FabricLoader.getInstance().getConfigDir().resolve("Lymel/lymel.json"); + ConfigDataUtil.saveConfigData(Config.class, configPath.toFile(), config); + } + + private void register() { + modEvent = new ModEvent(); + modItems = new ModItems(); + } + + public LymelServer getServer() { + return server; + } } diff --git a/src/main/java/me/unurled/lymel/client/LymelClient.java b/src/main/java/me/unurled/lymel/client/LymelClient.java index c92a9ae..8a69496 100644 --- a/src/main/java/me/unurled/lymel/client/LymelClient.java +++ b/src/main/java/me/unurled/lymel/client/LymelClient.java @@ -1,2 +1,10 @@ -public class LymelClient { +package me.unurled.lymel.client; + +import net.fabricmc.api.ClientModInitializer; + +@net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) +public class LymelClient implements ClientModInitializer { + @Override + public void onInitializeClient() { + } } diff --git a/src/main/java/me/unurled/lymel/components/entity/PlayerComponents.java b/src/main/java/me/unurled/lymel/components/entity/PlayerComponents.java new file mode 100644 index 0000000..c8089d3 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/entity/PlayerComponents.java @@ -0,0 +1,33 @@ +package me.unurled.lymel.components.entity; + +import dev.onyxstudios.cca.api.v3.component.ComponentKey; +import dev.onyxstudios.cca.api.v3.component.ComponentRegistryV3; +import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry; +import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer; +import dev.onyxstudios.cca.api.v3.entity.RespawnCopyStrategy; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; + +public class PlayerComponents implements EntityComponentInitializer { + + public static final ComponentKey STATISTICS = + ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("lymel:stats"), StatComponent.class); + @Override + public void registerEntityComponentFactories(EntityComponentFactoryRegistry registry) { + registry.registerForPlayers(STATISTICS, StatisicsComponent::new, RespawnCopyStrategy.ALWAYS_COPY); + } + + public static void speed(PlayerEntity e) { + float speed = STATISTICS.get(e).getSpeed(); + e.getAbilities().setWalkSpeed(speed); + e.getAbilities().setFlySpeed(speed); + } + + public static void setEverything(PlayerEntity e, float speed) { + STATISTICS.get(e).setSpeed(speed); + } + + public static void setDefault(PlayerEntity player) { + STATISTICS.get(player).setSpeed(1.0f); + } +} diff --git a/src/main/java/me/unurled/lymel/components/entity/StatComponent.java b/src/main/java/me/unurled/lymel/components/entity/StatComponent.java new file mode 100644 index 0000000..471ccdc --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/entity/StatComponent.java @@ -0,0 +1,14 @@ +package me.unurled.lymel.components.entity; + +import dev.onyxstudios.cca.api.v3.component.ComponentV3; +import net.minecraft.nbt.NbtCompound; + +public interface StatComponent extends ComponentV3 { + float getSpeed(); + + Object get(String key); + + void setSpeed(float speed); + + void set(String key, Object value); +} \ No newline at end of file diff --git a/src/main/java/me/unurled/lymel/components/entity/StatisicsComponent.java b/src/main/java/me/unurled/lymel/components/entity/StatisicsComponent.java new file mode 100644 index 0000000..08c012d --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/entity/StatisicsComponent.java @@ -0,0 +1,62 @@ +package me.unurled.lymel.components.entity; + +import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtCompound; + +public class StatisicsComponent implements StatComponent, AutoSyncedComponent { + + private float speed = 1.0f; + private final PlayerEntity provider; + + + public StatisicsComponent(PlayerEntity provider) { + this.provider = provider; + } + + @Override + public float getSpeed() { + return this.speed; + } + + /** + * @param key + * @return + */ + @Override + public Object get(String key) { + return switch (key) { + case "speed" -> getSpeed(); + default -> null; + }; + } + + @Override + public void setSpeed(float speed) { + this.speed = speed; + PlayerComponents.STATISTICS.sync(this.provider); + } + + /** + * @param key + * @param value + */ + @Override + public void set(String key, Object value) { + switch (key) { + case "speed" -> setSpeed((float) value); + }; + } + + @Override + public void readFromNbt(NbtCompound tag) { + this.speed = tag.getFloat("speed"); + } + + @Override + public void writeToNbt(NbtCompound tag) { + tag.putFloat("speed", this.speed); + } +} + diff --git a/src/main/java/me/unurled/lymel/components/events/player/EquipementChangeCallback.java b/src/main/java/me/unurled/lymel/components/events/player/EquipementChangeCallback.java new file mode 100644 index 0000000..fb49a10 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/EquipementChangeCallback.java @@ -0,0 +1,28 @@ +package me.unurled.lymel.components.events.player; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; + +/** + * Callback when player change his armor. + * Upon return : + * - SUCCESS cancels further processing and continues with normal armor change behavior + * - PASS falls back to further processing and defaults to SUCCESS if no other listeners are available + * - FAIL cancels further processing and does not change the armor. + */ +public interface EquipementChangeCallback { + + Event EVENT = EventFactory.createArrayBacked(EquipementChangeCallback.class, + (listeners) -> (player, slot, stack) -> { + for (EquipementChangeCallback listener : listeners) { + listener.changeEquipment(player, slot, stack); + } + return ActionResult.SUCCESS; + }); + + ActionResult changeEquipment(PlayerEntity player, EquipmentSlot slot, ItemStack stack); +} diff --git a/src/main/java/me/unurled/lymel/components/events/player/EquipmentChangeHandler.java b/src/main/java/me/unurled/lymel/components/events/player/EquipmentChangeHandler.java new file mode 100644 index 0000000..4a7e126 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/EquipmentChangeHandler.java @@ -0,0 +1,27 @@ +package me.unurled.lymel.components.events.player; + +import me.unurled.lymel.util.EquipmentUtil; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; + +public class EquipmentChangeHandler implements EquipementChangeCallback{ + + public static void init() { + EquipementChangeCallback.EVENT.register(new EquipmentChangeHandler()); + } + + @Override + public ActionResult changeEquipment(PlayerEntity player, EquipmentSlot slot, ItemStack stack) { + EquipmentUtil.updateStatuses(player, stack); + if (slot == EquipmentSlot.MAINHAND) { +// player.onEquipStack(slot, player.getInventory().main.set(player.getInventory().selectedSlot, stack), stack); + } else if (slot == EquipmentSlot.OFFHAND) { +// player.onEquipStack(slot, player.getInventory().offHand.set(0, stack), stack); + } else if (slot.getType() == EquipmentSlot.Type.ARMOR) { +// player.onEquipStack(slot, player.getInventory().armor.set(slot.getEntitySlotId(), stack), stack); + } + return ActionResult.PASS; + } +} diff --git a/src/main/java/me/unurled/lymel/components/events/player/JoinServerCallback.java b/src/main/java/me/unurled/lymel/components/events/player/JoinServerCallback.java new file mode 100644 index 0000000..6c32cd1 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/JoinServerCallback.java @@ -0,0 +1,28 @@ +package me.unurled.lymel.components.events.player; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.ClientConnection; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; + +/** + * Callback when a Player joins the server. + * Upon return : + * - + */ +public interface JoinServerCallback { + + Event EVENT = EventFactory.createArrayBacked(JoinServerCallback.class, + (listeners) -> (manager, connection, player) -> { + for (JoinServerCallback listener : listeners) { + listener.join(manager, connection, player); + } + return ActionResult.SUCCESS; + }); + + ActionResult join(PlayerManager manager, ClientConnection connection, ServerPlayerEntity player); + +} diff --git a/src/main/java/me/unurled/lymel/components/events/player/JoinServerHandler.java b/src/main/java/me/unurled/lymel/components/events/player/JoinServerHandler.java new file mode 100644 index 0000000..dcf5bc5 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/JoinServerHandler.java @@ -0,0 +1,17 @@ +package me.unurled.lymel.components.events.player; + +import net.minecraft.network.ClientConnection; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; + +public class JoinServerHandler implements JoinServerCallback { + public static void init() { + JoinServerCallback.EVENT.register(new JoinServerHandler()); + } + + @Override + public ActionResult join(PlayerManager manager, ClientConnection connection, ServerPlayerEntity player) { + return ActionResult.PASS; + } +} diff --git a/src/main/java/me/unurled/lymel/components/events/player/LeaveServerCallback.java b/src/main/java/me/unurled/lymel/components/events/player/LeaveServerCallback.java new file mode 100644 index 0000000..5132387 --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/LeaveServerCallback.java @@ -0,0 +1,19 @@ +package me.unurled.lymel.components.events.player; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; + +public interface LeaveServerCallback { + Event EVENT = EventFactory.createArrayBacked(LeaveServerCallback.class, + (listeners) -> (manager, player) -> { + for (LeaveServerCallback listener : listeners) { + listener.leave(manager, player); + } + return ActionResult.SUCCESS; + }); + + ActionResult leave(PlayerManager manager, ServerPlayerEntity player); +} diff --git a/src/main/java/me/unurled/lymel/components/events/player/LeaveServerHandler.java b/src/main/java/me/unurled/lymel/components/events/player/LeaveServerHandler.java new file mode 100644 index 0000000..c67e8ed --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/events/player/LeaveServerHandler.java @@ -0,0 +1,23 @@ +package me.unurled.lymel.components.events.player; + +import me.unurled.lymel.server.PlayerConfiguration; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; + +public class LeaveServerHandler implements LeaveServerCallback { + + public static void init() { + LeaveServerCallback.EVENT.register(new LeaveServerHandler()); + } + + /** + * @param player + * @return + */ + @Override + public ActionResult leave(PlayerManager manager, ServerPlayerEntity player) { + PlayerConfiguration.save(player); + return ActionResult.SUCCESS; + } +} diff --git a/src/main/java/me/unurled/lymel/components/items/weapon/CombatKnife.java b/src/main/java/me/unurled/lymel/components/items/weapon/CombatKnife.java new file mode 100644 index 0000000..d86df0e --- /dev/null +++ b/src/main/java/me/unurled/lymel/components/items/weapon/CombatKnife.java @@ -0,0 +1,9 @@ +package me.unurled.lymel.components.items.weapon; + +import net.minecraft.item.Item; + +public class CombatKnife extends Item { + public CombatKnife(Settings settings) { + super(settings); + } +} diff --git a/src/main/java/me/unurled/lymel/config/Config.java b/src/main/java/me/unurled/lymel/config/Config.java new file mode 100644 index 0000000..8cef94c --- /dev/null +++ b/src/main/java/me/unurled/lymel/config/Config.java @@ -0,0 +1,32 @@ +package me.unurled.lymel.config; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import me.unurled.lymel.Lymel; + +public class Config { + + @SerializedName("useDB") + @Expose + public boolean useDB = false; + + @SerializedName("DBuri") + @Expose + public String dbUri = "mongodb://localhost:27017"; + + public boolean isUseDB() { + return useDB; + } + + public void setUseDB(boolean useDB) { + this.useDB = useDB; + } + + public String getDbUri() { + return dbUri; + } + + public void setDbUri(String dbUri) { + this.dbUri = dbUri; + } +} diff --git a/src/main/java/me/unurled/lymel/config/QuestConfig.java b/src/main/java/me/unurled/lymel/config/QuestConfig.java new file mode 100644 index 0000000..d29264f --- /dev/null +++ b/src/main/java/me/unurled/lymel/config/QuestConfig.java @@ -0,0 +1,4 @@ +package me.unurled.lymel.config; + +public class QuestConfig { +} diff --git a/src/main/java/me/unurled/lymel/managers/ModEvent.java b/src/main/java/me/unurled/lymel/managers/ModEvent.java new file mode 100644 index 0000000..0196139 --- /dev/null +++ b/src/main/java/me/unurled/lymel/managers/ModEvent.java @@ -0,0 +1,18 @@ +package me.unurled.lymel.managers; + +import me.unurled.lymel.components.events.player.EquipmentChangeHandler; +import me.unurled.lymel.components.events.player.JoinServerHandler; +import me.unurled.lymel.components.events.player.LeaveServerHandler; + +public class ModEvent { + + public ModEvent() { + register(); + } + + public void register() { + EquipmentChangeHandler.init(); + JoinServerHandler.init(); + LeaveServerHandler.init(); + } +} diff --git a/src/main/java/me/unurled/lymel/managers/ModItems.java b/src/main/java/me/unurled/lymel/managers/ModItems.java new file mode 100644 index 0000000..9a663ee --- /dev/null +++ b/src/main/java/me/unurled/lymel/managers/ModItems.java @@ -0,0 +1,31 @@ +package me.unurled.lymel.managers; + +import me.unurled.lymel.Lymel; +import me.unurled.lymel.components.items.weapon.CombatKnife; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class ModItems { + private static final Item LOGO_ITEM = Registry.register(Registries.ITEM, new Identifier(Lymel.MODID, "logo"), + new Item(new FabricItemSettings())); + + private static final ItemGroup ITEM_GROUP = FabricItemGroup.builder(new Identifier(Lymel.MODID, "lymel")) + .icon(() -> new ItemStack(LOGO_ITEM)) + .build(); + + private static final CombatKnife COMBAT_KNIFE = Registry.register(Registries.ITEM, new Identifier(Lymel.MODID, "combat_knife"), + new CombatKnife(new FabricItemSettings().maxCount(1))); + + public ModItems() { + ItemGroupEvents.modifyEntriesEvent(ITEM_GROUP).register(content -> { + content.add(COMBAT_KNIFE); + }); + } +} diff --git a/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerChangeEquipmentMixin.java b/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerChangeEquipmentMixin.java new file mode 100644 index 0000000..142a57e --- /dev/null +++ b/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerChangeEquipmentMixin.java @@ -0,0 +1,18 @@ +package me.unurled.lymel.mixin.server.Player; + +import me.unurled.lymel.components.events.player.EquipementChangeCallback; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(PlayerEntity.class) +public class PlayerChangeEquipmentMixin { + @Inject(method = "equipStack", at = @At(value = "HEAD"), cancellable = true) + private void onEquipmentChange(EquipmentSlot slot, ItemStack stack, CallbackInfo ci) { + EquipementChangeCallback.EVENT.invoker().changeEquipment((PlayerEntity) (Object) this, slot, stack); + } +} diff --git a/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerManagerMixin.java b/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerManagerMixin.java new file mode 100644 index 0000000..f330bc9 --- /dev/null +++ b/src/main/java/me/unurled/lymel/mixin/server/Player/PlayerManagerMixin.java @@ -0,0 +1,24 @@ +package me.unurled.lymel.mixin.server.Player; + +import me.unurled.lymel.components.events.player.JoinServerCallback; +import me.unurled.lymel.components.events.player.LeaveServerCallback; +import net.minecraft.network.ClientConnection; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(PlayerManager.class) +public class PlayerManagerMixin { + @Inject(method = "onPlayerConnect", at = @At(value = "TAIL"), cancellable = true) + public void onJoin(ClientConnection connection, ServerPlayerEntity player, CallbackInfo ci) { + JoinServerCallback.EVENT.invoker().join((PlayerManager) (Object) this, connection, player); + } + + @Inject(method = "remove", at = @At(value = "HEAD")) + public void onLeave(ServerPlayerEntity player, CallbackInfo ci) { + LeaveServerCallback.EVENT.invoker().leave((PlayerManager) (Object) this, player); + } +} diff --git a/src/main/java/me/unurled/lymel/server/LymelServer.java b/src/main/java/me/unurled/lymel/server/LymelServer.java new file mode 100644 index 0000000..273467b --- /dev/null +++ b/src/main/java/me/unurled/lymel/server/LymelServer.java @@ -0,0 +1,16 @@ +package me.unurled.lymel.server; + +import me.unurled.lymel.config.Config; + +public class LymelServer { + + private MongoDB mongoDB; + + public void register(Config config) { + mongoDB = new MongoDB(config); + } + + public MongoDB getMongoDB() { + return mongoDB; + } +} diff --git a/src/main/java/me/unurled/lymel/server/MongoDB.java b/src/main/java/me/unurled/lymel/server/MongoDB.java new file mode 100644 index 0000000..7fda6f3 --- /dev/null +++ b/src/main/java/me/unurled/lymel/server/MongoDB.java @@ -0,0 +1,83 @@ +package me.unurled.lymel.server; + +import com.mongodb.reactivestreams.client.MongoClient; +import com.mongodb.reactivestreams.client.MongoClients; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.mongodb.reactivestreams.client.MongoDatabase; +import me.unurled.lymel.config.Config; +import me.unurled.lymel.util.SubscriberHelpers; +import org.bson.Document; + +import java.util.UUID; + +import static com.mongodb.client.model.Filters.eq; + +public class MongoDB { + + + private MongoClient mongoClient; + private MongoDatabase database; + + /** + * Documents in data is in the following style : + * { + * "_id": ObjectId('13513631848'), + * "uuid": "player's uuid", + * "name": "player's name", + * "inventory": "very long string of base64 encoded items" (see {@link me.unurled.lymel.util.EquipmentUtil}), + * "stats": { + * "speed" : 100, + * ... + * } + * } + */ + private MongoCollection data; + + public MongoDB(Config config) { + connect(config.getDbUri()); + } + + void connect(String uri) { + mongoClient = MongoClients.create(uri); + database = mongoClient.getDatabase("Lymel"); + data = database.getCollection("data"); + } + + Document getPlayerInfos(String name) { + SubscriberHelpers.OperationSubscriber op = new SubscriberHelpers.OperationSubscriber(); + data.find(eq("name", name)).first().subscribe(op); + op.await(); + return op.first(); + } + + Document getPlayerInfos(UUID uuid) { + SubscriberHelpers.OperationSubscriber op = new SubscriberHelpers.OperationSubscriber(); + data.find(eq("uuid", uuid)).first().subscribe(op); + op.await(); + return op.first(); + } + + MongoClient getMongoClient() { + return mongoClient; + } + + MongoDatabase getDatabase() { + return database; + } + + MongoCollection getData() { + return data; + } + + void setMongoClient(MongoClient mongoClient) { + this.mongoClient = mongoClient; + } + + void setDatabase(MongoDatabase database) { + this.database = database; + } + + void setData(MongoCollection data) { + this.data = data; + } +} diff --git a/src/main/java/me/unurled/lymel/server/PlayerConfiguration.java b/src/main/java/me/unurled/lymel/server/PlayerConfiguration.java new file mode 100644 index 0000000..b07f935 --- /dev/null +++ b/src/main/java/me/unurled/lymel/server/PlayerConfiguration.java @@ -0,0 +1,77 @@ +package me.unurled.lymel.server; + +import com.mongodb.client.model.InsertOneOptions; +import com.mongodb.client.model.UpdateOneModel; +import com.mongodb.client.result.InsertOneResult; +import me.unurled.lymel.Lymel; +import me.unurled.lymel.components.entity.PlayerComponents; +import me.unurled.lymel.util.SubscriberHelpers; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.server.network.ServerPlayerEntity; +import org.bson.Document; + +import static com.mongodb.client.model.Filters.eq; +import static me.unurled.lymel.util.EquipmentUtil.decodeInventory; +import static me.unurled.lymel.util.EquipmentUtil.encodeInventory; + +public class PlayerConfiguration { + + public static void save(ServerPlayerEntity player) { + // get inv and stats from player + PlayerInventory inv = player.getInventory(); + float speed = PlayerComponents.STATISTICS.get(player).getSpeed(); + Document stats = new Document(); + stats.append("speed", speed); + //save to mongodb + + Document doc = new Document(); + doc.append("uuid", player.getUuid()) + .append("name", player.getEntityName()) + .append("inventory", encodeInventory(inv)) + .append("stats", stats); + + MongoDB mongo = Lymel.INSTANCE.getServer().getMongoDB(); + + SubscriberHelpers.OperationSubscriber op = new SubscriberHelpers.OperationSubscriber(); + mongo.getData().find(eq("uuid", player.getUuid())).subscribe(op); + op.await(); + Document oldDoc = op.first(); + if (oldDoc != null) { + mongo.getData().updateOne(eq("uuid", player.getUuid()), doc); + return; + } + var subscriber = new SubscriberHelpers.OperationSubscriber(); + mongo.getData().insertOne(doc).subscribe(subscriber); + subscriber.await(); + } + + public static void load(ServerPlayerEntity player) { + // get inv and stats from monogdb + MongoDB mongo = Lymel.INSTANCE.getServer().getMongoDB(); + Document doc = mongo.getPlayerInfos(player.getUuid()); + if (doc == null) { + // create document, insert and continue + doc = new Document(); + } + String inventory = doc.getString("inventory"); + Document list = doc.get("stats", Document.class); + + // set inv + decodeInventory(player, inventory); + + // set stats + if (list != null) { + for (Object s : list.values().toArray()) { + // add stat to player... + if (s instanceof String) { + PlayerComponents.STATISTICS.get(player).set((String) s, doc.get(s)); + } + } + } else { + // set stats to default... + PlayerComponents.setDefault(player); + + // TODO: first time coming, make a tuto ? + } + } +} diff --git a/src/main/java/me/unurled/lymel/util/ConfigDataUtil.java b/src/main/java/me/unurled/lymel/util/ConfigDataUtil.java new file mode 100644 index 0000000..caff037 --- /dev/null +++ b/src/main/java/me/unurled/lymel/util/ConfigDataUtil.java @@ -0,0 +1,52 @@ +package me.unurled.lymel.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonIOException; +import com.google.gson.JsonSyntaxException; +import me.unurled.lymel.Lymel; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class ConfigDataUtil { + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + public static T loadConfigData(Class configClass, Path configPath) { + T configData = null; + try { + Files.createDirectories(configPath.getParent()); + } catch (IOException e) { + Lymel.LOGGER.error("Error when creating new folder for Lymel Config" + e); + } + File configFile = configPath.toFile(); + try (FileReader reader = new FileReader(configFile)) { + configData = gson.fromJson(reader, configClass); + } catch (IOException e) { + Lymel.LOGGER.warn("Could not read Lymel Config."); + } catch (JsonIOException | JsonSyntaxException e) { + Lymel.LOGGER.error("Error Parsing Lymel Config."); + } + if (configData == null) { + try { + configData = configClass.getDeclaredConstructor().newInstance(); + saveConfigData(configClass, configFile, configData); + } catch (Exception e) { + Lymel.LOGGER.error("Generating Lymel Config."); + } + } + return configData; + } + + public static void saveConfigData(Class configClass, File configFile, T configData) { + try (FileWriter writer = new FileWriter(configFile)) { + gson.toJson(configData, configClass, writer); + } catch (IOException e) { + Lymel.LOGGER.error("Could not write config file."); + } + } +} diff --git a/src/main/java/me/unurled/lymel/util/EquipmentUtil.java b/src/main/java/me/unurled/lymel/util/EquipmentUtil.java new file mode 100644 index 0000000..0a02d09 --- /dev/null +++ b/src/main/java/me/unurled/lymel/util/EquipmentUtil.java @@ -0,0 +1,86 @@ +package me.unurled.lymel.util; + +import com.google.gson.Gson; +import com.google.gson.JsonParser; +import com.mojang.serialization.JsonOps; +import me.unurled.lymel.Lymel; +import net.minecraft.block.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.Registries; +import net.minecraft.registry.entry.RegistryEntry; +import org.bson.Document; +import org.bson.conversions.Bson; + +import java.util.Arrays; +import java.util.Base64; + +public class EquipmentUtil { + public static void updateStatuses(PlayerEntity player, ItemStack stack) { + if (stack.hasNbt()) { + String s = serelizeItemStack(stack); + Lymel.LOGGER.info("nbt looooooooooooog " + s); + } + } + + static String serelizeItemStack(ItemStack stack) { + var json = ItemStack.CODEC.encode(stack, JsonOps.INSTANCE, JsonOps.INSTANCE.empty()); + String string = ""; + Gson GSON = new Gson(); + if (json.result().isPresent()) { + string = GSON.toJson(json.result().get()); + } + return string; + } + + static ItemStack deserilizeItemStack(String string) { + var jsonDecoded = JsonParser.parseString(string); + var stackDecoded = ItemStack.CODEC.decode(JsonOps.INSTANCE, jsonDecoded); + if (stackDecoded.result().isPresent()) { + return stackDecoded.result().get().getFirst(); + } + return null; + } + + static String encodeItem(ItemStack item) { + String string = serelizeItemStack(item); + return Base64.getEncoder().encodeToString(string.getBytes()); + } + + static ItemStack decodeString(String string) { + var s = Arrays.toString(Base64.getDecoder().decode(string.getBytes())); + return deserilizeItemStack(s); + } + + public static String encodeInventory(PlayerInventory inv) { + StringBuilder string = new StringBuilder(); + for (int i = 0 ; i < inv.size() ; i++) { + if (inv.getStack(i) != ItemStack.EMPTY) { + string + .append(i) + .append(":") + .append(encodeItem(inv.getStack(i))) + .append("$"); + } + } + return string.toString(); + } + + public static PlayerInventory decodeInventory(PlayerEntity player, String strings) { + PlayerInventory playerInventory = player.getInventory(); + if (strings.contains("\\$")) { + String[] items = strings.split("\\$"); + for (String item : items) { + String[] hehe = item.split(":"); + int i = Integer.parseInt(hehe[0]); + ItemStack stack = decodeString(hehe[1]); + if (stack != null) { + playerInventory.insertStack(i, stack); + } + } + } + return playerInventory; + } +} diff --git a/src/main/java/me/unurled/lymel/util/StatUtil.java b/src/main/java/me/unurled/lymel/util/StatUtil.java new file mode 100644 index 0000000..1500006 --- /dev/null +++ b/src/main/java/me/unurled/lymel/util/StatUtil.java @@ -0,0 +1,12 @@ +package me.unurled.lymel.util; + +import me.unurled.lymel.components.entity.PlayerComponents; +import net.minecraft.entity.player.PlayerEntity; + +public class StatUtil { + public static void updatePlayer(PlayerEntity p) { + float speed = PlayerComponents.STATISTICS.get(p).getSpeed(); + p.getAbilities().setWalkSpeed(speed); + p.getAbilities().setFlySpeed(speed); + } +} diff --git a/src/main/java/me/unurled/lymel/util/SubscriberHelpers.java b/src/main/java/me/unurled/lymel/util/SubscriberHelpers.java new file mode 100644 index 0000000..e557633 --- /dev/null +++ b/src/main/java/me/unurled/lymel/util/SubscriberHelpers.java @@ -0,0 +1,249 @@ +package me.unurled.lymel.util; + +import com.mongodb.MongoInterruptedException; +import com.mongodb.MongoTimeoutException; +import org.bson.Document; +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; + +/** + * Subscriber helper implementations for the Quick Tour. + */ +public final class SubscriberHelpers { + + /** + * A Subscriber that stores the publishers results and provides a latch so can block on completion. + * + * @param The publishers result type + */ + public abstract static class ObservableSubscriber implements Subscriber { + private final List received; + private final List errors; + private final CountDownLatch latch; + private volatile Subscription subscription; + private volatile boolean completed; + + /** + * Construct an instance + */ + public ObservableSubscriber() { + this.received = new ArrayList<>(); + this.errors = new ArrayList<>(); + this.latch = new CountDownLatch(1); + } + + @Override + public void onSubscribe(final Subscription s) { + subscription = s; + } + + @Override + public void onNext(final T t) { + received.add(t); + } + + @Override + public void onError(final Throwable t) { + if (t instanceof RuntimeException) { + errors.add((RuntimeException) t); + } else { + errors.add(new RuntimeException("Unexpected exception", t)); + } + onComplete(); + } + + @Override + public void onComplete() { + completed = true; + latch.countDown(); + } + + /** + * Gets the subscription + * + * @return the subscription + */ + public Subscription getSubscription() { + return subscription; + } + + /** + * Get received elements + * + * @return the list of received elements + */ + public List getReceived() { + return received; + } + + /** + * Get error from subscription + * + * @return the error, which may be null + */ + public RuntimeException getError() { + if (errors.size() > 0) { + return errors.get(0); + } + return null; + } + + /** + * Get received elements. + * + * @return the list of receive elements + */ + public List get() { + return await().getReceived(); + } + + /** + * Get received elements. + * + * @param timeout how long to wait + * @param unit the time unit + * @return the list of receive elements + */ + public List get(final long timeout, final TimeUnit unit) { + return await(timeout, unit).getReceived(); + } + + + /** + * Get the first received element. + * + * @return the first received element + */ + public T first() { + List received = await().getReceived(); + return received.size() > 0 ? received.get(0) : null; + } + + /** + * Await completion or error + * + * @return this + */ + public ObservableSubscriber await() { + return await(60, TimeUnit.SECONDS); + } + + /** + * Await completion or error + * + * @param timeout how long to wait + * @param unit the time unit + * @return this + */ + public ObservableSubscriber await(final long timeout, final TimeUnit unit) { + subscription.request(Integer.MAX_VALUE); + try { + if (!latch.await(timeout, unit)) { + throw new MongoTimeoutException("Publisher onComplete timed out"); + } + } catch (InterruptedException e) { + throw new MongoInterruptedException("Interrupted waiting for observeration", e); + } + if (!errors.isEmpty()) { + throw errors.get(0); + } + return this; + } + } + + /** + * A Subscriber that immediately requests Integer.MAX_VALUE onSubscribe + * + * @param The publishers result type + */ + public static class OperationSubscriber extends ObservableSubscriber { + + @Override + public void onSubscribe(final Subscription s) { + super.onSubscribe(s); + s.request(Integer.MAX_VALUE); + } + } + + /** + * A Subscriber that prints a message including the received items on completion + * + * @param The publishers result type + */ + public static class PrintSubscriber extends OperationSubscriber { + private final String message; + + /** + * A Subscriber that outputs a message onComplete. + * + * @param message the message to output onComplete + */ + public PrintSubscriber(final String message) { + this.message = message; + } + + @Override + public void onComplete() { + System.out.printf((message) + "%n", getReceived()); + super.onComplete(); + } + } + + /** + * A Subscriber that prints the json version of each document + */ + public static class PrintDocumentSubscriber extends ConsumerSubscriber { + /** + * Construct a new instance + */ + public PrintDocumentSubscriber() { + super(t -> System.out.println(t.toJson())); + } + } + + /** + * A Subscriber that prints the toString version of each element + * @param the type of the element + */ + public static class PrintToStringSubscriber extends ConsumerSubscriber { + /** + * Construct a new instance + */ + public PrintToStringSubscriber() { + super(System.out::println); + } + } + + /** + * A Subscriber that processes a consumer for each element + * @param the type of the element + */ + public static class ConsumerSubscriber extends OperationSubscriber { + private final Consumer consumer; + + /** + * Construct a new instance + * @param consumer the consumer + */ + public ConsumerSubscriber(final Consumer consumer) { + this.consumer = consumer; + } + + + @Override + public void onNext(final T document) { + super.onNext(document); + consumer.accept(document); + } + } + + private SubscriberHelpers() { + } +} + diff --git a/src/main/resources/assets/lymel/lang/en_us.json b/src/main/resources/assets/lymel/lang/en_us.json new file mode 100644 index 0000000..46d275a --- /dev/null +++ b/src/main/resources/assets/lymel/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "itemGroup.lymel.lymel": "Lymel", + "item.lymel.combat_knife": "Combat Knife" +} diff --git a/src/main/resources/assets/lymel/logo.png b/src/main/resources/assets/lymel/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d156f882ae529b1ec6497d1dee23c84b0bfa6965 GIT binary patch literal 85418 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�Ru&34wk5|hu+Pc-z_d*t(H%o{PD&6@Bj94 zyZvI>_q#bWH6i#KfGmq2GvCsg;~T1dV}0V9g5Pyi`Fg+j$*W)c{Tl>AV5!x_C@2k= zrYU!t>KT=gKNpNkU1+cBSBIQf}$#OPucA?&xjSK zaoozEfnSkexZmGGg-FD>kpxItPFJf#jr787zvmiBnL5?Mtg++hN&F0t8R)&PJXxfX z5AJ8uVvObzkBGpSRJ4v;Re8}UFOQ8OFq%fLk-GP!P`MPQ(d%@0Q9hqoDhfxuu?X%; zp^CpF$-I(E6{qH<2$^cO!@#y0BG{3!mW{EbwIQu_Vtbdtr!k+teqTPH7zIU8qQqb+ z{zx$uH~e+-Nw3%1Q=)PfWyhrW$jR3k*&)Q|$P@7^4*t@)Ve7neLpP|d-_+ZySLZJ- zzj9Ys&+x&6?=KPIJ!7sOJGXln!f@uj6NV_WH+(cP<3w+3QimEzgd>44%@ai+iV;an zlYH_JK1jRbhZ9qjv*l8FLi5>7ilkMp2~7*pFda)7BclDSj9NtCYHFz644QZ~3qGen z$!XSV3yWpq|0FI_z2_n!j$I{~fDK;LE5BD4s{kMCy#EPogsCp0+mze&iBMRaP0IcI z0A8AG*GY)XRwDN?^H~uwpU20r;UyBC&xIc~FO-SgrIdEQXgNVni$i*U1?*qL_)m;9 zLh#=E!8zZ@lS5>S;(6kOb4297_RO9vl$x?w3>!={YGN}TkpWQTNky_#Ddm;cP8;Kl zwoYj+kCoC6m2yca{mvEh-!GZ*D?}6?A^>dwp!J>x=ek>8<8^xshvb3J9RPNm=4HBx zC3VN-x8Aw+(0ALuZ+*Ajsr6>vtk*BkuP$GqbH16)&KJ(@9s}?rM0ntwiaEr>d#))) zQi(tRMptSD`)gY&bV{2(*J@%qR#?-e5G^T^PJ_0KMYi&p%`$5`9rTIuyASqCR0HD} zfJ%jGOxHJ4)nID}m2=QYN=g&2ER^Z`>u0Cn>N>V!4DmC z=(AkxH!dkMAk7f4W`;yKMs6gFN&B7s9ndSKdaZP)jOmQAy*9SfT6YStJ4T2t&!{~I zz-P?#Qbxr|N4jHznV8aAEK;8ntHiXbS*Y{o54ZH2y zwc9Q3Hm{oP>PmH+b%V&~O4SRkn}=03dl-UyNJQsEVXigR%)!9X6tNS%Ey*Se|76ID zfNp^qYi^B*I7dVRa;&mu6Yg7DWfbGsPkKyqQWq@!dP+^wH9C*MWI!rv z2RM1|9$oGf5oP1Z6bYqTOa$~8$s7Yj#+p4pDsK`I**Zr=2DHo}>VpXGFqJ#ql8A`B z^M2?C*KPZujTh?xoIqp0ZQpHo!_aR+2wP0W;ctGO^aU;$cmW8~#+SiIOoK==O$8`BzFZLGChW6Vxzvjwd-xhr;5I4rot!>UjXwHop zE{NPYkzX)}2GJQjHRvCY*!5NFGW*99vSMAxiu-Yik&`n< zKq|R^hzm&SR>fQ4-FpvJo-rFGP;=cRo`{3A=l8WIdyR{fBBGG5@`>AnncpJ-0dTM4 zMyW~Vu0X0x?7IZ%F{QdusvdHFOu3TCN82Tp)GUGpRfp<}qERhF!FRuw*5-iFXeR_m zYpM)HA&KpmuBEyLMknSRFnRA?-@Cru_1$*e?bfTl+pLCRdqsX&p~5@0TbS4Y;yEy! z3yCU~NFv&6V5r2cN1{^|l-7ebW@oKkTU)IvTd%6BT4`-o0P0S82BF|Et^jC7qTI@> z5Y$E~YLyDZa#_Ef)QmX^IU&HB6~5v?m!Q>4V7O%9OYa?Sce{GGSykKZy4tR<>fLTz z_3gHDZm5{42EdutW`SrIT9?htL(ny%bmrbT5QXX7QUsxPCu)FQCK1M;nW7Or5*8REo8Exl*2PX9k)svSt2*kDUFdLi_SJr$^TnywdH8Rx3jvMTN{gNl`PB3xjiNaO4FCp-gHw&DH@4bZH>^$7ysGNq zrLF2qqs*lQ5=ZPc0B?z4%go!{G28Y%x7LQCZMSa)h+=%4Bxjko$asYcUNFIPRxE?H zZQI%H=IU&d&yNv^RGgp&k zQa903AM*7u67$9@x!y}pl+;X21t{5Ja~3U*AjCJQ40o)_;4td4sd2yKeQ`wz1RPUW z0l|>Uq4EFdX#Vk-nz7w0B1WK%fD*rhG*Eo^s}*5;ouoMq24Ba=rC9x@QZw(}F!Y`7 zwp*pmN}KA^R`VD05`m#QFrs_rm3H$H0zre3R9Rm#JK5>nL47r2QXdR_QTcHTZ)JvyTJnBhLNur z;Uxn;BjPU^&C}hhm-EY)&-`Zn3fs-P8TwYa-Zef9=ONG|0C=R7YLwDeYh#o$Hf~yL ztCThgh~8{!29siSl9Wh_fVuxMTM%DQ`ID4am4Ff zABw(pd(*{g=e=wDZU;MHS~1ZjGCi+s^X2M$fA1-AxHC$T$OlE#EZ$FZVE{8=UZ!p~ zN(_ohd98KN*6tW#jWL4(^@1sUb+vl&l!#v3`L`0F3AwTBdWWbSV&#mn@xK55_s_%6 ze}41#UMmnK`&xF0*aG5)IjoS?OCbM@13mQ%`sH8z&7YmW`0|&^cWoVlKX)!DfKU_B zIWs?I<_`fd0ud^ul~P7&tz$-};$uvOl($nO3Lf0xl306YOeX^2YUHh?Df+|(Dq2JH zSt2XWn%RWAa!3+9AO{|}#Aa4=1|el_O3!lnC7p;#$etny4HbmChA_B2yP3m&++xCb z9;1eGQkBlxw;>r8nH9AMO&#~u#@h;%H9+12Ih_Fr%ZDrVPDVO9A`(E*nMV{s%-$4; zJ8qxh7D2Sb?`14jAAr&8ZQm17=bYR2{cgS8tuEJ_%jd7w&%X>xfBujEga7o-D8)io zp|4`l6SGQ-$yN3YAfA^nFfk#DGGx%k_DY+b)^^R6ePycV#jKuxNr0dK>|g(1&+htL zTGwptjMrZZf#~wpCH?8o{tx=A zKmDAo9Z<=oUFKF|x-|o!1pt;Ix_WPn7++l<683HcMAxl^)fh@of9JNmetO^@YUu1A z_fzkzZ01*{{VCUJ3eOCSvuq*TN!=nBLF;Ny8yv}VlcI2$h0}U(i(S&30!aC>%n9YF zNJ*+yTI_9fl=x4vn89T<&#z-!EeuLBmTbBW@GPRwc25JYFlfQy?; zvy9GZ*}PYxNfZJmfi%9K9ThVXGX;|FS>N~lw%e{>?p{9o>&;*P`M+NOpa1*+bd~n} z_tii9XCL9SXHV2He1MN18|B;-en%OHnbE^lBmskJor+;*H{GQ)$-3mmXd;VR__9+_hRY<1P>7KOf*VRi3DYmNo7UBS4^RC&MloAF8W>D zuGg>Jixh*-3*J@utCV@torQwO9 zW4TC7ZtuGeR3n)uI#y+OzM0I)d44PcOaz^w573!P7}iSdL2bLOp=~SZx(bFq0aW}Q z3hLB??)dS?e-O_TyV-nU7mN4IVi9az&rDUFTL3hD|FU`dmw)znc=x^Y<=I)&%$Ca9 z+FNUP+Sp4pS}D{kX82Mee#Hzg0r(05H$!lpK{M>y*DFSTD-b<;^mA?B|4~I<(*O)j zAglrEM*Glct7>L!LI{r(>c&z)QDY!=o`eQcCK#_b%V(DFzjZpR?pASs52tpc<)s+ zo4de^Z7tb+{PJah^*I4NV}O^*P!%=`v8{lH1oKmddllr3WW0YCtfzhN< z9e1wntVBa`>!%Tsfcoh^Lx3l!^#>+`PzYhJwO#;(g;Kas3g(DvK?JjIyQw$E)C#bs zz{t#w0k;~^Yi+km$B}(i@hKU!< z+#uq4+?e?s;%h^EUX0$31|pcIW~j&1Oy|_hni7%dNi?M8-{Q5|rm-V7wJ*-@550)b zC-9jbP$OAUMmUnwMK!4fmDEh>qSupWyAr#8UmKF*%%m%pTittLQX|9q{t*$&0H&=7 ztfe%RX+2cd$rO3K?;L;|5S&wa3-TGcJZpKZNg=oQQ&)`x zXANxdjX zM10aD_bXKD+zi9AuBr$+=3Hw&M^y1VIw#_DrNX@Lday!}HhE4~=0CksYAYNxRRthe zG4cu+SAgb^Rb)GBGgjH%!yB<364-B8nhX*8yq~_43fvPQ<;c%0b^_-V_YIPBo=` zqK0tl>IROHP_9H}a3x^T23MklNFjk0g&>;IRO&?ci3lgnhN%+6UaXDBsd~oDD9??C zv66&IGlD`&&Cun6+OckAMD8Q51I=oeZew&ANWm#bBR~H5AE8pph!`vRxiN6YtR4V_ zcbM^^QtAN_EWGcBzSo0NWoxV&M-5O8=Hq)_rNn2 zs_&hefuvqS|B!JW8TJx$FZkEBE}R+J42 zSOcM#_nzed6JT)q`F*0I+fuUvLLuuUrMbAwDCabM%QvKJQ)=eD&funUgcQIGB;PxH zjf;mLYec8}4BPe+o92B3;2Wj9L_~=E5D^~%sK?Co7yy^v`*q)S8wA`ivnPr{uG%Wp zo4Q_X&M$Zifjh6DV{{#$ZcVTqVCd+wK?H08i>!c130MRfpfkyrjTI4D@kI)xgLk!eeinjvL{eOFLPr~4Ln!AFm@Fd4 z$M+yBPFnTTLbcvULvh2~xH=Oa$TT8y!=9`ts*0Pn@Py*eXY(ZNmAYWnIHx4j?elp8 zJ(v&(%a#v9xvEnT4Q#1aWG3@iBbxGruE~B}zdg3-P$HrTL?ZT{b(R+kC+dQ;nS))i z&QV4f&S|EO!MRCS=v1p%2o+%E3^Hoc85;pNPweM;G*QqzLSyJ)O$yU{5DH^-in(DR z^W&HzG~oRO3UWFwb)aku6hTaRo%ltfIg|p2Z}K%eWokAIAH)yHD8)6A7Oyb?d;ma? z5&3;)d_Mva2miuFWNjm6h8>Y}!TT+NzigWMOXBan3Nrpd4tsW_JEvN3SK2x6FWuG8 ze*WeoqE>)NRYueod6`Vq_z?iUrvN@AfbS!S%Z@4yXE}nBNLe|mBqAar48g}psELtL z2yqKU6v|X%jLef7gm4)!1_+8d>s#EjeP6m@N=@gy_FXghMyJ=qu9>7}T@s?-ZHs;J zYAke$nxfg073-=N#`M|QnON*3p3a0sIJpX^8WD(?|0tJMKFz|pi4jp%9lXEEgZqBh zl6I6DQQf3SXtD4jZ@OF#FrN=XhD^qgCYeHtt~0@4%Iw*R7w)-J`BE^!Ro=f(PTevN zvoHI!E9OP!VnM0UjY5>ixJ``!sI@O$B?fvMg5IAr~X;pEh)U^ zE0|)Y_y8lgrTg(Y=>T9}*J%2Bobf81vMD(c;3i?QbjQjjZTq~1EUI1(XwlD6hXa-o zjG8=2FC@pJoh?_#bOlf6R5)-!9oIE7MMuz0BqXbOwY$GkOF^4TZ9q*T=x$pVRt$PfiXwgHlIJRRefe{J<~>4##k*~nkV54Fd${ z(kMip6ik1nkY0xp$@^zZIX#S#*BXNf4;XFny4#= zu&)c{5soPk6=g+9nGi?Y@|v=svwW`9U2y;NVb^Xb< z?H+(xzr#!qeHb28ram)OJ-0^J+FB!p%p=YZCvKyyw7?S(rHCj3!QQqx<|q>Vw9LE{ z%QS#3Gwcv?n;w%5!7W1Y^K|PL%pr*73zLy*@eymPBUG%JojZoCXrQk4kx`6#W=)!) z7hU75HGNG?1MSc)9z?MDtJB8mtr zK4JU8f6ndlyHF!t;VgvSh2TO6 z4w!>xAy6LI5EZ$tiU0XjSy5bA`#ynWo^2`@?c$1BK_V;0$4ObS$cj#w(|Sy_4v27A zxG4%#*C*E))Q!}P(@9%8dB>b=xzjhEs3mgXw+Tc%0iqOH5@h+>n3mCTPB@$ijZ=Vy z`%Kh-xBgBngLo5&V&vh5ehCN*BEK}wEu6J8txc_s(OR3MDs>@yBNb!+azBhGiX2Qi zBH|W+H_Uhiz?T5{ikUAF=`yBd-uJEd{ovd{Aq+s|bOI=HeB@C%cEn=zQv}UMvSO0* zhzGpRT`N)S8{66WIlUKYw{|aZCN&~!$B0Nk2zdl0k&j1}6bTW>!P3LjjFbFDJoz9b zSJ7~cf8K4yV9K*$`|*W0xl%7+0!ENj0mgYT_4UQ-gV&i9x2Nw7zDv!1t(F1c8$d)9 zYUhR-GdJWz0eXCb(`_w6tYyWo9~-VZtiU&ZH{$sZjN@nJ;N^@n7|xDoLoxMYRCaa^P5J)6C< zVv!QPUaUS)?ZeCzM$|{8W_+zHm2N|x zAKKT5k~g-ntT!_Cn`}tFB2r%}#ZUWwyXd+r-}f7EZf8Phs}TH*C@d2Y-7g|?lktsR z+lno7vS!}M2{dc6vSOC(klIjPCuKz`PFH)LQkJjK6Q#uiDG7#AoIWvh;eeNd*=ry3 z$(l~GT!2P8sl}ZAtaLhqQcBT0ac_u2k4kx`nvb?9SHq;ty?1^X2uY_ z;t+&jDCTQ8dLOC#9Myd7;5l?jl{JlsHq3BE1TO(%B*aghYk#?3|IPC1>M3}?)7}p? zbC?m)5`g>E_CG!%3fWFKMMRx+^|re`S+PVWr7#VXu9=V(muDjJI!=x&VWkvbg%Dnaz?XmWC(m92{67(FmH==L0K44U z9}>?fGx3=Zc|ut+u^1mZ=frPa?q^lS8|H}4NrWOI@)J+6m~x5eeO2c!S@SL4=~Ria zy!Yve1tY=o;Hl#!ZCZore>;e+R#a~wjDjfiBszVgL6(^%wq&)hmWHR1Pe`dmRuuQu`RKTD!v^|WU%5Cx1%PJ& zF-w4}OmFEjD81IPi#NGqYW6p8a|aONGJeoR@LU9$5LWewmt2 zg=i5o$pccH+r@p~3!R{l6(hjZl{oK?-Lb_YlNGPCrtcxUarA!QsuWnRzV}E$t|<$0 z5%Xd=5cLXKSug^O)>R(eNF)OvH0*Y@Y;Bi;$nAlM=*agk*@fjP>W5Rr&eB5HzF#^J(L!_N;3YOQ?;0OjS{fa@r}AlMuax`j1{||n1<~+LiWI= z^<*ojJaV}6p<-YGrDN6si<|fM1+bsvOk(drfs=^HCfV3r6pKHL0M&JsfKb=kF(Ptr zH6nuS46A{S0n!Fo$6F0#(tQD+5I}hk7(A%p#WHYosU_GeE{^kvn8f*u2~76Dp8gvc z(=19ljo~;Aq(l+%axD5%25_ZBFv<<{FgQ1e*?PBg!?5+=G|lfireL{ zbwtF>Zxx6TVS@-)%)A2ND*#?AWwy>?ui_CU$|HBL>r?Z^u9?O5Cw0nH7MkHn{h*lV zRkju|i$K&gP4+!cw>C#a*ICo2S$tD9a5}VlFCZ%VN=5Tg9Z(2TM5MsSh)9*l3#Bj~ zqoE~2SB}Z=m9=Do+DI%2#4`Gk+H~K zvSRgI6daQ`x;kjZ8*BHRp?F)@uQ4^-ALQ4?x=L-~SnK5kLW#MZBz06G5F)3O3`>Dp ziS131F(S@UlGD)Jken$7Gp29uZKq}#hy;XUL}V<4s)k@HpsEsJQXv34o$5v&iv~y1 zv>t0rFd>%~p|#x2Q-xr9IE4>zD6C&p4DMQ?08s=UVeTge|IlT*VF9CoDUkEQ_dbNJ zAKYs2!>bU&B{K_|cLF>mIx6?4soCogXL;kx0Ki+V5fMSpOdVqUa6^Y!x5L0)%$JD< z5Af+xuaiKBB>a_>KIiFahO7r;y5xhN35j)8jk?w&=u}nqJ-4@#6<!6gUs$ zOZPU?cP*)RB$cu9za+Lcnj_*^BPtYykRzcOA@!nUNqc2MuMSiO-&$%msSybX*$6&$ z0;8%1s%wdcx;M<0+C zUr(`muZdG4p)g9A9t%YB8mdGCdCKkDiBlq?(!y5)LIi^*&?>15ilSgq6AUUp#*=F; zAG=D2ObXOFH49ahfT(G}*E7)GiJVH3cja6&@;ANTFsEQxn*Q>{zEL1{Km-I6&>6+` z(}m%fm4Il-O_MbEy=!;S?sl--CGB(PWHQMCb4N@&CSC;&mm%MKJR7d`#-r^1)GSNlGKPz=?*y6N`XRJ9y< z>VT|h3->VkWP!BR8YD+?BPQhcj5qEehDlR>CXAmp1FuunpxF$xMysbH;r?yMbZLzNUQ zrL5x*_8qbOaZhB^QnZ>c496Uf0z^3y@3S5GE`rc@3){HucGA92T3gZ`+XBG~7+!hy z&zbp4@BQZ)h{A-!SGMrFczthcnVR zZ+!$WpZ@&Lqw<{>KjJUG2mImZ@!R_eJbCiF{Lx3ipMIK@7f=0W(g~g9Ca$wFAxlcw z%1YhGdp}3@p9|5~$%>m_$JYEY z>sBE8=x3nkbEtL?Hg(%`V}NU~xYlZ@6{(s5Yh&+jp&+>dmF@y_Z@uk9ZF+~>el{EW zwtWa$6zz>&YD?-fWnYh8V>v>x_RRqia7ra)Fqq4MAI2+l65PKJ5a|QIHUT5tKlgWW z1zQOSg{qZwETv_$F+B@Xto8|j`X2PqrEU7S?05@Shnod=(DA~N!3-bYn+ zRrkDl$RWjF5}W$*>lX!ET-cxuK`VRV1?82z_e!!Ydu3o|HUA4GHf;{c#`H{gSJ!>!BO=Z@MnvA*UER}U-D%bodxm`mIhpr%Rb^ym z-CJ-$Tz?5#~3NEUEFpkJ|!B8s}HLHvPr3Nq;1ChZtYHU!Y3Brvf+5kt>n)I^Y z=eOVfV?U^AS0uU(Hshf}W8V)2_3<1#89IGj(Qs5h(b?lsrGj%^NcWM!kp8%rKRxPb za=yR+=TEpOKoS@gB}n#^xxA10v&%q59Km=G6g(K;1BHJ0?0YcV@Ad+sr#zOT@(C~I zel{YO5JK?YciY-E8xd(#_0hHko`>hQr-A4TlSj6XJQIj!<$a@m>^cm!F*+f%QwE(O z@-+8N5}NH(K3^3#263rsS7OEWq6UnGLOcg3Jit4!uY3M7l|?U46Y&G20F$j3nRILPty2}IdIUAQ55@!X#CemKSiL@@w` zFu3xA-)@gT?+Zk`#X;q%jCBtw)HSDoyg_=g%h)>CRhb zibp9P8H|h_K3ki;Wf^dGDIV#VBVdgAJL0e(zj)%_pI;2lN4j4uIg?%_Fmo4U+(eOO zWIhv-`31p>FKtBUW#rP+M`x5PwKQSTLqxi!A}5G)0!qgU7XuN1&WG-=#s~tCC<{?< zAhZ~ry>;vQ)dJD3W;I0skB^zqwsdUK_mAvFS2m(^sT_mLT%P#+X>!fZ_W{Fa9Dg2V z=ek$2+gPGu6MB3M35a$Hue{AWJ9mr{_p(GjzVG^Ik$Cd??Ds4Z45>&I)lNk=EV2~l zvl!#4h&&LH(=8CSPX#JI9jy2ZBhLgPZ^^hmI96AI^3)(6fXFcdTnC_6bZ9xf&l_8* z4rx!M%0SQqYXi1iVeBlxw=e&Sev0fE(aY2otgB6MBo`@{Y1t~tge`zC161!Z}jREvFIbKoPGg@C^WcO#xnqJvzN2fP*33 zCn|tfq{d=gVc;??ad+>&fAy*v^RPz-jOP+X2_M&vzG8WT@IR~j>!*^Z3$X21lJ$j^ zU9Q;B2YN`7&y^nWiN5%-E491L8GCfByUro|o$iTZboyzF(`|okK&%8NeFCDP8;zc+ z>iwsJ6`u}Je0u*2BhLgPXN@sPg_4W_s0M{;ZZ{2>duk)V4S2#vq|bb4!ve3psJ5!m zXwbD{T!_~?#QCUgZ@XK!zH{Mw^1%mxQH0PKk)D`!o35$52ew;DK2?*&7fZJNvUi7Y z{`gS>=1{e0dwBl%vl-7e2KgMV+Wl`J3Fmr->o!SZS6t~+o@{r{M}>1gSy}(w-#=GH z?g@n0-NC2tB|Mq&`qN}P{&Sc0m>+$*Xx6QZ9$Q2j`tupHE@-r}cC@(u)vqu9?mzj< z1-$=0y!P5R_4YSF;l20Z)~)aCf_>p7BidKa<>0{1wfV@)pt~*-MuiIzsYK%>ayW>- zYhu&-_3{DVzyCks+O;>rMW+hkugw;VA6@IZ`8b5G5b0GU7m`}4?z+9gvqPd^Xh9@0 zhK#jDyUnD%A!G7!`U&9}MR>QdNctS2-#f{F@by z%xNqz+uD29Ye{Zok_w?ell4%BqsKIBc5s4DjeUA`xxJX^9GJ^8GZ% zZ0}(j^IlB|B#k_cKQgoAdplfTy4UGD-mg&u;)YCdYK>djV&t8hz^IGQH=<3O2R*PJp8Dl41x3V!d z8ba5p`jtqJs*=F$>H>f+OAyFd=WH<=Sz9`5%hFhvH*1QLj3Yuq<`82Hy>Q>BJ;%Ne zu}ga&d@iYbA(-zg#@N!js&s`btsOaAlx0yAr72ulm;#M;Hbx&~@SZvJA^1L~Ep}-z zee|st;eM~nM|4ESA)3;p>m@1yOi5(&aRLz;Tu}LM4u4nrbY2nmsxdPULSu(#%D5Ush|%Z!976B&wS{zTT`$rlRqH}rplJ z>Te%CD@o~#D?bAe z4cYF@0VKDP4j?@2hu&qmk)lzKE^?@Z!z4dg-^9Lcq3@Pym2x=L^!(|AwBw?x4l7j| z5t*XvND(nj!exvcM0m4r|N9q75)K(#)}^a!TTbe-sA}t~$`+N{q9kjbCA1V{elPmS zT@wrs-+jFmsdG;bo1<6s{hP>bfk`Hm-}bccoZ2!orreC>(@@g~9j1cWG5= zf^Ro{-?Z2^jWRbO^vzz^k2E4GYHM9hWNTw=+B0GSCbzA!F0mhx=tW{HlCCwjh-Sm= z8&zmkxuG=altp7XHjWE4 z^_d)<9ffCSOnx!tXJSM-BtG|w_Yh+b9ESbwSePj{Ld=XPOk(sLLkrP&Hio`bjWvMT z1BeQ=wxY6}5`YqBmk4yKm{!Ggj6HoW-9nUJp=w%I2h&k?FfGfeFUqmFvZkUKS!+in zk<}2p7(?5~zHNNitop85Qn6U+Mpx|nRSdA#i@%Q)MK!Cc*|Z)XOzUdm%WA^TjnS1O zTewkT9T0raA++B6uJLWNYP;34=+-L)v*PGiUAJ28b1pwUNGyUnU=S1Yn+mCn`mn^j(AFA$EQ%_s=GGgzrHU%_02)R55JH>u`Olqk&tQ7D zr-yZYt*<7>v8rZTjwa;Xq_D0U*`gG}LOHh4`>v0n-E`f0S(MAU-4th_Fb`cb2Ux5x zX-HU>^=3Rh>ZY^fFs=@ytY<-jr$5Oo}K_Cnis-Dc(5@xrYab5J@9zMZdD zxvc5M*Kh31n6fR3Dp*^xwGNCa%>Y8SN+3Mg#1iWbTObOH80{HAI~R%b5NK|TQB{qP z4i64a`g(H2^>_xOGTq0@IX9|`veJEQL>xl~qTaWy@0(52ZkDdB<_7Iq3_LfRvpI*} zU-WmZEvXzG*~#RFJvexyI6QpAPN%QAdU{ff%9$;kv!I&h@f-n0sgFR?qL?Lt#eGA@iAoK~08en14$W8`hCa^@q9Gv7Xt#JZ??S4tG z*jZaNs?`PnHbaaC^vt?pPA?}lpGO*-aA-0Sb6%0=LGeApfyz8Ve=Z}4<-2(FshQPO&n z`dE}asAir+==P`eHV^`T1k`KZE?ts@c%beqcli ze0;wF-)-_hNyp5U2zycX2~ZF(1|lL_tJ<@q^J8MKfNG5C0B8l!KU}Yu za{zy72HUHWQ86hG58nvKCtua^$a{BxhN*++$e((Q34_BiA+Q!RaM>^ zrV}IDh=fH5?jeA?uNv>I*AG5EoSjThUj0fuIer}`(-SkQCuLcVD_4}gwJsX#_F_aL zoQ>5X^qudTP2V?*^=5H48ciM`;Jy0~e)#cbb9SN1RMp3$qw8-S9iMzn4v%iy@#Olr ztY@wq9ZU*4IzpnO+<#lu4rziUsyVK<6A2rOrik(WOGdPh=s8A|?Lwi0kQh<7fxcaX z?^X${NJLy(BviCi5Y92pBCI(MNO`~L3_3HWKvfEeW^Ig<5USpo@vhS?cEQ~J@elsXPbhBpsRh6G_21-I-~2kx(s)KQN6yvGx|uPyN3xulg(x#e_A1#h zy$amVeX~AY9KZE(T^-#0Z}0#4hx?ptHoMu6$Hy=lO$<>2AyXM+r-;-eVge$NAuhzL zax0=M5nibFr)AmSbFTdG^z_5KH~*jCJox2b`lcS9yiTKXT)48TtSKk9upJ>qB(oO~ z4eUz-$JlZVYtMes_v?q1mp5FpU5 z6!7_HnWKn?_#u_tJT7Rq6NOH9%xD_}hCd1L_D!c4TBavfge8$BRg|KrI}u#f_0d`1 z-@Nz3AO6XUYTUzJ%D_AC3v*C-Qvz)Tu>-}BG_qW{b*Qn- zA{r62m-I7&8&FwY=Wg+(*S_`eum0-ZIUu^F+lmICy0qfkZ@*2y^o`$lVr+$=V+5Qk zV1uYVwEAX-1^>k^7-F+ zXV((!F$4a}SAL5S%_w1V(h3pv;K^L8T-aU`C=IoIv`zB>fR~dAovD8Lw5ndY_xFD9 zpZ7IYt}rwb#xask5paV7ou;uTPmF6 z@G1gcSA}beGy{+cA&x-R!8V^yM65_Gg{6+%&p7g7?3=FX9)`t7AIP`9^(Ch&k-6u( zUPtDC$g0!Wb#rdpvv~XVtqAb$r3J^Oms(XzM65t`iiQqAw6&)2iRHfatG^E3wDGs` zZ*lRBbu8;i{L?>u$p7v?U5mX@esvA;cYhZz&8A0%h-K?pVrRgvRe6bM9tuK9n4UpK zn`*lt8U?f&mcdeCgK1LUvyY|8X(c5nWE)VV$ulNJk8dpa0Wi9HWXlcNfBEg}du?pWvKm>-4P~|`o z$ErBm253?)f3IRWCLjtm$9CFx?NQQ*+T{ajHfLz9mLlMtD|=?`LvY?X-xtNWZ(HlX z`OUlf{`;4jyJTRP3pF54K=cqWF(hC?L1U~50KEn4k)Y?M@6~~a)w&;#C;dkseIG8< zxe%acZ`$CbYyowHfD2V{n1ClUN=@vlPT)xdE-k1E2}r>KK)K}>SE~wXZZ>NbbcAVa z05bvYNgybqqA(gG6K6)fXZ4n$2O9OTX?!`E_Ol_4WdABLfL1e+&^o=(s(6IynE{Ea zqP1|Gzs*hE5_k{zZ+us2E$`2~L9EDM3sFvVr5UvXgm10o? zORb0#Bs>PBYbbIIhzA5PQP2tzi(G0&09DzFaLKVB2k$%IHz9Nz>H3CzXbVKD0k~Dg zMuZw`p+PhaK&08Mgu8b)yRe5#k-QioIYg*Hb*kI0qe+W0##$9F4MJm~XjFWwL>mFu zRyLS+vxc%9U#f@GY($E&^@66w7}sQs17NeomblGD90NkF3h70xA?-2m(`+_)#gX~j zMn(kyjuarN!Ly|P4lOUiC{dxx)2Pspr6KT9xxtZbfLnrot^gnITk}0JLYqMsVXR6W zfQCdSl6ppzuKjA~(9>cS@Dq#(5N8T{fPe>pa)^qPOv8tKu0&;l2$)P_KSfK%t&MRj zYs(edVnxQT0CaVEKqMQHoUJ?u;02t<->0Kr|C;Rrl~H6| zSeh`wRFf)0FqLc*k*O*q#(4mQ2P$v?0FxoMMAM3HL={!Us>G6GtYhdy44nkuBKK{f zi7APUhpK=1zN`Sa2w~TCS>nk_Nk9DIC0-n2T8v5ss0q+#SM)YRMZ9=2DM*co325gApo$0%RgI#DH0&`L zzg{owWk$k3m zqNq-XzD#>oe!oCOs7Hj>7}LfW+H_3BtufFqm$L});xVFEk6jw2HO7>xItG-P3LF`L zV<0#N#jJ|$?r|=un^iJM+ej4)M5Up$j#%MXGP5uTjIp;d_)&~;EXp%PT@Q98EQpi_ z5|wFw?_6jm6MNbA4+DS>P%F$08P#lAMGb&cO$!Gk1}&M@>CmB(!KfFK)?jg|liGgN z$zmEqeGt2X0ST-SvS&#kq-!)-fzSqkdj*J!nwEM40uC_W|Ghg3UzQ9_XVIc&bBAoz zrvw0_v>0WBvcf8X5&#s426Ka6lRy)@XiQ-tKi3P@T-6-CklyujU_!Y-O8T5VmWVn7 zfUBNEPlyG?PuPg^YOLuYXp@2O6$(6giE|_gufcxAk&e ziY{Sb&_FWgfb7S8$Z3OsNFB}jpPc2@%hBl~-NNs-Dh;*a?C!q2Q0NlW= zmZ?J|m-dNqDr95oaPMVU=F7(DpPOjFCipFjEG?UdIOfNZ(6*S`2*Z&~|Ee3Tg_oL1BA_ScP zW}8;Jhie_)Jxa6~38F^m4M_t;1%TNLh_;amnf+jH0Gt4Cxc2nSwl=gYokLHHMSy3h zWRrDnM#K&f8-=)1KW0_la&h$;s8SFUTtHw(mvhK4Qd8*(FE|q zJ(At1;E1s=%;CNT)^#`+WMwNY9HN@TCm1m|&b{(E^t4!2c;(q+*JqZ=+!fJ8#7Ja& zGNwVmwK2K`7@t+u^#}FQoA>4)KD_&9fA+hdyZo=q62l)8xY`m>2`DuxPJ!?M0j>eS zbp?Di9q%IP@EJwo%IU^u9mRe9>bz7$+uzEs-Rey-YOUT5tgS>G$ux z`>y``|M2@sZ^@mihb3uS&U645fuY0mZiPJuDCdhM=IN7IMpCI81z3Wl`9UKEESQJ* zsIK$sT&Y7fSlU+I#Hahb%eDs40U--3`H(D+q%<-=J(*RAXYR!yt9D{1;Khh%Ct zLO;GH-MYastF-2EEv?4^;M-lJI0RTCK_ftGV4a9+g+k7k#)Oj@+W88J?3UOJe@JoY z6|oHr)m%G%YY0D|&9IB*+%mAN_Nn3qQI;ZFt0uOqMF^YESTzH<^E|(Zh#w2+Jp?#K zgt?-w2(dx3z4hT27Jxnr$#u2K0GR@eEx{I}ZSlFG4H2Rp>M{?Iwyk-J8LXlJ#MS;@ z*KHb(M}rMAu0&vg1a(psQPJ$n91!3mKuzlTsR}Fza0Lb$<)jJ>HGPUggvjLd4OLtd z>0+=+>Ii_$_Ecv{%~#b^0GtEp3K1J)63Efs^Ng$rl7ylBhFz=55)sdI@B|mzcfUh` zk3r#q2+Wmo*vJM|ddm@|BYO&2Ro*d;drO^<=d?n{n8b-gl@R0!vu4$QcMH zvTz5WNpb4@6;Zz${f` z6QuWmqbu!c|3#M!M8-m{Hdr_it}=PZDKv;+OfmRCVCNptOkGel^KK*U-sci!wleC| z3Jl6CA~OSfj(-N0VD*&=>;$b+5|AFIr`bD zqQRjfVpN4CqTVA);Gk!SxD??A!1MqT2gmNkV%8$Xk@W$wMbI^(EKrTZZREA)_UAbr zVX-;e>s&%ndLN@Ht4<}?t6m^ViAe()+@J~3)`*(zuOLH! zWj;nIvt4$u8=-&}2!lO`0A{Mv115@#f`T*}kK5_>HxIy+v#vcGQMR za?k92>O%#@Y}dUnq64{5T?0UCjQGvw;<{l!izL1Axfl^BoB_c@(8P#j&I)Uz)L4MN ziA%n9>w7Pp-R5&Cxx>i7h!WsfTY|WqS#0>X9KW}1eUqKQIOqVV0zo6#eOl0M#Z^`I zlxTpKEUuWvfdRWES-gM5yym%)=7_K?jKP&eX{mtT6;)oSytiDI>=Ch5l{D!cBAOw+ zj94|PoVj?|>Cl#0=ZFI%V#XdZMt~c8&9k``F$Mz#?0|5C#x9b&OGrs4OX^D)a=-AD zP)?O)ZpbWIxKYtQmJ%P{->>Esn^(kyhXJhVB*cwDEG01^0aBY)vxtD}q1~3&m|f~r zsY;!R>`>~z7$R4|>JW&SnBokO0uHKbQtWI&wyny8iYHtVLP^FVH6{@1+6%G@w+!LJ zdhWT?j_Ro@JVeBYs)Z75 zc!m9{K_cKb02LNMFxSXyvaX4p_s|WVp2?(S#27-*)|i~sYz9|zj`;P6+Nx@Uh-r0R zsN!5iSH>hp1U|<7=h@+nW5)Gquw~h5)ExAPU~q_of&ii&4rwZL1(++Eg#fRVXycN~ z7A0Og^?L!)!^H=Ba#RN|MQ0E=yNh6+$h4zD6E)aZ3x#A+SdEpmmTwvC46;#?Z2q90~|62j24f2 zp6yr?nF6?okGtz^8Bw0Eir|4^LgRf;mn$N=vg*ZiOAZa@G8I{sNKB|D*o)>T`n1*| zx_XU(E3~*yf76z(_f4BAUDwUo+R7tRs~U}n1#4wzbZ=CX`hqQURuNXJaScFgX3C66 zBr&4*_5ug@07SiZ{L!A zru19zmUvl)2;3XWDNjh*4z58FItAT;z#0$^0ETo698ygv#}WaS+XroSL5B!X=clVm z3b|rjsh9&1TT_(ms!3E777$j^pb$F_966Wu?e<|aJg8!{Lgd7RR;p=n2%WX1ud3x| z%ZL>4xokvv@}RaJxHZTv2h&1PH|03?ebdL!V+rXOQg8=4Hb-#TEif6fz{Y_cniOn* zcu?1NJ@eCCPMQFl{WB`2)8p9U%KIWTRthD+NXGQaz7e6-5U6;usA@~dEm2}t(nh5= z7NKvggrYT=u!op1dIV}2%t}=j0Lr4VHAsyJw?d{Bq?W*TY9`_K{k>iMQioYs z(7lco&^nuge_5r41VTA-o|d4{3QEXD(sBcaB2sv?NF(rKIC?HEIP25n-c>viy(P5Id} zB8<<+h?KHR(OVt%9rZqa2RQ8krazCkj4!C*BV+X=dyz5Ojc>#a4Ggvp4b5Fm2j4lv z(CfPg2DTTL&^a%>4%5EOjvf;csOK131X&Y+V<5NBA2A?4w*iXL8!7r6VgTybJoVK! z2=C;i?i$O2;!|}-*v%{Mq|HN9PV!d_#Ozn z-UYaUXtfZ^0hYG)8l3dLq=FoB?o;ihpkAQ#Lh6~oj~3oz_#oc;;H|yp^zGZAH@|f! zx^CP}YAe#4AcgOcX#>VM6?6h&25MvWDCA6hEmU=cNMlq8Iy8vDA=WQ3q#RE)1R`QC z8`2MTlb|Kz=B7Y1WY(D0kPB#Z!%^nJujiX3T{r=Va%7q}MtqEgH^zGJ*%yWPs*CW( z8(-z`e}C`0{i((F5}pf)Y+<-$<(`$hR(Uj4UiJ%iiz(l}{rRgO{US@Y1<_+SzNSSn z7r5LtxqRFlG#64+$pJM(#G%5)o#W2SdwdVR;SXTOC6wNRHAajfC``_>0kfCENq||Q z%Bq5gmLo*&q2~qM;p_0dJU`xl|26*RH}865`V2^_y>Tur@U;mc8pI;!@~d|2J#Yvc zb}o1N;O7Wt6@U)|%#Y<`Q-zX>&Z02})3td6-k6w^ax1Qv3Eex+&HAF}hy8|6Pw()% z@9qag@4W}|_N|-Y;W5alyc^oqbrl*@7GQb<#&ux4(8_F$eM7mD1TZ+xaZP|>$B4Ee zHrZB$0Oi(Uz%Z!G3`sRJxe+I;F)bDrovnf`-CD7Fh@IZMAAfXVO><*{#%Q?fELYW< z``&Wbl{^~FxhN|B?sq@i7T7QKr_V_K@Lzs3J}By&f^rj)-Xy@AN_rC&Zvw)bs&ErA z2RHuAq5vKN?qqwP;vG=^aXLn%I}zkg;O@u&;tyWgtB&+bxf=OrfAnBFb>&SdcUdl^(DL;342}CdDrM#4%ySxOVm-13x%FkW?ZvX%Q|Nq6Nq_ef2 R$Or%c002ovPDHLkV1luj(Rly> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lymel/models/item/combat_knife.json b/src/main/resources/assets/lymel/models/item/combat_knife.json new file mode 100644 index 0000000..e8f6cc0 --- /dev/null +++ b/src/main/resources/assets/lymel/models/item/combat_knife.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "lymel:item/combatknife" + } +} diff --git a/src/main/resources/assets/lymel/models/item/logo.json b/src/main/resources/assets/lymel/models/item/logo.json new file mode 100644 index 0000000..ba75f12 --- /dev/null +++ b/src/main/resources/assets/lymel/models/item/logo.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "lymel:item/logo" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lymel/textures/item/combatknife.png b/src/main/resources/assets/lymel/textures/item/combatknife.png new file mode 100644 index 0000000000000000000000000000000000000000..343e773f1637fe34072b9ea3aeaa1c525fed5f85 GIT binary patch literal 2507 zcmZ`*X*|>m8~qQ1v5gt~)sWFxl4Weeh!}Us*thJmm1LWd>RPWMOIf2VX~LTrQbd`` zl4V?@CR?^b43k_ti9s%}`~7`Coag+0&vTyhJ0H&-2fOpa0x|*s009JZ4Dvq!ESWoI_*6d_pD)*SE0IWb|94LhldG&O@D zktr}y(Pn141d*wc`i@Fq8{F{?3NkTZXUS4E@A^zlV)H|lBc{H^^v8Us=&9auoHH>FcxvLIE^eLZM$6YV@4h0I zz7cU>&`gX}1#!qNJC{&$f)v+w(e+ZzbKaifxjnfW$l8J?*9cqLz7)cUY)tc^4r5)n zDi<=77cvDL92X%f_sSW$Cl@X)uvq0kx1TN)z0aw(L{QG~$Nv1=v44xh;Y7*#KHb~i zce&}Zky==;Ll~r|i$t;3S6Amdib^!M;w9ooua(;Cf~fiBzc}lH+nZ}^5xnmV8x%S@ z2_`2&`N z4_kId@2LOLS-ekxc7Y0)%@276Rp;~zMdUcn+I+{%^mJ(+0$ZV|ceM7k<&xoo*G8NI zkZ0wX);=ie5~5F>7WeYv^_eF8c3#iI=KJ5~^A=oAO+?$) zNOoHA>&akU8J$`w6o?Yl9ck2e(}-9F(n{zX8D$DIB(^5hDprSW^eK%g8}?%dAP&y9 z^=oj6Z(ly1{|NY2da}~_H;jlubr(WzT+PGB>@=tcRtFVM2GyYXyUa>AjMlKWt&BDbnC7+q}=-;`8SvJwHummYB$7 zYi~%TiPtNqaugqtDR104_DI}Qj#Sw_KhHaa0JOh@*z+buWD2=G4u47Cd6cwg*wh<) zbZGow`#R4QrIu+a4pYeHOh+lF?s?Sxv~-P@y*82S7U|veAI2WbXEgp!FuD@ zKYxM_M(SU--)ZC|g{_^L$rCH^^GCwv^*nj@QJ;X0CrTPknx|y4wQ|x75F9_A#r$s1 z=Y`KN-D9=KaU$x-F!8)nizL_&$L$HYiH#|Ov3J*y_h7DL>f+VT&5&{$Pn6}**RS;P zS^Wb;;3G)x@K|vH#mq1gDB+_K72Yf>|NK4P>XmULn z#wDrj$NziVD49L_qLs!Ae4g4DnBnB|m{7lKht6^JHc|<)XspJGll=*bE6ou(U`Axn z1aF8g(6Q~6C_&MRwpJ(g_9?pe!Re5h^v%-buSRde1s^YH2sv)il(D1bb8TdkflwtsoZ z+v7N(QYBhFBepir=afu3D~ruyVlYS87AFreQU=a_^pB?ew(F}I!LPhtglgDWX+hJ_ zHe&QcV1$O2dy;wOj{p5+5r9B}*>)gahMyf*skomU1?|U96%?Xvxcdq)qKZD-g(a-4 zTROb`1{Q}v+aqpoyw~6HWEr0AGvTw*dT+7~59o4W`-<-H5uCcPbltmn#4PDqr|)&}tGYTnZ8;H&mch0R1X-=uiXaTB zbPs*6<4qg_M_b#z8m}iS@`sHRs3L4Iu3jWc`|b3kvFVGr>P}x>&}#cL{?Jd%8a=8f z@h#LnUmiMqVpez8#Ii$Ph?KDE=3kcp?$iECI{dDb8{#f zJ;Ks_EP6PwVB0YM=G^s?7au#x|v^_}hog6WcSNn4lWZJPilIVb|kDb5CugBuRsL^#;Fu!40nd z4oRBsKc~j97~JYSfIGVB1)uGy84z#?4JSA-xPTYMNd7=IpNpw11VNm;qPY6&(7ife z@877WSm5RLpO&IMtSo!f`;OUuI~hejV<+B&tG5Til!BB<3Qf{oU}b3R+-a*ErMW~r z00=?%Q_O|b?EJKEiQ_ctmepvQy1&g}d4p>$|7TsHt-m~i0tBd&hpZC@c3i{&g1H^O I&de|Qzb_Akj{pDw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lymel/textures/item/logo.png b/src/main/resources/assets/lymel/textures/item/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9278e59a05a4e82f49c4b4a695b01529252b201 GIT binary patch literal 996 zcmV1w9=&6kngw#uHuj?Usvu|c+(j59=*v!n!`@Z*P-kTY~AYQo{(w7>| z3E_r9xJsY@$EK&x(eECU0x4De0 zVH*L`;d**RJAvsE!b0FYAqR;7pL4u&GtAESIeOR(;JEcLh24z<0C2h>Y_vsq3IPD< zKth6#WgM*E*oP1<0AM(^U3Hcn2rKergoIl4ldS@`JF zB#!(LV;M&R1Fa?S%1u=K0_GO;*jy{byr=PWCXecmzsgcj<~+F9ih8V2v?oHo?f@ha z+5-f#y!u?xTYmaXk~sdYE(Li`;6k`zf)D7zz2{Nj-~=cMu(66CMM1}*s3%OoI=C)2 zaEbuUQ53l7%Pr3WQ;8hfkB*AzlgqMi1E;xegt8#PK`VZ=p~m0zqKY$2pIpYr{(q>} z&Tw_)60mo^aT_@fOp*Yi{N$6>+FA7NSH~_=Y;^ztS{_4Pif)BxK}Q1F`93EIO3vJ3 z-g>$b5&F_b(}iz7Q+)u`lM&FeKuTJ}DS0{e%FU2c699ss6cNzV zg*>j-&M=yu#c^dDqv=^-?;AGP3Q9TU#m5F71SKb($;;aioj(r0BC$g$d^vj^r^y)! zLIkoaOUBUJL@Nz|XxgxSFOU7vEV{M|b8?z)p;QaCkKzcusoWewM3fYw<={5bPe!WqPk*GIn zc;dd3V`QK9jx`I~A&MC!u))+Myj&6WMh!y)BLIMFH*e$5!9Mr6EngMeL?pHZ`t_PT z=iv254TGskY4Fu*WSoeRP()so?kYM$xS^iv2_f8&7Y(|Q=$;P^j7Tqav5j{lw)AK{ zG_;*go>Ay^`FZC)#^1kHbT`)5C61l}QVd6Nc!5od>CBO*OvNwoCz@kwUbzY0-`a`# z?YDxnwbKM2H$KBS0a6Hpl0(g;XnOYn@#mT8dZ)jx`JA;xb~0isT<87Q^uPaf$+T9R S?yLC#0000=0.14.17", + "fabric": "*", + "minecraft": "1.19.4" + } +} diff --git a/src/main/resources/lymel.mixins.json b/src/main/resources/lymel.mixins.json new file mode 100644 index 0000000..e5fba7d --- /dev/null +++ b/src/main/resources/lymel.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "me.unurled.lymel.mixin", + "compatibilityLevel": "JAVA_17", + "server": [ + "server.Player.PlayerChangeEquipmentMixin", + "server.Player.PlayerManagerMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +}